6

私はハイブに取り組んでおり、初めてです。ハイブ クエリのパフォーマンスに関するいくつかの問題に直面しています。

  1. 何百人ものマッパーが利用できるにもかかわらず、私の仕事に割り当てられたマッパーの数は非常に少ないです。設定してみ mapred.map.tasks=200ました。しかし、マッパーは 20 ~ 30 人しか必要ありません。マッパーの数は入力分割に依存することは理解しています。マッパーを増やす他のオプションはありますか? そうでない場合、なぜ parameter( mapred.map.tasks) が導入されたのですか?

  2. ハイブクエリをマップリデュースジョブに関連付けるために理解できるリソースはありますか?つまり、クエリの別の部分が実行される場所はありますか?

4

3 に答える 3

2

マップ タスクの設定の詳細については、次のリンクを確認してください: http://wiki.apache.org/hadoop/HowManyMapsAndReduces。基本的に、mapred.map.tasks は単なるヒントです。通常、実際には何も制御しません。

Hive クエリがどのように実行されるかを確認するには、クエリの前にexplain. 例: explain select foo from bar;. さらに詳しい情報が必要な場合は、 もありexplain extendedます。

于 2012-12-11T19:00:09.520 に答える
1

この質問はずっと前に出されたものですが、質問された時点ではここにある提案の一部を利用できない場合でも、答えようと思います。

Hive のパフォーマンスを最適化するには:

  • Hive リクエストで使用されるマッパーとレデューサーの数を調整します。mapreduce.input.fileinputformat.split.maxsizeこれは、各 mapperの入力サイズと各 reducer の入力サイズを調整することで実行できます。hive.exec.reducers.bytes.per.reducer

「多ければ多いほど良い」とは限らないことに注意してください。そのため、これらの数値をニーズに合わせて調整する必要があります。

  • 結合を最適化し、テーブルの 1 つが小さいテーブルの場合 (可能であれば)、結合をマップ結合に変換します... ( https://cwiki.apache.org/confluence/display/Hive/LanguageManual+JoinOptimization )

  • 条件 (WHERE) でよく使用される列でテーブルを分割します。
    たとえば、頻繁にリクエストする場合
    SELECT * from myTable WHERE someColumn = 'someValue'
    は、「someColumn」列でテーブルをパーティション分割することをお勧めします。
    これにより、テーブル ファイル全体を検索する代わりに、クエリでパーティション ファイル someColumn=SomePartition のみを検索できるようになります。

  • 中間結果を圧縮すると、場合によってはパフォーマンスが向上することがあります (ハードウェア構成、ネットワーク、CPU/メモリによって異なります)。これは、プロパティを設定することで実行できます。hive.intermediate.compression.codec

  • たとえば、Snappy を使用して、適切な圧縮コーデックを選択します (ここのように):

    SET hive.exec.compress.output=true;
    SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
    SET mapred.output.compression.type=BLOCK;
    

質問の時点では利用できませんでした:

  • テキスト ファイルやシーケンス ファイルを使用する代わりに、最適化されたファイル形式を使用してテーブルを保存すると、ORC (ハイブ 0.11 +) を使用できます ( https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC )

  • MapReduce の代わりに別のエンジンを使用してクエリを実行すると、Tez または Spark を使用できます。たとえば、 tez を使用するには:

    <property>
        <name>hive.execution.engine</name>
        <value>tez</value>
    </property>
    

さらなる最適化については、こちらを参照してください

于 2016-04-17T10:19:23.790 に答える
0

「mapreduce.input.fileinputformat.split.maxsize」を小さくして、マッパーの数を増やす (分割を増やす) ことができます。

于 2015-01-17T22:16:10.937 に答える