2017-07-07 6 views
1

tableA.col1 = tableB.col1およびtableA.col2 = tableB.col2でtableA left join tableBのようなハイブクエリを実行しています。 tableAには18億のデータがあり、tableBには3,100万のレコードがあります。私の参加の最後の減量は完了していないし、それは長い間実行されています。ハイブで長時間実行されるクエリの原因となるスキューデータ

スキューのデータが原因である可能性があります。 MAPJOINを試してみましたが、tableAの膨大なデータ量のためにクエリが失敗しました。より良い方法でこれらを処理できる他のオプションはありますか?私は長い間実行されている見ることができます

タスクは、そのステップでやろうとしている正確に何

reduce > copy task(attempt_1498868574233_185232_m_001336_0 succeeded at 8.94 MB/s) Aggregated copy rate(1121 of 2532 at 108.94 MB/s) 

次のようにありますか?偽
追加で:

+0

こちらをご覧ください:https://stackoverflow.com/a/37414611/2700344 – leftjoin

+0

@leftjoin、手動の回避策の必要はありませんが。 Hiveはスキュード結合をサポートしています。 –

答えて

0

hive.optimize.skewjoin

trueにhive.optimize.skewjoin
デフォルト値に設定ハイブ0.6.0
スキューを有効にするかどうかを最適化に参加します。

またチューンhive.skewjoin.keyhive.skewjoin.mapjoin.map.taskshive.skewjoin.mapjoin.min.splitする場合があります。

hive.skewjoin.key
デフォルト値:100000
追加で:ハイブ0.6.0
私たちが参加するのスキューキーを取得するかどうかを確認します。結合演算子で同じキーを持つ 個以上の行が表示されている場合は、 というキーがスキュー結合キーと考えられます。

hive.skewjoin.mapjoin.map.tasks
デフォルト値:10000
追加で:ハイブ0.6.0
フォローアップマップ で使用されるマップタスクの数がスキューのための仕事に参加決定参加する。きめ細かな制御を行うには、 hive.skewjoin.mapjoin.min.splitと一緒に使用する必要があります。

hive.skewjoin.mapjoin.min.split
デフォルト値:33554432
追加で:ハイブ0.6.0
は、最も使用される をフォローアップマップ内のジョブに参加し、マップタスクの数を決定します最小の分割サイズを指定してスキュー結合します。 hive.skewjoin.mapjoin.map.tasksと一緒に使用して を細かく制御する必要があります。

https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties

関連する問題