2

以下は、実行エンジンをtezとしてHiveで実行しようとしているクエリです。

SELECT A.CITY, A.NAME, B.PRICE
  ,(ROW_NUMBER() OVER (PARTITION BY A.NAME ORDER BY B.PRICE) ) AS RNUM
  FROM TABLE1 A
  LEFT JOIN TABLE2 B 
   ON A.NAME = B.NAME 
   WHERE ( A.COLUMN2 >= B.COLUMN3 AND A.COLUMN2 < B.COLUMN4)
GROUP BY A.CITY, A.NAME, B.PRICE;
  • Hive のデータに対して上記のクエリを実行すると、結果が得られずに何時間も実行され続けますが、構文的には上記のクエリは正しいです。
  • TABLEA と TABLEB の両方に数百万のレコードがあります。

データ形式を変えたり、コンテナサイズを大きくしたり、レデューサーの数を変えたり、ヒープサイズを変えたりしてみました。どのパラメータを変更しても、クエリが動かなくなります。

さらに調査したところ、where 条件とウィンドウ関数が原因でクエリが無限に実行されていることがわかりました。

これが私の質問です:

  • 膨大なデータに対してエンド ツー エンドでクエリを実行する変更は何ですか?

ご協力いただきありがとうございます

4

1 に答える 1

0

これは、メモリ割り当てやレデューサー数が原因ではないと思います。データの偏りが原因である可能性があります。そこからも分析。このリンクが役立ちます: https://cwiki.apache.org/confluence/display/Hive/Skewed+Join+Optimization

以下のリンクは、歪んだテーブルとリストのバケット化に関する洞察を提供します。読み逃さないでください。

https://cwiki.apache.org/confluence/display/Hive/ListBucketing

ありがとう!

于 2016-07-01T14:55:54.417 に答える