1

アドホック クエリに Hive を使用しており、2 つのフィールドに分割された Hive テーブルがあります(date,id)

現在、各日付には約 1400 の ID があるため、1 日でその多くのパーティションが追加されます。実際のデータは s3 にあります。今、私たちが直面している問題はselect count(*)、テーブルから 1 か月間実行すると、マップ削減ジョブを起動するだけでかなり長い時間 (約 : 1 時間 52 分) かかることです。

Hive verbose モードでクエリを実行すると、実際にスポーンするマッパーの数を決定する (分割を計算する) 時間が費やされていることがわかります。map-reduce ジョブの起動の遅延時間を短縮する方法はありますか?

これは、このラグ タイム中に記録されるログ メッセージの 1 つです。

13/11/19 07:11:06 INFO mapred.FileInputFormat: Total input paths to process : 1
13/11/19 07:11:06 WARN httpclient.RestS3Service: Response '/Analyze%2F2013%2F10%2F03%2F465' - Unexpected response code 404, expected 200 
4

1 に答える 1

1

これはおそらく、過度にパーティション分割されたテーブルでは、クエリの計画フェーズに時間がかかるためです。さらに悪いことに、クエリの計画フェーズ自体が、クエリの実行フェーズよりも長くかかる場合があります。

この問題を解決する 1 つの方法は、メタストアを調整することです。しかし、より良い解決策は、効率的なスキーマを考案し、不要なパーティションを取り除くことです。私を信じてください、本当に多くの小さなパーティションは必要ありません。

別の方法として、クエリを発行する前にhive.input.formatorg.apache.hadoop.hive.ql.io.CombineHiveInputFormatに設定することもできます。

HTH

于 2013-11-20T22:41:46.077 に答える