MapReduce 作业资源优化


1.YARN 的相关介绍

yarn 基础架构

  • ResourceManager(RM):
    RM 是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构
    成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)
  • ApplicationMaster(AM):
    用户提交的每个应用程序均包含一个AM,主要功能包括:
    1 与RM 调度器协商以获取资源(用Container 表示);
    2 将得到的任务进一步分配给内部的任务;
    3 与NM 通信以启动/停止任务;
    4 监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
  • NodeManager(NM):
    NM 是每个节点上的资源和任务管理器,一方面,它会定时地向RM 汇报本节点上的资
    源使用情况和各个Container 的运行状态;另一方面,它接收并处理来自AM 的Container
    启动/停止等各种请求。
  • Container:
    Container 是YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、
    磁盘、网络等,当AM 向RM 申请资源时,RM 为AM 返回的资源便是用Container 表示的

YARN 的工作流程:

  • 用户向YARN 中提交应用程序,其中包括MRAppMaster 程序、启动MRApp-Master
    的命令、用户程序等。
  • ResourceManager 为该应用程序分配第一个Container,并与对应的NodeManager
    通信,要求它在这个Container 中启动应用程序的MRAppMaster。
  • MRAppMaster 启动后,首先向ResourceManager 注册,这样用户可以直接通过
    ResourceManager 查看应用程序的运行状态,之后,它将为内部任务申请资源,并监
    控它们的运行状态,直到运行结束,即重复步骤4~7。
  • MRAppMaster 采用轮询的方式通过RPC 协议向ResourceManager 申请和领取资源。
  • 一旦MRAppMaster 申请到资源后,则与对应的NodeManager 通信,要求它启动任务。
  • NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,
    将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
  • 各个任务通过RPC 协议向MRAppMaster 汇报自己的状态和进度,以让MRAppMaster
    随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务
  • 应用程序运行完成后,MRAppMaster 向ResourceManager 注销并关闭自己。

Hadoop MapReduce

1) Map Task 执行流程:

描述:
Map Task 先将对应的split 迭代解析成一个个key/value 对,依次调用用户自定义的
2) Reduce Task 执行过程
描述:

从远程节点上读取Map Task 中间结果(称为“Shuffle 阶段”);

按照key 对key/value 对进行排序(称为“Sort 阶段”);

依次读取,调用用户自定义的reduce()函数处理,并将最终结果存到
HDFS 上(称为“Reduce 阶段”)。


2.资源优化–参数配置
本例是通过查看一个运行完成的任务,通过历史数据来查看它所需要的实际资源参数

MR 参数配置
mapreduce_map_memory_mb=1526
mapreduce_reduce_memory_mb=1024

什么时候配置这些参数?
采用非Java 语言编写作业,允许用户指定可执行文件或者脚本作为Mapper/Reducer。搜
索大部分作业是streaming 作业,这个参数对streaming 作业很重要

JVM 参数配置
参数配置:
mapreduce_reduce_java_opts=-Xmx1024m
mapreduce_map_java_opts=-Xmx1024m
参数配置依据:
根据自己实际按需申请即可
1) 查看MR 配置参数:


从提交一个作业开始
例1: MR 内存配置


例2:task 并发量


2) 查看job 数据指标:

作业入口:

查看统计数据(重点关注Map-Reduce Framework)


重点数据:
Map input records:可查看数据作业是否存在倾斜
Peak Map physical memory: map 使用内存的峰值
Peak Reduce physical memory: reduce 使用内存的峰值

小文件优化
小文件多,直接影响影响map 的数量,资源和资源都浪费在了创建和删除jvm 上.
map 的计算方法
Math.max(minSize, Math.min(maxSize, blockSize))
解决方案:
1、从源头干掉,也就是在hdfs 上我们不存储小文件,也就是数据上传hdfs 的时候我们就合并小文件
2、在FileInputFormat 读取入数据的时候我们使用实现类CombineFileInputFormat 读取数据,在读取数据的时候进行合并。

慢启动
mapreduce.job.reduce.slowstart.completedmaps: 设置map 的完成度,达到这个百分比以后reduce 开始拉数据.如果这个比例设置过小,reduce 会提前拉去数据,占用集群资源

3.问题讨论

问题二: 造成长尾的影响因素
a) 设置slowstart:
Slow start 也是MapReduce 框架的一个优化,它代表reduce 在何时开始调度启
动。当前我们的集群配置为85%,即map task 完成85%的时候,开始启动reduce,让其进行shuffle 操作,从已完成的map 拖数据。这样的好处是尽量使reduce 和map 可以并行起来。但是如果map 有个别长尾(完成率>85%),则reduce 会全部起来,并且一直处于shuffle 阶段,等待map 的完成,这样会造成reduce 的槽位被无辜占用,其他的job 会因为得不到reduce 槽位资源而被堵住。比如设置mapreduce.job.reduce.slowstart.completedmaps=1,则表明关闭slow start,即等所有map 运行完成后在启动reduce
b) 数据倾斜导致长尾
问题四: 建议可以把每个executor 输入1G 的数据量,根据测试数据显示,每个executor
500Mi 速度是最快的
问题五: 动态修改优先级
yarn application -appId application_xxxxx -updatePriority VERY_HIGH
4.附录
. MR 手册
.http://wiki.sys.corp.qihoo.net/mediawiki/index.php/MapReduce_User_Manual#MapReduce.E7.BC.96.E7.A8.8B.E6.8E.A5.E5.8F.A3
. 常见问题:
.http://wiki.sys.corp.qihoo.net/mediawiki/index.php/MapReduce%E5%A4%B1%E8%B4%A5Job%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E5%8F%8A%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95
. 常见参数配置

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇