Hive查询映射器的数量始终为1

时间:2014-01-02 10:03:12

标签: mapreduce hive elastic-map-reduce

我试图在一个表上运行一个简单的查询,其中一个分区有大约200-300k记录,所有这些记录都是120字节的小文件。

我正在使用自定义INPUTFORMAT读取文件内容,然后查询另一个s3文件以获取实际数据。每个文件对应一条记录。

查询大约需要6个小时才能完成。我在EMR上使用了一组10台m2.4xlarge类型的机器。

查看日志,启动作业和启动map reduce任务之间会有一个小时的延迟。此外,映射器/任务的数量仅显示为1。

 Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0

有什么我想念的吗?看起来根本没有并行执行。 我尝试设置以下属性,但根本没有改进:

mapreduce.job.counters.limit 1000
mapred.tasktracker.tasks.maximum 1000
mapred.tasktracker.map.tasks.maximum 100
mapred.tasktracker.reduce.tasks.maximum 95
mapred.map.tasks 100
mapred.child.java.opts -Xmx15048m
namenide-heap-size 15048

以下是表格和查询详情。

CREATE EXTERNAL TABLE IF NOT EXISTS sample(
         x string,
         y date,
     )
       PARTITIONED BY (date STRING)
       ROW FORMAT SERDE "com.gts.hive.analytics.store.serde.CustomSerDe"
       STORED AS INPUTFORMAT 'com.gts.hive.analytics.store.formats.mapred.GZipJsonFileInputFormat2'
       OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
       LOCATION 's3n://xyzlocation/';

ALTER TABLE sample ADD IF NOT EXISTS PARTITION(date='2013-12-31-07');

select x from sample;

2 个答案:

答案 0 :(得分:1)

gzip不可拆分,任何对gzip数据的Hadoop处理都将导致一个映射器。有可拆分的压缩格式,例如你可以使用的bzip。有关详情,请访问http://comphadoop.weebly.com/

答案 1 :(得分:0)

您可以尝试在查询结尾处添加cluster by rand(),我不太明白为什么,但似乎joingroup by,{{1}等等为地图作业启用某种洗牌。否则减速器的数量会自动强制为1。