java - 从hadoop1迁移到hadoop2后如何恢复hadoop Map reduce作业的性能
问题描述
从 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 秒
- 平均合并时间 0sec
- 平均减少时间 0sec
我尝试过的:调整了以下设置,但在执行作业的时间方面的性能在任何情况下都没有改变。共享测试场景之一的价值
- 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 的熟练程度:初学者
解决方案
问题是Hadoop map-reduce 中的小文件问题。在 Hadoop V1.0.3 中,这个问题被重新启动 JVM 容器(mapred.job.reuse.jvm.num.tasks)所掩盖。
但是,在 Hadoop V2 中,不允许重用 JVM 容器。使用 Uber 模式也不可行,因为它将按顺序运行 ApplicationMaster 容器中的所有地图任务。
UsingCombineTextInputFormat.setMaxInputSplitSize(job, bytes)
解决了小文件问题,因为它根据作为参数提供的字节数创建了逻辑拆分。
推荐阅读
- c# - 具有覆盖 Equals、IEquatable、== 和 != 的 Equals 实现
- r - 如何编写代码片段以与 R Studio 中的代码进行交互
- r - R将循环输出放入矩阵
- python - Python 测试 - AttributeError:“NoneType”对象没有属性“status_code”
- javascript - Mathlive -> 垂直滚动不起作用
- python - 如何提及消息中提及的人
- javascript - 带有 D3 的 SVG 标记 mousedown 事件
- flutter - 如何在 Flutter 中的 sqlite 在 SmoothStarRating 中显示评分
- node.js - Knex + objectionjs 在带触发器的表上使用 insertGraph 时返回错误
- javascript - 如何将输入框附加到同一页面