【问题标题】:Why are the results of a hive query split into multiple files为什么 Hive 查询的结果会拆分为多个文件
【发布时间】:2011-10-28 08:51:12
【问题描述】:

我设置了一个 Amazon ElasticMapreduce 作业来运行 hive 查询

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 将结果存储在单个文件中?

【问题讨论】:

    标签: amazon-s3 hadoop hive amazon-emr


    【解决方案1】:

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

    尝试使用设置

    "设置 mapred.reduce.tasks = 1;"

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢,亚历克斯。似乎出于我的目的,我可以将内容合并到一个文件中。
      • 我试图从我超过 2 个月的数据日志中找到一个最小的日期和一个最大的日期。 EMR 将每个不同数据节点的最小-最大日期发送到 5 个不同的输出文件。结果,我在 5 个不同的输出文件中获得了 5 个最小日期和 5 个最大日期。这不符合我的目的?我如何将它们全部压缩到一个输出文件中,以在整个数据集中找到一个最小日期和一个最大日期?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多