为什么将配置单元查询的结果拆分为多个文件

时间:2011-10-28 08:51:12

标签: amazon-s3 hadoop hive amazon-emr

我设置了一个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的输出位置将包含5个文件,其格式为task_201110280815_0001_r_00000x,其中x从0到4.文件很小,每个35 KB。 / p>

是否可以指示配置单元将结果存储在单个文件中?

2 个答案:

答案 0 :(得分:2)

总的来说,这是可以实现的,但是会失去一些可扩展性

尝试使用设置

“set mapred.reduce.tasks = 1;”

这会强制1个减速器,因此只会输出1个文件。

答案 1 :(得分:1)

它们由不同的数据节点创建。每个都附加到文件 - 如果它们都必须附加到同一个文件,那么这将需要大量锁定并减慢它。

只需引用目录及其所有内容,即可将多个文件视为一个大文件。