我有一个托管的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等等找不到线索。我可以使用哪些其他设置?
答案 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;