私は複数の日(例えば2週間)の '日'(日付)でパーティション化されたHDFS上で2つのテーブルを結合しようとしています。どちらのテーブルも100sのカラムを持っていますが、私はそれらの10sを照会しようとしています。毎日10億以上の行があります。ハイブクエリは常に失敗します。非常に大きなテーブルに最適に結合するには?
私のHIVEクエリは次のようになります。
INSERT OVERWRITE TABLE join1 partition (day)
SELECT a.x1, a.x2, a.x3... a.xn, b.y1, b.y2.... b.ym, b.day
from (
select x1, x2, x3... xn
from table1
where day between day1 and day2
) a
join (
select x1, y1, y2,... ym, day
from table2 where day between day1 and day2
) b
on a.x1=b.x1;
まずproblem-これが小さい期間(1-7日)にも参加行うことをリアルに長い時間(12+時間)を要します。
2番目の問題は、10日以上それをやろうとするたびに失敗します。これはデフォルトで約504のマッパーと250のリデューサーを使用します(私は500のリデューサーも試しました)。
は、私はこのエラーが(What is Hive: Return Code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask)本物ではないですけど、でも本当のエラー(私は今それを得ることができません申し訳ありません)非常に有用ではありませんでした。
このクラッシュの原因は何でしょうか?誰もこのような巨大なテーブルに参加するより良い方法を提案することはできますか?
TEZ実行エンジンでクエリを実行してみてください。 '-hiveconf hive.root.logger = DEBUG、console'を追加すると、エラーの詳細が表示されます。 – Ambrish