2012-12-11 157 views
6

我在配置單元上工作,我對它很陌生。我正在面對有關hive查詢性能的一些問題。配置單元性能

  1. 分配給我的工作映射器的數量是非常低的,即使有 數百個可用的映射器。我試過設置 mapred.map.tasks=200。但它只需要20到30個映射器。我明白,映射器的數量取決於輸入分解。有 任何其他選項來增加映射器嗎?如果沒有,那麼爲什麼會引入 參數(mapred.map.tasks)?

  2. 是否有任何資源,我可以理解關聯配置單元 查詢映射減少作業,即執行不同部分的 查詢?

+1

如何組織輸入數據?在某些情況下,Hive無法將輸入自由地分割成(n個理想化的)數量的映射器。例如,如果您正在加載.gz文件,我相信標準行爲是1 .gz文件 - > 1個地圖,無論可用的節點數量如何。 –

+0

我在查詢蜂巢表。但表格非常大,大約爲10 TB .. – kabalas

+0

表格的大小並不重要,@MikeRepass指的是數據文件的佈局。您的表是單個壓縮文件還是由多個文件組成。一些壓縮和文件格式支持壓縮。 –

回答

2

有關設置地圖任務的更多信息,請查看此鏈接:http://wiki.apache.org/hadoop/HowManyMapsAndReduces。基本上,mapred.map.tasks只是一個提示;它通常不會真正控制任何東西。

要查看Hive查詢是如何執行的,只需在explain前加上前言即可。例如:explain select foo from bar;。如果您需要更多信息,還有explain extended

0

您可以減少'mapreduce.input.fileinputformat.split.maxsize'以增加映射器的數量(更多分割)。

1

我發現這個問題很久以前就被問過了,儘管這裏提出的一些建議在提問時不可用,我仍會盡力回答。

爲了優化性能蜂房:

  • 調諧通過您的蜂房請求中使用映射器和減速器的數目;這可以通過調整輸入大小爲每個映射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 herehive.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