2016-12-14 3 views
0

私は140億レコード(約1TBのサイズ)のハイブテーブルと、8億レコードのもう1つのハイブテーブル(2GBビッグ)を持っています。私は彼らに参加したい、私の戦略は何だろうか? 私は36のノードクラスタを持っています。私は50人のエグゼキュータを使用しています。各エグゼキュータには30 GBです。スパークハイブテーブル結合戦略

私が見たものから、私のオプションは以下のとおりです。

  1. やみくも2つのテーブルを結合する2 GBのテーブル
  2. の番組は(私はこれを行っている、完了するまでに約4時間を取っている)

テーブルを再分割して結合すると、パフォーマンスが向上しますか? 2番目のアプローチでは、最後の20個のタスクが非常に遅いことがわかりました。私は、より多くのデータ(偏りのあるデータ)を持つパーティションを処理したいと考えています。

+0

あなたが提供する答えを見ていましたか? – javadba

答えて

2

各ワーカーに十分なRAMを割り当てると、小さいテーブルがメモリに収まるようになります。その場合、マップ側の結合/サイド・データ・アプローチが有効かもしれません。

MapJoinヒントを使用して見てみましょう:

SELECT /*+ MAPJOIN(b) */ a.key, a.value 
FROM a JOIN b ON a.key = b.key 

不可欠ポイント:

を全て結合されているテーブルの1つを除いが小さい場合、参加はとして 行うことができますマップのみのジョブ。その使用上の

詳細はここで見ることがあります。https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins#LanguageManualJoins-MapJoinRestrictions