この質問はずっと前に出されたものですが、質問された時点ではここにある提案の一部を利用できない場合でも、答えようと思います。
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;
質問の時点では利用できませんでした:
さらなる最適化については、こちらを参照してください