Amazon EMR / Hive的性能调优处理S3中的大量文件

时间:2014-05-20 20:34:40

标签: hive amazon-emr

我正在尝试使用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)可能会出现问题,但我无法控制输入。

1 个答案:

答案 0 :(得分:1)

您的查询必须同时处理列出S3中的文件和处理压缩的S3N协议。尝试使用s3distcp将文件从S3更快地复制到HDFS,然后创建一个包含复制文件的表。