【发布时间】:2014-05-21 16:37:37
【问题描述】:
我正在尝试将 Amazon EMR 与 Hive 结合使用来处理由广告跟踪服务器生成的大量日志文件。性能比我预期的差很多,希望有人可以指点我改进。
跟踪服务器每隔几分钟将日志文件上传到按天分区的 S3 文件夹(例如,“2014-05-20”)。每天大约上传 3,000 个文件,每个文件大约 20k。
使用 Hive,我成功创建了引用 S3 中数据的外部表,并为 30 天的日志文件设置了分区。我已验证分区工作正常,简单查询(例如,“SELECT * FROM click WHERE dt='2014-05-19' LIMIT 10)工作正常并快速响应。
我正在将数据加载到临时 HDFS 表中以供后续查询。为此,我运行了一个本质上是这样的 HQL 作业(请注意,click 是 S3 中的外部表):
CREATE TABLE tmp_click (
clickId string,
-- ...
dt string
)
STORED AS SEQUENCEFILE;
INSERT OVERWRITE TABLE tmp_click
SELECT
clickId,
-- ...
k.dt
FROM
click k
WHERE
k.dt >= '${START_DAY}' AND
k.dt <= '${END_DAY}'
;
此操作需要一个多小时,其中 25 个 xlarge 实例作为核心/任务节点工作。鉴于这里基本上没有进行任何处理——它只是复制数据,对吧? ——我觉得一定有什么我错过了。任何人都可以给我任何调查的提示吗?
我考虑过大量文件(约 3,000 天)或日志文件的压缩 (gz) 可能是问题,但我无法控制输入。
【问题讨论】:
标签: hive amazon-emr