YARN和MapReduce的内存设置参考

简介: 如何确定Yarn中容器Container,Mapreduce相关参数的内存设置,对于初始集群,由于不知道集群的类型(如cpu密集、内存密集)我们需要根据经验提供给我们一个参考配置值,来作为基础的配置。

如何确定Yarn中容器Container,Mapreduce相关参数的内存设置,对于初始集群,由于不知道集群的类型(如cpu密集、内存密集)我们需要根据经验提供给我们一个参考配置值,来作为基础的配置。

完成这一任务有两种方式,确定YARN和MapReduce的内存设置,我们可以使用HDP工具脚本进行内存配置设定

运行hdp-configuration-utils.py 这个Python脚本(下载地址:hdp-configuration-utils来计算YARN、MapReduce需要的内存,执行以下命令

python hdp-configuration-utils.py options

其中可选项如下:

选项

描述

-c CORES

每一个客户机的核数目

-m MEMORY

每一个客户机拥有的内存总数

-d DISK

每一个客户机拥有的磁盘数目

-k HBASE

如果Hbase安装了为”True”,否则为”False”

注:需要python26的运行环境

我们可以使用-h或-help来显示描述选项的帮助信息。

例子

运行下面的命令

python hdp-configuration-utils.py -c 16 -m 64 -d 4 -k True

结果如下:

1.png

手动计算YARN和MapReduce内存配置设置

接下来我们将描述如何基于特定的硬件,手工的设置YARN和MapReduce内存。

YARN可以考虑集群中所有节点的可用的计算机资源。基于可用的资源,YARN会沟通协调应用程序(如:mapReduce)需要的资源。YARN会为每一个应用提供相应的容器Container。容器Container是YARN的基本处理单元,是内存和CPU资源的一种封装。

在Hadoop集群中,平衡内存RAM、处理器cpu和磁盘的使用是非常重要的。作为一般的推荐,为每个磁盘和每个核分配两个容器,为集群的利用率提供了最好的平衡。

当为一个集群决定合适的YARN和MapReduce内存设置时,从可用的硬件资源开始,注意每个节点的以下值:

RAM(内存的数量)

CORES(CPU的核数)

DISKS(磁盘的数目)

整个针对YARN和MapReduce可用的RAM数,应该考虑预留的内存。预留的内存主要用于系统进程占用和其它Hadoop进程(如Hbase)。

预留的内存=保留栈内存+Hbase预留内存(如果Hbase是部署在同一台机器上)

 

我们通常会使用下表来决定预留内存的大小

每个节点的总内存

推荐系统保留的内存

推荐为hbase保留的内存

4GB

1GB

1GB

8GB

2GB

1GB

16GB

2GB

2GB

24GB

4GB

4GB

48GB

6GB

8GB

64GB

8GB

8GB

72GB

8GB

8GB

96GB

12GB

16GB

128GB

24GB

24GB

256GB

32GB

32GB

512GB

64GB

64GB

接下来我们计算决定每个节点允许的最大容器的数目,我们可以使用下列公式:

containers = min (2*CORES, 1.8*DISKS, (Total available RAM) /MIN_CONTAINER_SIZE)

其中DISKS是参数每台机器中dfs.data.dirs参数的数目值。MIN_CONTAINER_SIZE是最小的容器大小(RAM)。这个值是依赖于RAM的可用数目——小的内存节点,最小的容器大小应该更小。

容器推荐值

每个节点的总内存

推荐的最小容器大小

小于4GB

256MB

在4GB和8GB之间

512MB

在8GB和24GB

1024MB

大于24GB

20148MB

最终的计算结果决定了每个容器的RAM的数目。

RAM-per-container = max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))

因为这些计算,YARN和MapReduce设置如下

配置文件

配置设定

计算值

Yarn-site.xml

yarn.nodemanager.resource.memorymb

=containers*RAM-per-container

Yarn-site.xml

yarn.scheduler.minimum-allocationmb

= RAM-per-container

yarn-site.xml

yarn.scheduler.maximum-allocationmb

=containers*RAM-per-container

mapred-site.xml

mapreduce.map.memory.mb

= RAM-per-container

mapred-site.xml

mapreduce.reduce.memory.mb

= 2 * RAM-per-container

mapred-site.xml

mapreduce.map.java.opts

= 0.8 * RAM-per-container

mapred-site.xml

mapreduce.reduce.java.opts

= 0.8 * 2 * RAM-per-container

mapred-site.xml

yarn.app.mapreduce.am.resource.mb

= 2 * RAM-per-container

mapred-site.xml

yarn.app.mapreduce.am.commandopts

= 0.8 * 2 * RAM-per-container

注:在安装好后,yarn-site.xml and mapred-site.xml位于文件夹/etc/Hadoop/conf目录

 

举例说明:

集群节点拥有12个CPU核,48GB内存和12块磁盘

保留内存(Reserved Memory)=6GB系统预留内存+(如果有Hbase)8GB的Hbase内存

最小的容器大小(Min container size)=2GB

含有的容器数(containers)=min(2*12,1.8*12,(48-6)/2)=min(24,21.6,21)=21

每个容器的RAM(RAM-per-container)=max(2,(48-6)/21)=max(2,2)=2

根据上述例子计算出来的值

配置

计算值

yarn.nodemanager.resource.memory-mb

= 21 * 2 = 42*1024 MB

yarn.scheduler.minimum-allocation-mb

= 2*1024 MB

yarn.scheduler.maximum-allocation-mb

= 21 * 2 = 42*1024 MB

mapreduce.map.memory.mb

= 2*1024 MB

mapreduce.reduce.memory.mb

= 2 * 2 = 4*1024 MB

mapreduce.map.java.opts

= 0.8 * 2 = 1.6*1024 MB

mapreduce.reduce.java.opts

= 2 * 2 = 4*1024 MB

yarn.app.mapreduce.am.command-opts

= 0.8 * 2 * 2 = 3.2*1024 MB

如果部署了HBase

容器数目(containers)=min(2*12,1.8*12,(48-6-8)/2)=min(24,21.6,17)=17

每个容器的RAM(RAM-per-container)=max(2,(48-6-8)/17)=max(2,2)=2

 根据此时的值计算出来的值

配置

计算值

yarn.nodemanager.resource.memory-mb

=17*2=34*1024MB

yarn.scheduler.minimum-allocation-mb

= 2*1024 MB

yarn.scheduler.maximum-allocation-mb

= 17 * 2 = 34*1024 MB

mapreduce.map.memory.mb

= 2*1024 MB

mapreduce.reduce.memory.mb

= 2 * 2 = 4*1024 MB

mapreduce.map.java.opts

= 0.8 * 2 = 1.6*1024 MB

mapreduce.reduce.java.opts

= 0.8 * 2 * 2 = 3.2*1024 MB

yarn.app.mapreduce.am.resource.mb

= 2 * 2 = 4*1024 MB

yarn.app.mapreduce.am.command-opts

= 0.8 * 2 * 2 = 3.2*1024 MB

备注:

1.更新属性值yarn.scheduler.minimum-allocation-mb要同时更新

yarn.nodemanager.resource.memory-mb

yarn.scheduler.minimum-allocation-mb

导致每个节点容器数目的改变。

 

2.如果你安装拥有很大数目的内存,而缺少磁盘和CPU核,你可以将内存释放给其它的任务,降低参数yarn.scheduler.minimum-allocation-mb

 andyarn.nodemanager.resource.memory-mb的值

 

3.当前在YARN上运行MapReduce时。我们不在会去设置静态的Map和Reduce任务。整个集群将根据Job的需要动态的分配Map和Reduce任务。在我们的集群中,YARN可以在每个节点上分配10个Map和5个Reduce。

 

设置NameNode的对内存大小

NameNode的堆大小受很多的因数影响如文件的数目,块的数目和系统的负载。下面的表格提供了NameNode对大小的设定。这些设定经常用于典型的Hadoop集群,其中块的数目和文件的数目十分接近(一般而言,系统中平均每个文件的块数比例大概在1.1到1.2),总的来说将NameNode的堆内存设置的越大越好。

文件的数目(百万)

整个java的堆(Xmx和Xms)

年轻代大小

(-XX:NewSize-XX:MaxNewSize)

<1 million files

1024m

128m

1-5million files

3072m

512m

5-10

5376m

768m

10-20

9984m

1280m

20-30

14848m

2048m

30-40

19456m

2560m

40-50

24320m

3072m

50-70

33536m

4352m

70-100

47872m

6144m

100-125

71424m

8960m

150-200

94976m

8960m

我们应该设置-XX:PermSize为128m –XX:maxPermSize为256m

下面是对Hadoop_NameNode_Opts参数的推荐设置,在配置文件hadoop-env.sh中(将下面的####替换成-XX:NewSize,-XX:MaxNewSize,-Xms,和-Xmx可以用上上面表中推荐的值)

2.png

-XX:+HeapDumpOnOutOfMemoryError这个参数指明了当内存错误出现时,堆的dump操作将会被执行。你也可以使用-XX:HeapDumpPath来指定heap dump文件的位置,如:另外一个有用的HADOOP_NAMENODE_OPTS参数是

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./etc/heapdump.hprof


参考:http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.1/bk_installing_manually_book/content/rpm-chap1-11.html

           http://blog.csdn.net/suifeng3051/article/details/45477773

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
人工智能 运维 并行计算
函数计算产品使用问题之如何设置来人为限制内存的使用
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
函数计算产品使用问题之如何设置来人为限制内存的使用
|
28天前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
161 1
|
3月前
|
分布式计算 资源调度 Hadoop
在YARN集群上运行部署MapReduce分布式计算框架
主要介绍了如何在YARN集群上配置和运行MapReduce分布式计算框架,包括准备数据、运行MapReduce任务、查看任务日志,并启动HistoryServer服务以便于日志查看。
73 0
|
5月前
|
存储 消息中间件 监控
JVM内存问题之ARMS监控显示堆内存和我设置的不同如何解决
JVM内存问题之ARMS监控显示堆内存和我设置的不同如何解决
|
4月前
|
SQL 存储 缓存
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
100 0
|
4月前
|
NoSQL Redis
Redis——设置最大内存 | key淘汰机制
Redis——设置最大内存 | key淘汰机制
65 0
|
5月前
|
存储 缓存 数据处理
ELK中 Elasticsearch和Logstash内存大小设置的考虑
ELK中 Elasticsearch和Logstash内存大小设置的考虑
293 0
|
6月前
|
分布式计算 资源调度 数据处理
YARN支持哪些非基于MapReduce的计算模型?
【6月更文挑战第19天】YARN支持哪些非基于MapReduce的计算模型?
72 11
|
5月前
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用问题之在使用Flink on yarn模式进行内存资源调优时,如何进行优化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
NoSQL 算法 Linux
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
【内附完整redis配置文件】linux服务器命令设置redis最大限制内存大小,设置redis内存回收机制,redis有哪些回收机制
133 0

相关实验场景

更多