从hadoop1迁移到hadoop2后如何恢复hadoop Map reduce作业的性能

Posted

技术标签:

【中文标题】从hadoop1迁移到hadoop2后如何恢复hadoop Map reduce作业的性能【英文标题】:How to restore performance of hadoop Map reduce job after migrating from hadoop1 to hadoop2 【发布时间】:2020-04-04 13:49:31 【问题描述】:

从 hadoop 1.0.3 -> hadoop 2.8.5 迁移后,Hadoop Map 降低作业性能(执行作业的时间)降级(5min->15min)

详情如下:

我在 AWS EMR 环境中执行 Hadoop Map reduce 作业。

Hadoop 1.0.3 环境详情: AMI 版本:2.4.11 Hadoop版本:1.0.3

EMR 作业的第 1 步(仅 1 步)需要 5 分钟 运行,测试实例由 1 个主控和 1 个核心(aws 术语)组成。在 hadoop 仪表板中,我的应用程序由一个作业组成。

作业中的 Mapper 任务数:524 作业中的 reducer 任务数:7 机器配置(R3.2xlarge:8VCPU、61Gib RAM、160GB SSD)

Hadoop 2.8.5 环境详情:

在 Hadoop 2.8.5 环境中,相同的 mapreduce 作业需要 ~15 分钟以所有相同的配置(1master,1 core)运行

作业中的 Mapper 任务数:524 作业中的 reducer 任务数:3,7 // 尝试使用 3 个和 7 个 reducer 机器配置(R5.2xlarge:8VCPU、64Gib RAM、350GB EBS)

配置值

yarn.scheduler.minimum-allocation-mb =32

yarn.scheduler.maximum-allocation-mb = 57344

有关使用 Hadoop 2.8.5 MR 作业运行的作业的其他信息 经过:15 分钟 5 秒 诊断: 平均地图时间 7 秒 平均随机播放时间 10 分钟 51 秒 平均合并时间 0 秒 平均减少时间 0 秒

我尝试过的: 围绕以下设置进行了调整,但执行作业的时间方面的性能在任何情况下都没有改变。共享测试场景之一的值

mapreduce.map.java.opts = -Xmx5734m mapreduce.reduce.java.opts = Xmx11468m

下面我提到了不同的组合尝试

mapreduce.map.memory.mb = 4163, 9163, 7163 mapreduce.reduce.memory.mb = 2584, 6584, 3584

由于 hadoop2 中的资源管理器架构发生了变化,我围绕它进行了试验,但有什么我可能遗漏的。我对 Hadoop 的熟练程度:初学者

【问题讨论】:

【参考方案1】:

问题是 Hadoop map-reduce 中的小文件问题。在 Hadoop V1.0.3 中,这个问题被重新启动 JVM 容器(mapred.job.reuse.jvm.num.tasks)所掩盖。

但是,在 Hadoop V2 中,不允许重用 JVM 容器。使用 Uber 模式也不可行,因为它会依次运行 ApplicationMaster 容器中的所有地图任务。

使用CombineTextInputFormat.setMaxInputSplitSize(job, bytes) 解决了小文件问题,因为它根据作为参数提供的字节数创建了逻辑拆分。

https://hadoop.apache.org/docs/r2.4.1/api/org/apache/hadoop/mapreduce/lib/input/CombineFileInputFormat.html

【讨论】:

以上是关于从hadoop1迁移到hadoop2后如何恢复hadoop Map reduce作业的性能的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop2之NameNode HA详解

Hadoop HA 机制学习

hadoop之 Hadoop1.x和Hadoop2.x构成对比

hadoop2 环境的搭建(手动HA)

Hadoop的HA

hadoop2 环境的搭建(自动HA)