1.yarn生产上的资源管理(至关重要)

	 假设一台机器:48物理内存  8个core-->16个vcore
	 Linux本身要占用内存+空留:20%=9.6个G(空留是根据实际机器的内存来决定的,如果内存大,可以考虑空留15%)
	 剩余:80%=38.4G=38G
	 DN进程:生产上4G
	 	如何修改DN的内存配置信息:进入hadoop-env.sh脚本,
	 	HADOOP_NAMENODE_OPTS=-Xmx1024m
	 	HADOOP_DATANODE_OPTS=-Xmx1024m (在前面追加,如下图所示)
	 NM进程:生产上4G
	 	如何修改NM的内存配置信息:进入yarn-env.sh脚本,
	 	export YARN_RESOURCEMANAGER_HEAPSIZE=1024
	 	export YARN_NODEMANAGER_HEAPSIZE=1024 
	 DN和NM部署在同一台机器上是为了:数据本地化
	 NN RM 经常性部署同一台  说白了 集群节点少
	 (正常情况下,DataNode进程和NodeManager进程部署在同一台机器: 数据本地化
比如:在NM上运行task任务,task任务需要数据,数据是放在当前机器的hdfs上面的,发现当前
有DataNode进程,节点上有需要的数据,那就只需要从当前节点拿数据就行了。但是如果发现当
前机器上没有数据,要去另外的机器上拿数据,那就会通过网络,这时候会网络消耗,计算就会
变慢了。)

	 资源内存: 38G-4-4=30G(这30G是做什么?就是运行container容器)
	 yarn.nodemanager.resource.memory-mb   30*1024MB(这是总的大小)
	 默认配置
	 yarn.scheduler.minimum-allocation-mb  1024 (最小可分配容器的大小)
	 yarn.scheduler.maximum-allocation-mb  8192 (最大可分配容器的大小)
	 (分配的容器的大小就是根据上面的参数来进行分配的)
	 30G 30G/1G=30个container 
	 30G 30/8=3个container ...6G  (还留有6个G的内存被浪费掉)
	 30个~3个(这样是不合理的)

	 生产一:
	 yarn.nodemanager.resource.memory-mb   30*1024MB
	 yarn.scheduler.minimum-allocation-mb  2G
	 yarn.scheduler.maximum-allocation-mb  30G
	 15个~1个
	 (这个是大作业的情况。要看每个公司的作业情况,如果作业特别大的情况,就设成和总的一样
大)
	(容器最小2G,就是这台机器最多可以运行15个容器,容器最大30G,就是这台机器最多可以运行1
个容器。那这台机器可以运行1-15个容器。
当你去请求资源的时候,它先给你分配一个最小的值,比如说2G,然后你如果不够,给你加比如
说1G,直到加到最大比如说30G。(这个是有参数可以去配置的,在hadoop官网没有,在cdh官网
是可以找到的)


	 生产二:
	 yarn.nodemanager.resource.memory-mb   32G(可以将预留空间再缩小一点,这样留给container容器的空间会大一点)(这个由30G调整到32G,就需要从预留的20%里面
拿出2G出来。这样32/8=4个容器,可以整除,不会浪费了)

	 yarn.scheduler.minimum-allocation-mb  2G
	 yarn.scheduler.maximum-allocation-mb  8G
	 16个~4个

	 生产三:
	 如果物理机的内存是256G:(我们预留的空间可以按15%来算)

	 yarn.nodemanager.resource.memory-mb   168G
	 yarn.scheduler.minimum-allocation-mb  4G
	 yarn.scheduler.maximum-allocation-mb  24G
	 16个~4个

	 再生产中很容易遇到这样一种情况:container p memory oom :(意思是你的最大connertion内存不够用)
	 遇到这种情况,我们首先先把这任务kill掉,然受修改参数,将分配的内存调大一些。

	 生产默认 不做修改
	 yarn.nodemanager.pmem-check-enabled	true   (表示如果 container tast任务超过内存 就会 kill 掉进程,
	检查容器内存,一个是物理内存,一个是虚拟内存,虚拟内存是物理内存的
	 2倍,哪个超了都会被kill 掉)
	 yarn.nodemanager.vmem-check-enabled	true
	 yarn.nodemanager.vmem-pmem-ratio	2.1
	 物理内存 1m  虚拟内存 2.1m

新版本参数
yarn.nodemanager.resource.pcores-vcores-multiplier 1    (老的是2,现在是1,需要手动把它修改成2)


yarn.nodemanager.resource.memory-mb   
yarn.scheduler.minimum-allocation-mb 
yarn.scheduler.maximum-allocation-mb 
这些参数的需要看官网里的默认配置yarn-default.xml。
比如:yarn.nodemanager.resource.memory-mb如果设置成-1:
Amount of physical memory, in MB, that can be allocated for containers. If set to -1and yarn.nodemanager.resource.detect-hardware-capabilities is true, it is automatically calculated(in case of Windows and Linux). In other cases, the default
is 8192MB.
yarn.nodemanager.resource.detect-hardware-capabilities:Enable auto-detection of nodecapabilities such as memory and CPU.(默认是false)


	 CPU:
	 yarn.nodemanager.resource.cpu-vcores	 12(一般vcore是16个,但是我们还要分给其他进程。)
	 yarn.scheduler.minimum-allocation-vcores  1
	 yarn.scheduler.maximum-allocation-vcores  4
	 
	 container: 2G 3c
	 container: 
	 memory 16c~4c
	 vcores 12c~3c 
	 

> 生产调优的重点:
> 在生产中,运行task时所需要的资源需要由内存和vcore共同来决定,它俩时相互影响的,如果vcore
> 最小的只有3个crontainer,那么memory也只能分到3个crontainer,那么3*8=24G,还余6个G
> 的内存就会被浪费掉,所以yarn生产调优 需要计算好内存和vcore 的之间的数据。如果vore分给
> 它16个,那么vcore就可以分成16个~4个crontainer容易,最大利用了资源。 	 

详细可以参考 博客 :http://blog.itpub.net/30089851/viewspace-2127851/
[yarn生产上的优化]
[yarn生产上的优化][yarn生产上的优化]

相关文章:

  • 2021-09-29
  • 2021-10-11
  • 2022-01-06
  • 2021-07-02
  • 2021-10-13
  • 2021-12-05
  • 2022-12-23
  • 2021-11-22
猜你喜欢
  • 2021-07-14
  • 2021-05-29
  • 2021-09-18
  • 2021-07-12
  • 2021-05-22
相关资源
相似解决方案