增加Hadoop 2中的Hive映射器数量

我从Hive创建了一个HBase表,我正在尝试对它进行简单的聚合。 这是我的Hive查询:

from my_hbase_table select col1, count(1) group by col1; 

地图减少作业只产生2个映射器,我想增加它。 使用普通地图缩小作业,我将配置纱线和映射器内存以增加映射器的数量。 我在Hive中尝试了以下操作,但它不起作用:

 set yarn.nodemanager.resource.cpu-vcores=16; set yarn.nodemanager.resource.memory-mb=32768; set mapreduce.map.cpu.vcores=1; set mapreduce.map.memory.mb=2048; 

注意:

  • 我的测试集群只有2个节点
  • HBase表有超过5M的记录
  • Hive日志显示HiveInputFormat和一些splits = 2

拆分文件较小,然后默认值不是一个有效的解决方案。 在处理大型数据集时基本上使用Spiting。 默认值本身是一个小尺寸,因此不值得再次拆分它。

我建议您在查询之前进行以下配置。您可以根据输入数据应用它。

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

如果您还想指定减速机的数量,那么您可以使用以下配置

 set mapred.reduce.tasks = XX; 

请注意,在Hadoop 2(YARN)上,不推荐使用mapred.map.tasksmapred.reduce.tasks ,并将其替换为其他变量:

 mapred.map.tasks --> mapreduce.job.maps mapred.reduce.tasks --> mapreduce.job.reduces 

请参考以下与此相关的有用链接

http://answers.mapr.com/questions/5336/limit-mappers-and-reducers-for-specific-job.html

无法增加Hive Mapper任务?

如何分配映射器

映射器的数量由MapReduce作业中使用的InputFormat确定的拆分数决定。 在典型的InputFormat中,它与文件数和文件大小成正比。

假设您的HDFS块配置配置为64MB(默认大小),并且您有一个100MB大小的文件,那么它将占用2个块,然后将根据块分配2个映射器

但是假设你有2个大小为30MB的文件(每个文件),那么每个文件将占用一个块,映射器将基于此获得分配。

当您使用大量小文件时,Hive默认使用CombineHiveInputFormat。 就MapReduce而言,它最终转换为使用CombineFileInputFormat,它在多个文件上创建虚拟分割,尽可能按公共节点,机架分组。 合并拆分的大小由下式确定

 mapred.max.split.size or mapreduce.input.fileinputformat.split.maxsize ( in yarn/MR2); 

因此,如果您希望减少分割(减少映射器),则需要将此参数设置得更高。

此链接可用于了解更多信息。

每个Hadoop映射器将读取的默认大小是多少?

此外,映射器和缩减器的数量始终取决于群集的可用映射器和缩减器插槽。

从默认值减小输入分割大小。 映射器将会增加。

SET mapreduce.input.fileinputformat.split.maxsize;

拆分HBase表应该让你的工作自动使用更多的映射器。

由于您有2个拆分,因此每个拆分由一个映射器读取。 增加号码 分裂。