3

我设置了一个 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。

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

4

2 回答 2

2

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

尝试使用设置

“设置 mapred.reduce.tasks = 1;”

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

于 2013-06-28T12:05:51.820 回答
1

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

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

于 2011-10-28T11:05:05.917 回答