ハイブ クエリがハングしていて、その理由がわかりません (hadoop 0.20.1、ハイブ 0.9 を使用)。
クエリ:
SELECT
a.field1 FROM table_1 a
LEFT SEMI JOIN
(SELECT DISTINCT(usrId) FROM table_2 b
WHERE soemthing=true ORDER BY rand() limit 1000) random_user_ids
WHERE a.usrId=random_user_ids.usrId
EXPLAINは私に返してくれます:
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-2 depends on stages: Stage-1
Stage-3 depends on stages: Stage-2
Stage-0 is a root stage
データセット
- テーブル内の最大 2 億エントリ
- table_1.usrId と table_1 の関係は約 1:40 である必要があります。つまり、上記のクエリでは 1000*40=40000 が返されます。
所見:
- ジョブは最終段階 3 で 33% (reduce > sort) でハングし、そこで結合が行われます (結合結果は約 40000 です)。
- 遅いのは別として、reduce > sort がステージ 3 の一部である理由は何ですか? 注文するのではなく、何かに参加するだけです
- レデューサーのサイズは 1 しかありません (並べ替えのため?)。これは、スケーリングしないため、ほとんど常に悪いことです。
さらに入力が必要な場合 (例: より詳細な EXPLAIN 情報、より多くのクラスター情報) を教えてください。
ありがとう!