D. *_*ler 14 containers executor hadoop-yarn hortonworks-data-platform apache-spark
我是YARN上的Spark的新手,并不了解YARN Containers和Spark 之间的关系Executors.我根据yarn-utils.py脚本的结果尝试了以下配置,可用于查找最佳群集配置.
Hadoop集群(HDP 2.4)我正在研究:
所以我跑了python yarn-utils.py -c 12 -m 64 -d 4 -k True(c =核心,m =内存,d = hdds,k = hbase-installed)并得到以下结果:
Using cores=12 memory=64GB disks=4 hbase=True
Profile: cores=12 memory=49152MB reserved=16GB usableMem=48GB disks=4
Num Container=8
Container Ram=6144MB
Used Ram=48GB
Unused Ram=16GB
yarn.scheduler.minimum-allocation-mb=6144
yarn.scheduler.maximum-allocation-mb=49152
yarn.nodemanager.resource.memory-mb=49152
mapreduce.map.memory.mb=6144
mapreduce.map.java.opts=-Xmx4915m
mapreduce.reduce.memory.mb=6144
mapreduce.reduce.java.opts=-Xmx4915m
yarn.app.mapreduce.am.resource.mb=6144
yarn.app.mapreduce.am.command-opts=-Xmx4915m
mapreduce.task.io.sort.mb=2457
Run Code Online (Sandbox Code Playgroud)
我通过Ambari界面进行的这些设置并重新启动了群集.这些值也大致与我之前手动计算的值相匹配.
我现在有问题
spark-submit脚本
的最佳设置--num-executors,--executor-cores&--executor-memory.vcoresYARN中的概念,我在这里找不到任何有用的例子但是,我发现这篇文章什么是YARN中的容器?,但这并没有真正帮助,因为它没有描述与执行者的关系.
有人可以帮助解决一个或多个问题吗?
D. *_*ler 24
我会一步一步地报告我的见解:
首要的是这个事实(来源:这个Cloudera文档):
在YARN上运行Spark时,每个Spark执行程序都作为YARN容器运行.[...]
这意味着容器的数量将始终与Spark应用程序创建的执行程序相同,例如通过--num-executorsspark-submit中的参数.
由yarn.scheduler.minimum-allocation-mb每个容器设置总是分配至少这个内存量.这意味着如果参数--executor-memory仅设置为例如1g但是yarn.scheduler.minimum-allocation-mb例如6g,容器比Spark应用程序所需的大得多.
反过来说,如果参数--executor-memory设置为高于yarn.scheduler.minimum-allocation-mb值的somthing ,例如12g,Container将动态分配更多内存,但仅限于请求的内存量小于或等于yarn.scheduler.maximum-allocation-mbvalue.
yarn.nodemanager.resource.memory-mb确定的值,一个主机的所有容器可以分配多少内存!
=>因此,设置yarn.scheduler.minimum-allocation-mb允许您运行较小的容器,例如较小的执行程序(否则会浪费内存).
=>设置yarn.scheduler.maximum-allocation-mb为最大值(例如等于yarn.nodemanager.resource.memory-mb)允许您定义更大的执行程序(如果需要,可以分配更多内存,例如通过--executor-memory参数).
| 归档时间: |
|
| 查看次数: |
5212 次 |
| 最近记录: |