一、上次课程回顾
二、Hadoop六
三、作业
Container:容器的,虚拟化的,维度:memory+vcore,运行task任务
Example举例:机器装完CentOS机器,会消耗系统内存1G;系统会预留15%-20%内存(以防内存全部使用导致系统夯住,和OOM机制的发生),或者给未来部署组件预留空间
依据上面给出的条件计算预留空间:128G X 20% = 25.6G 约等于 26G
1、假设只有DN、NM节点,余下可使用内存128G - 26G = 102G
DN=2G
NM=4G //此时剩余96G
Container的内存会自动增加,默认以1G递增:
所以此时Conatiner的个数:1-96个递增
在yarn中是没有物理核,只有虚拟核的概念;物理核:虚拟核 = 1:2;此处也就是32vcore.
yarn.nodemanager.resource.pcores-vcores-multiplier 32vcore
yarn.scheduler.minimum-allocation-vcores 1 (极限情况下,只有32个container)
yarn.scheduler.maximum-allocation-vcores 32 (极限情况下,只有1个container)
container:1-32个虚拟核
4、 官方建议:
cloudera公司推荐,一个container的vcore最好不要超过5,所以我们在此处设置为4;换而言之:
yarn.scheduler.minimum-allocation-vcores 4
极限情况下:32vcore / 4 = 8个executor
5、所以最终根据memory+vcore:
确定vcore=4 executor=8个;反推极限情况下每个executor就是设定为12G
对于一台机器128G内存,16个物理core的机器来说:我们能分配的是:
32vcore / 4vcore = 8个container,为了满足内存条件:96G / 8个Container = 每个container是12G,突破点是Cloudera公司推荐使用的4个Vcore
当Spark计算时,内存不够大,这个参数肯定要调大,那么这种理想化的设置个数必然要打破,以memory为主,说白了目的就是让CPU、Memory去最大程度的利用。
以内存为主:Container容器的个数:12-96个;我们拿最大的vcore来进行计算,12 x 2 = 24个vcore,24是远小于32的,不能100%的使用。
以虚拟core为主:Container容器的个数:16-32个;16个container x 8G = 128G,又远大于96G会撑爆
在yarn-default.xml中配置如下:
name | value | description |
---|---|---|
yarn.nodemanager.resource.memory-mb | 96G(用于做计算的总内存) | |
yarn.scheduler.minimum-allocation-mb | 1024MB | The minimum allocation for every container request at the RM in MBs. Memory requests lower than this will be set to the value of this property. Additionally, a node manager that is configured to have less memory than this value will be shut down by the resource manager. |
yarn.scheduler.maximum-allocation-mb | 8192MB | The maximum allocation for every container request at the RM in MBs. Memory requests higher than this will throw an InvalidResourceRequestException. |
假如256G内存,56个物理core,请问参数如何设置?
默认给系统预留20%的空间,是否去除DN、NM占据的内存;算它剩余还有200G内存;按照cloudera推荐的4个vcore来进行计算
内存参数:
yarn.nodemanager.resource.memory-mb 200G(控制的是所有的剩余空闲内存)
yarn.scheduler.minimum-allocation-mb 1G
yarn.scheduler.maximum-allocation-mb 8G
container的数量在25 ~ 200,进行弹性计算
container的数量在56~112,
第一台机器 强悍:物理core:虚拟core = 1:1
第二台机器:不强悍:pcore:vcore = 1:2
在xml中配置即可,直接所有节点设置pcore:vcore = 1:2,现在基本上大家的机配置都差不多。
调度器分为如下三种:
1、FIFO:先进先出
2、Capacity:计算调度器
apache默认的就是计算调度器,参数如下:
yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
CDH默认的就是公平调度器
为什么CDH选择公平调度器:因为计算调度器不能释放所有资源,总是会有20%的内存被占据着。
动态资源池+放置规则在后期cdh课程中会出现。
1、场景:你登录不了你管理的CDH集群的Web界面,或者程序崩溃了;在web界面上是可以直接进行kill的,但是你登录不了web页面,于是你就在linux终端上进行kill操作。
yarn application -kill
yarn logs
[hadoop@hadoop001 ~]$ yarn logs -applicationId application_1585204919350_0002
20/03/27 13:11:57 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
20/03/27 13:11:57 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
/tmp/logs/hadoop/logs/application_1585204919350_0002 does not exist.
Log aggregation has not completed or is not enabled.
//需要安装服务
1、一个木桶存水量,取决于最短的那块板,我们在做计算的时候,数据是参差不齐的文件,就会有类似木桶效应的出现。
blocksize=128m
a1 130m 2个task 运行55s
a2 14m 1个task 运行5s
a3 20m 1个task 运行9s
job要跑4个task,也就是说作业的完成时间从来都不是取决于运行时间短的,取决于运行时间长的;如上的任务运行完成需要55s。
1、yarn的资源调优参数如何分配 *****
2、调度器整理三种:每种的特性,cdh默认的调度器
linux命令:cd mkdir rm vi ls chown chmod tar
mysql的建表规范
hdfs架构设计 读写流程 副本放置策略 snn的机制
hadoop fs基础使用命令
MR wordcount流程图
Yarn的核心:生产调优参数详解
提交job yarn的流程图