次の形式のハイブ クエリを実行しています。
INSERT OVERWRITE LOCAL DIRECTORY ...
SELECT /*+ MAPJOIN(...) */ * FROM ...
のためMAPJOIN
、結果には削減フェーズは必要ありません。マップ フェーズでは約 5000 人のマッパーを使用し、ジョブを完了するのに約50 分かかります。この時間のほとんどは、これらの 5000 個のファイルをローカル ディレクトリにコピーするのに費やされていることがわかりました。
これを最適化するために、2 番目のマップ削減ジョブを強制するために (結果が既に明確であることは事前にわかっているため、実際に結果が変わるわけではありません)に置き換えSELECT * ...
ました。SELECT DISTINCT * ...
最初の map reduce ジョブは前と同じで、5000 のマッパーと 0 のレデューサーを使用します。2 番目のマップ削減ジョブには、5000 のマッパーと 3 のレデューサーが含まれています。この変更により、コピーするファイルが 5000 個ではなく 3 個になり、クエリにかかる時間は合計で約20 分になりました。
実際には必要ないのでDISTINCT
、DISTINCT
?