3

Hive クエリを実行するように 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、x が 0 から 4 までのパターンを持つ 5 つのファイルが含まれます。ファイルは小さく、それぞれ 35 KB です。

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

4

2 に答える 2

2

一般的にはい、これは達成可能ですが、スケーラビリティがいくらか失われます

設定を使ってみる

「set mapred.reduce.tasks = 1;」

これにより、1 つのレデューサーが強制されるため、出力されるファイルは 1 つだけになります。

于 2013-06-28T12:05:51.820 に答える
1

それらは異なるデータノードによって作成されます。それぞれがファイルに追加しています-すべてが同じファイルに追加する必要がある場合、これには多くのロックが必要になり、速度が低下します。

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

于 2011-10-28T11:05:05.917 に答える