1、hive參數優化之預設啟用本地模式
啟動hive本地模式參數,一般建議将其設定為true,即時刻啟用: hive (chavin)> set hive.exec.mode.local.auto; hive.exec.mode.local.auto=false |
2、設定hive執行模式
hive (default)> set hive.mapred.mode;
hive.mapred.mode=nonstrict
參數hive.mapred.mode控制着hive的執行模式,如果設定為strict模式,則hive作業禁止3種類型查詢:
1)分區表沒有啟用分區過濾字段。
2)order by沒有指定limit限制
3)笛卡爾積
3、限制調整
查詢中使用limit限制傳回資料行數,但是實際mapreduce任務很多情況已經跑完了整個任務。可以通過配置參數對這種情況進行控制:
設定hive.limit.optimize.enable=true;将針對查詢對中繼資料進行抽樣。
同時可能還需要設定以下兩個參數:
set hive.limit.row.max.size=100000;
set hive.limit.optimize.limit.file=10;
這樣設定不好的一點是有些資料可能永遠也通路不到。
4、jvm重用相關設定
jvm重用是hadoop調優參數的内容,其對hive的性能影響是非常大的,特别是對于針對很多小檔案的場景或task特别多的場景,這類場景任務執行的時間都很短。hadoop預設使用派生的jvm執行mapreduce任務,對于jvm的啟動時很大的開銷,特别針對于task任務比較多的場景。jvm重用可以使jvm執行個體在同一個job中運作n次,n的值在hadoop的mapred-site.xml檔案進行配置:
<property>
<name> mapred.job.reuse.jvm.num.tasks </name>
<value>10</value>
</property>
也可以在hive cli中通過set設定:
hive (default)> set mapred.job.reuse.jvm.num.tasks;
mapred.job.reuse.jvm.num.tasks=1
hive (default)> set mapred.job.reuse.jvm.num.tasks=10;
hive (default)> set mapred.job.reuse.jvm.num.tasks;
mapred.job.reuse.jvm.num.tasks=10
這個功能的一個缺點就是會一直占用task插槽不釋放,以備重用,直到任務完成才釋放。如果在任務過程中出現資料傾斜,則可能task插槽需要等到reduce task任務完成才能釋放。
5、推測執行相關配置
hadoop的推測執行功能由mapred-site.xml檔案中的2個參數決定:
<name> mapred.map.tasks.speculative.execution </name>
<value>true</value>
<name> mapred.reduce.tasks.speculative.execution</name>
hive本身也有控制推測執行的參數,可以在hive-site.xml檔案中配置:
<name>hive.mapred.reduce.tasks.speculative.execution </name>
hive中推測執行參數預設值如下:
hive (default)> set mapred.map.tasks.speculative.execution;
mapred.map.tasks.speculative.execution=true
hive (default)> set mapred.reduce.tasks.speculative.execution;
mapred.reduce.tasks.speculative.execution=true
hive (default)> set hive.mapred.reduce.tasks.speculative.execution;
hive.mapred.reduce.tasks.speculative.execution=true
6、單個mapreduce中運作多個group by
參數hive.multigroupby.singlemr控制師徒将查詢中的多個group by組裝到單個mapreduce任務中。如果啟用這個優化,那麼需要一組常用的group by鍵:
7、聚合優化:
啟用參數:hive.map.aggr=true
8、參數hive.fetch.task.conversion的調優:
預設值:hive.fetch.task.conversion=minimal