无法增加Hive Mapper任务?

时间:2013-12-28 16:26:30

标签: hadoop hive

我有一个托管的Hive表,它只包含一个150MB的文件。然后我做“从tbl中选择count(*)”到它,它使用2个映射器。我想将它设置为更大的数字。

首先我试过'set mapred.max.split.size = 8388608;',所以希望它会使用19个映射器。但它只使用3.不知何故,它仍然将输入分为64MB。我也使用'set dfs.block.size = 8388608;',也没用。

然后我尝试了一个vanilla map-reduce工作来做同样的事情。它最初使用3个映射器,当我设置mapred.max.split.size时,它使用19.所以我想问题就在于Hive。

我读了一些Hive源代码,比如CombineHiveInputFormat,ExecDriver等等找不到线索。

我可以使用哪些其他设置?

2 个答案:

答案 0 :(得分:4)

我将@javadba的答案与我从Hive邮件列表中收到的答案结合起来,这是解决方案:

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
set mapred.map.tasks = 20;
select count(*) from dw_stage.st_dw_marketing_touch_pi_metrics_basic;

来自邮件列表:

  

似乎HIVE正在使用旧的Hadoop MapReduce API,因此mapred.max.split.size将无效。

我稍后会深入研究源代码。

答案 1 :(得分:1)

尝试添加以下内容:

set hive.merge.mapfiles=false;
set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;