hadoop调优方法(和也篇)

前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系正文RM的内存资源配置,配置的是资源调度相关ID配置说明RM1yarn.scheduler.minimum-allocation-mb分配给AM单个容器可申请的最小内存RM2yarn.scheduler.maximum-allocation-mb分配给AM单个容器可申请

大家好,又见面了,我是你们的朋友全栈君。

前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

姊妹篇

Hadoop 调优之 Linux 操作系统调优篇
Hadoop 调优之 HDFS 调优篇
Hadoop 调优之 MapReduce 调优篇
Hive 如何进行企业级调优?

正文

RM的内存资源配置, 配置的是资源调度相关

ID 配置 说明
RM1 yarn.scheduler.minimum-allocation-mb 分配给AM单个容器可申请的最小内存
RM2 yarn.scheduler.maximum-allocation-mb 分配给AM单个容器可申请的最大内存

最小值可以计算一个节点最大Container数量;一旦设置,不可动态改变

NM的内存资源配置,配置的是硬件资源相关

ID 配置 说明
NM1 yarn.nodemanager.resource.memory-mb 节点最大可用内存
NM2 yarn.nodemanager.vmem-pmem-ratio 虚拟内存率,默认2.1

RM1、RM2的值均不能大于NM1的值
NM1可以计算节点最大最大Container数量,max(Container)=NM1/RM1
一旦设置,不可动态改变

AM内存配置相关参数,配置的是任务相关

ID 配置 说明
AM1 mapreduce.map.memory.mb 分配给map Container的内存大小
AM2 mapreduce.reduce.memory.mb 分配给reduce Container的内存大小

这两个值应该在RM1和RM2这两个值之间
AM2的值最好为AM1的两倍
这两个值可以在启动时改变

ID 配置 说明
AM3 mapreduce.map.java.opts 运行map任务的jvm参数,如-Xmx,-Xms等选项
AM4 mapreduce.reduce.java.opts 运行reduce任务的jvm参数,如-Xmx,-Xms等选项

这两个值应该在AM1和AM2之间

关于Container

  1. Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。
    它跟Linux Container没有任何关系,仅仅是YARN提出的一个概念(从实现上看,可看做一个可序列化/反序列化的Java类)。
  2. Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster;
  3. Container的运行是由ApplicationMaster向资源所在的NodeManager发起的,Container运行时需提供内部执行的任务命令(可以使任何命令,比如java、Python、C++进程启动命令均可)以及该命令执行所需的环境变量和外部资源(比如词典文件、可执行文件、jar包等)。
    另外,一个应用程序所需的Container分为两大类,如下:
  • 运行ApplicationMaster的Container:这是由ResourceManager(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定唯一的ApplicationMaster所需的资源;
  • 运行各类任务的Container:这是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster与NodeManager通信以启动之。

以上两类Container可能在任意节点上,它们的位置通常而言是随机的,即ApplicationMaster可能与它管理的任务运行在一个节点上。

Container是YARN中最重要的概念之一,懂得该概念对于理解YARN的资源模型至关重要。

注意:如下图,map/reduce task是运行在Container之中的,所以上面提到的mapreduce.map(reduce).memory.mb大小都大于mapreduce.map(reduce).java.opts值的大小。

在这里插入图片描述

实践

在这里插入图片描述

如上图所示,先看最下面褐色部分,

AM参数 mapreduce.map.memory.mb=1536MB,表示AM要为map Container申请1536MB资源,但RM实际分配的内存却是2048MB,
因为yarn.scheduler.mininum-allocation-mb=1024MB,这定义了RM最小要分配1024MB,1536MB超过了这个值,所以实际分配给AM的值为2048MB(这涉及到了规整化因子)。

AM参数 mapreduce.map.java.opts=-Xmx 1024m,表示运行map任务的jvm内存为1024MB,因为map任务要运行在Container里面,
所以这个参数的值略微小于mapreduce.map.memory.mb=1536MB这个值。

NM参数 yarn.nodemanager.vmem-pmem-radio=2.1,这表示NodeManager可以分配给map/reduce Container 2.1倍的虚拟内存,
安照上面的配置,实际分配给map Container容器的虚拟内存大小为2048*2.1=3225.6MB,若实际用到的内存超过这个值,NM就会kill掉这个map Container,任务执行过程就会出现异常。

AM参数 mapreduce.reduce.memory.mb=3072MB,表示分配给reduce Container的容器大小为3072MB,
而map Container的大小分配的是1536MB,从这也看出,reduce Container容器的大小最好是map Container大小的两倍。

NM参数 yarn.nodemanager.resource.mem.mb=24576MB,这个值表示节点分配给NodeManager的可用内存,
也就是节点用来执行yarn任务的内存大小。这个值要根据实际服务器内存大小来配置,比如我们hadoop集群机器内存是128GB,我们可以分配其中的80%给yarn,也就是102GB。
上图中RM的两个参数分别1024MB和8192MB,分别表示分配给AM map/reduce Container的最大值和最小值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128871.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Jenkins详细教程

    Jenkins详细教程大纲  1.背景  在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试;  或者前后端分离后,经常会修改接口,然后重新部署;  这些情况都会涉及到频繁的打包部署;  手动打包常规步骤:  1.提交代码  2.问一下同组小伙伴有没有要提交的代码  3.拉取代码并打包(war包,或者jar包)  4.上传到Linux服务器  5.查看当前程序是否在运行  6.关闭当前程序  .

    2022年5月15日
    65
  • hdoj 2602 Bone Collector 【01背包】

    hdoj 2602 Bone Collector 【01背包】

    2022年1月14日
    44
  • 从零开始学习UCOSII操作系统3–UCOSII启动过程「建议收藏」

    从零开始学习UCOSII操作系统3–UCOSII启动过程「建议收藏」从零开始学习UCOSII操作系统3–UCOSII启动过程1、初始化UCOSII(1)在调用UCOSII在任何的其他的服务之前,UCOSII要求首先调用初始化函数OSInit();这个函数的目的就是在整个系统启动之前,初始化所有的变量和数据结构。(2)其中,在OSInit()函数中建立空闲任务OS_TaskIdle();这个任务总是处于就绪态的,空闲任务的优先级是设置为最低

    2022年6月4日
    28
  • jenkins踩坑——插件冲突「建议收藏」

    jenkins踩坑——插件冲突「建议收藏」当前jenkins版本:2.286冲突插件:FoldersPlugin和ExtendedChoiceParameterPlug-In问题现象通过FoldersPlugin创建目录层次的工程某一个工程创建之后无法读取文件中的内容,而这个工程是从同一目录的其他工程(可以读取文件内容)复制而来。仅项目名称和svn路径不同问题分析增加插件com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParam

    2022年5月7日
    89
  • Java反射(超详细!)[通俗易懂]

    Java反射(超详细!)[通俗易懂]1、反射机制有什么用?通过java语言中的反射机制可以操作字节码文件(可以读和修改字节码文件。)通过反射机制可以操作代码片段。(class文件。)2、反射机制的相关类在哪个包下?java.lang.reflect.*;3、反射机制相关的重要的类有哪些?类含义java.lang.Class代表整个字节码。代表一个类型,代表整个类。java.lang.reflect.Method代表字节码中的方法字节码。代表类中的方法。java.lang.reflect.Con

    2022年5月30日
    36
  • 免费流媒体服务器(AMS3.0 非AdobeMediaServer)

    免费流媒体服务器(AMS3.0 非AdobeMediaServer)自己从事流媒体近20载,从没有可用的流媒体服务器到现在服务器遍地开花.但尽管开源服务器众多,功能强大,但却没有可以直接拿来使用的.原因是配置安装困难,没有自己想要的接口,很难与现有系统对接.为解决这个问题,自己就做了一个简单的安装包,并且提供了众多的接口可以与WEB进行对接,这样配置管理大大简化,安装使用都非常简单.服务器单机下保守至少可以大码流3000并发吧,性能非常不错.你可以做集群.提供HTTPRTMP协议,支持HLS.详细可以看下面的使用说…

    2022年6月12日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号