hive優化之參數調優


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個參數決定:

        <property>

                <name> mapred.map.tasks.speculative.execution </name>

                <value>true</value>

        </property>

        <property>

                <name> mapred.reduce.tasks.speculative.execution</name>

                <value>true</value>

        </property>

hive本身也有控制推測執行的參數,可以在hive-site.xml文件中配置:

        <property>

                <name>hive.mapred.reduce.tasks.speculative.execution </name>

                <value>true</value>

        </property>

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

建議值:set hive.fetch.task.conversion=more;

9、設置隊列優先級

Set mapreduce.job.queuename=bigdata;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM