Hive設置配置參數的方法
- Hive提供三種可以改變環境變量的方法,分別是:
(1)、修改${HIVE_HOME}/conf/hive-site.xml配置文件;
(2)、命令行參數;
(3)、在已經進入cli時進行參數聲明。
方法一:hive-site.xml配置參數
- 在Hive中,所有的默認配置都在 "{HIVE_HOME}/conf/hive-default.xml "文件中,如果需要對默認的配置進行修改,可以創建一個 "hive-site.xml" 文件,放在 " {HIVE_HOME}/conf"目錄下。里面可以對一些配置進行個性化設定。在hive-site.xml的格式如下:
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> <description>location of default database for the warehouse</description> </property> </configuration>
- 所有的配置都是放在<configuration></configuration>標簽之間,一個configuration標簽里面可以存在多個<property></property>標簽。<name>標簽里面就是我們想要設定屬性的名稱;<value>標簽里面是我們想要設定的值;<description;<標簽是描述在這個屬性的,可以不寫。絕大多少配置都是在xml文件里面配置的,因為在這里做的配置都全局用戶都生效,而且是永久的。用戶自定義配置會覆蓋默認配置。另外,Hive也會讀入Hadoop的配置,因為Hive是作為Hadoop的客戶端啟動的,Hive的配置會覆蓋Hadoop的配置。
方法二:命令行參數
- 在啟動Hive cli的時候進行配置,可以在命令行添加-hiveconf param=value來設定參數,例如:
hive --hiveconf mapreduce.job.queuename=queue1
- 這樣在Hive中所有MapReduce作業都提交到隊列queue1中。這一設定對本次啟動的會話有效,下次啟動需要重新配置。
方法三:進入cli時候聲明
- 在已經進入cli時進行參數聲明,可以在HQL中使用SET關鍵字設定參數,例如:
set mapreduce.job.queuename=queue1;
上述三種設定方式的優先級依次遞增。即參數聲明覆蓋命令行參數,命令行參數覆蓋配置文件設定。
列舉8個常用的配置參數
- 0-hive.fetch.task.conversion=more;將hive拉取的模式設置為more模式
- 1-hive.exec.mode.local.auto 決定 Hive 是否應該自動地根據輸入文件大小,在本地運行(在GateWay運行) ;
- 2-hive.auto.convert.join :是否根據輸入小表的大小,自動將 Reduce 端的 Common Join 轉化為 Map Join,從而加快大表關聯小表的 Join 速度。 默認:false。
- 3-mapred.reduce.tasks :所提交 Job 的 reduer 的個數,使用 Hadoop Client 的配置。 默認是-1,表示Job執行的個數交由Hive來分配;
mapred.map.tasks:設置提交Job的map端個數; - 4-hive.map.aggr=true 開啟map端聚合;
hive.groupby.skewindata=true :決定 group by 操作是否支持傾斜的數據。
原理是,在Group by中,對一些比較小的分區進行合並,默認是false; - 5-hive.merge.mapredfiles :是否開啟合並 Map/Reduce 小文件,對於 Hadoop 0.20 以前的版本,起一首新的 Map/Reduce Job,對於 0.20 以后的版本,則是起使用 CombineInputFormat 的 MapOnly Job。 默認是:false;
- 6-hive.mapred.mode :Map/Redure 模式,如果設置為 strict,將不允許笛卡爾積。 默認是:'nonstrict';
- 7-hive.exec.parallel :是否開啟 map/reduce job的並發提交。
默認Map/Reduce job是順序執行的,默認並發數量是8,可以配置。默認是:false; - 8-hive.exec.dynamic.partition =true:是否打開動態分區。 需要打開,默認:false;
set hive.exec.dynamic.partition.mode=nonstirct