增加Hadoop2中的配置单元Map器数量

d6kp6zgx  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(317)

我从hive创建了一个hbase表,并尝试对其进行简单的聚合。这是我的配置单元查询:

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

map reduce作业只生成2个Map器,我想增加它。使用一个简单的map reduce作业,我将配置Yarn和Map器内存以增加Map器的数量。我在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表有超过500万条记录
配置单元日志显示hiveinputformat和多个拆分=2

gwbalxhn

gwbalxhn1#

拆分hbase表应该可以让您的作业自动使用更多Map器。
因为有两个分割,所以每个分割由一个Map器读取。增加分裂的数量。

nle07wnf

nle07wnf2#

从默认值减少输入拆分大小。Map绘制者将会增加。 SET mapreduce.input.fileinputformat.split.maxsize;

gv8xihay

gv8xihay3#

将文件拆分为小于默认值的值不是有效的解决方案。在处理大型数据集的过程中,基本上都会用到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;

注意,在hadoop2(yarn)上 mapred.map.tasks 以及 mapred.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
无法增加配置单元Map程序任务?
Map绘制人员如何分配
Map器的数量由mapreduce作业中使用的inputformat确定的分割数确定。在典型的输入格式中,它与文件数量和文件大小成正比。
假设您的hdfs块配置配置为64mb(默认大小),并且您有一个100mb大小的文件,那么它将占用2个块,然后根据这些块分配2个Map器
但是假设你有两个30mb大小的文件(每个文件),那么每个文件将占用一个块,mapper将基于此获得assignd。
当您处理大量小文件时,hive默认使用combinehiveinputformat。就mapreduce而言,它最终转化为使用combinefileinputformat,在多个文件上创建虚拟拆分,尽可能按公共节点和机架分组。组合拆分的大小由

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

因此,如果您想有较少的分裂(较少的Map器),您需要设置这个参数更高。
这个链接可以帮助您了解更多关于它的信息。
每个hadoopMap器将读取的默认大小是多少?
此外,Map器和还原器的数量始终取决于集群中可用的Map器和还原器插槽。

相关问题