我设置了一个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>
是否可以指示配置单元将结果存储在单个文件中?
答案 0 :(得分:2)
总的来说,这是可以实现的,但是会失去一些可扩展性
尝试使用设置
“set mapred.reduce.tasks = 1;”
这会强制1个减速器,因此只会输出1个文件。
答案 1 :(得分:1)
它们由不同的数据节点创建。每个都附加到文件 - 如果它们都必须附加到同一个文件,那么这将需要大量锁定并减慢它。
只需引用目录及其所有内容,即可将多个文件视为一个大文件。