ハイブクエリの結果が複数のファイルに分割される理由

私はAmazon ElasticMapreduceジョブを設定してハイブクエリを実行しています

CREATE EXTERNAL TABLE output_dailies (
day string, type string, subType string, product string, productDetails string, 
uniqueUsers int, totalUsers int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '${OUTPUT}';

INSERT OVERWRITE TABLE output_dailies
select day, type, subType, product, productDetails, count(distinct accountId) as uniqueUsers, count(accountId) as totalUsers from raw_logs where day = '${QUERY_DATE}' group by day, type, subType, product, productDetails;

ジョブが終了すると、S3に設定された出力先には、このパターンの task_201110280815_0001_r_00000x という5つのファイルが含まれます。ここで、xは0から4になります。

ハイブに結果を1つのファイルに保存するよう指示することは可能ですか?

3

2 答え

一般的にはいはい、これは達成可能ですが、ある程度のスケーラビリティ

設定を使用してみてください

"set mapred.reduce.tasks = 1;"

これにより、1つの減速機が強制的に出力されます。

2
追加された

それらは異なるデータノードによって作成されます。それぞれがファイルに追加されています - もしそれらがすべて同じファイルに追加されなければならない場合、これはたくさんのロックを必要とし、遅くします。

ディレクトリとそのすべての内容を参照するだけで、複数のファイルを1つの大きなファイルとして扱うことができます。

1
追加された
私は2ヶ月以上のデータを記録している1つの最小日付と1つの最大日付を見つけようとしています。 EMRは、異なるデータノードのそれぞれから5つの異なる出力ファイルにmin-maxの日付を送信しています。その結果、私は5つの異なる出力ファイルで5分の日付と5つの最大の日付を取得しています。それは私の目的に役立たないのですか? 1つの出力ファイルにそれらをすべて集約すると、データセット全体で1つの最小日付と1つの最大日付を見つけることができますか?
追加された 著者 Syed Rakib Al Hasan,
ありがとう、アレックス。私の目的のために、私はちょうど1つのファイルに内容をマージすることができます。
追加された 著者 zsolt,