我在配置單元上工作,我對它很陌生。我正在面對有關hive查詢性能的一些問題。配置單元性能
分配給我的工作映射器的數量是非常低的,即使有 數百個可用的映射器。我試過設置
mapred.map.tasks=200
。但它只需要20到30個映射器。我明白,映射器的數量取決於輸入分解。有 任何其他選項來增加映射器嗎?如果沒有,那麼爲什麼會引入 參數(mapred.map.tasks
)?是否有任何資源,我可以理解關聯配置單元 查詢映射減少作業,即執行不同部分的 查詢?
我在配置單元上工作,我對它很陌生。我正在面對有關hive查詢性能的一些問題。配置單元性能
分配給我的工作映射器的數量是非常低的,即使有 數百個可用的映射器。我試過設置 mapred.map.tasks=200
。但它只需要20到30個映射器。我明白,映射器的數量取決於輸入分解。有 任何其他選項來增加映射器嗎?如果沒有,那麼爲什麼會引入 參數(mapred.map.tasks
)?
是否有任何資源,我可以理解關聯配置單元 查詢映射減少作業,即執行不同部分的 查詢?
有關設置地圖任務的更多信息,請查看此鏈接:http://wiki.apache.org/hadoop/HowManyMapsAndReduces。基本上,mapred.map.tasks只是一個提示;它通常不會真正控制任何東西。
要查看Hive查詢是如何執行的,只需在explain
前加上前言即可。例如:explain select foo from bar;
。如果您需要更多信息,還有explain extended
。
您可以減少'mapreduce.input.fileinputformat.split.maxsize'以增加映射器的數量(更多分割)。
我發現這個問題很久以前就被問過了,儘管這裏提出的一些建議在提問時不可用,我仍會盡力回答。
爲了優化性能蜂房:
mapreduce.input.fileinputformat.split.maxsize
完成,併爲每個減速器輸入尺寸:記裸說:「越多越好」並不總是正確的。所以你需要調整這些數字來滿足你的需求。
優化的連接,轉換加入來圖來連接,如果表中的一個小桌子(如果可能的話)...... (https://cwiki.apache.org/confluence/display/Hive/LanguageManual+JoinOptimization)
分區你的餐桌上往往列在條件(WHERE)中使用。
例如,如果你請求經常SELECT * from myTable WHERE someColumn = 'someValue'
建議在列「someColumn」
此分區的表將讓你的查詢搜索只是分區中的文件someColumn = SomePartition,而不是搜索整個表文件。
在某些情況下(取決於您的硬件配置,網絡和CPU /內存),壓縮中間結果可能會提高性能。使用斯納皮(as in here)hive.intermediate.compression.codec
選擇合適的壓縮編解碼器,例如:
SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET mapred.output.compression.type=BLOCK;
沒有可用的問題時:這可以通過設置屬性來完成
使用優化的文件格式來存儲您的表格,而不是使用文字填充e或序列文件,你可以使用ORC(蜂巢0.11 +),例如(https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)
使用其他引擎上執行的查詢,而不是MapReduce的,你可以使用TEZ甚至Spark.To使用tez for example:
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
進一步優化,你可以參考here
如何組織輸入數據?在某些情況下,Hive無法將輸入自由地分割成(n個理想化的)數量的映射器。例如,如果您正在加載.gz文件,我相信標準行爲是1 .gz文件 - > 1個地圖,無論可用的節點數量如何。 –
我在查詢蜂巢表。但表格非常大,大約爲10 TB .. – kabalas
表格的大小並不重要,@MikeRepass指的是數據文件的佈局。您的表是單個壓縮文件還是由多個文件組成。一些壓縮和文件格式支持壓縮。 –