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

2024-01-17

我从 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;

NOTE:

  • 我的测试集群只有2个节点
  • HBase表超过5M条记录
  • Hive 日志显示 HiveInputFormat 和分割数 = 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.tasks and 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 http://answers.mapr.com/questions/5336/limit-mappers-and-reducers-for-specific-job.html

增加Hive Mapper任务失败? https://stackoverflow.com/questions/20816726/fail-to-increase-hive-mapper-tasks

映射器如何分配

映射器的数量由 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 映射器将读取的默认大小是多少? https://stackoverflow.com/questions/17852838/what-is-the-default-size-that-each-hadoop-mapper-will-read

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

增加 Hadoop 2 中 Hive 映射器的数量 的相关文章

随机推荐