Mar*_*ace 7 java hadoop hbase hive hadoop2
我从Hive创建了一个HBase表,我正在尝试对它进行简单的聚合.这是我的Hive查询:
from my_hbase_table
select col1, count(1)
group by col1;
Run Code Online (Sandbox Code Playgroud)
地图减少作业只产生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;
Run Code Online (Sandbox Code Playgroud)
注意:
San*_*ngh 18
拆分文件较小然后默认值不是一个有效的解决方案.在处理大型数据集时基本上使用Spiting.默认值本身是一个小尺寸,因此不值得再次拆分它.
我建议您在查询之前进行以下配置.您可以根据输入数据应用它.
set hive.merge.mapfiles=false;
set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
set mapred.map.tasks = XX;
Run Code Online (Sandbox Code Playgroud)
如果您还想指定减速机的数量,那么您可以使用以下配置
set mapred.reduce.tasks = XX;
Run Code Online (Sandbox Code Playgroud)
请注意,在Hadoop 2(纱线)时,mapred.map.tasks和mapred.reduce.tasks已被取消,通过其他变量被替换:
mapred.map.tasks --> mapreduce.job.maps
mapred.reduce.tasks --> mapreduce.job.reduces
Run Code Online (Sandbox Code Playgroud)
请参考以下与此相关的有用链接
http://answers.mapr.com/questions/5336/limit-mappers-and-reducers-for-specific-job.html
如何分配映射器
映射器的数量由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);
Run Code Online (Sandbox Code Playgroud)
因此,如果您希望减少分割(减少映射器),则需要将此参数设置得更高.
此链接可用于了解更多信息.
此外,映射器和缩减器的数量始终取决于群集的可用映射器和缩减器插槽.