【问题标题】:Spark on YARN resource manager: Relation between YARN Containers and Spark ExecutorsSpark on YARN 资源管理器:YARN Containers 和 Spark Executors 之间的关系
【发布时间】:2016-11-14 20:24:28
【问题描述】:

我是 YARN 上的 Spark 新手,不了解 YARN Containers 和 Spark Executors 之间的关系。我根据yarn-utils.py 脚本的结果尝试了以下配置,可用于找到最佳集群配置。

我正在开发的 Hadoop 集群 (HDP 2.4):

  • 1 个主节点:
    • CPU:2 个 CPU,每个 CPU 有 6 个内核 = 12 个内核
    • 内存:64 GB
    • SSD:2 个 512 GB
  • 5 个从节点:
    • CPU:2 个 CPU,每个 CPU 有 6 个内核 = 12 个内核
    • 内存:64 GB
    • 硬盘:4 x 3 TB = 12 TB
  • HBase 已安装(这是下面脚本的参数之一)

于是我跑了python yarn-utils.py -c 12 -m 64 -d 4 -k True (c=cores, m=memory, 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

我通过 Ambari 界面进行的这些设置并重新启动了集群。这些值也与我之前手动计算的大致相符。

我现在有问题

  • 为我的spark-submit 脚​​本找到最佳设置
    • 参数--num-executors--executor-cores--executor-memory
  • 获取 YARN 容器和 Spark 执行器之间的关系
  • 了解我的 Spark 历史 UI 中的硬件信息(我设置的内存较少(当通过乘以工作节点数量计算到总内存时))
  • 要理解 YARN 中 vcores 的概念,我在这里找不到任何有用的示例

但是,我找到了这篇帖子 What is a container in YARN? ,但这并没有真正帮助,因为它没有描述与执行者的关系。

有人可以帮助解决一个或多个问题吗?

【问题讨论】:

    标签: apache-spark containers hadoop-yarn hortonworks-data-platform executor


    【解决方案1】:

    我将在这里逐步报告我的见解:

    • 首先重要的是这个事实(来源:this Cloudera documentation):

      在 YARN 上运行 Spark 时,每个 Spark 执行器都作为 YARN 容器运行。 [...]

    • 这意味着容器的数量将始终与 Spark 应用程序创建的执行程序相同,例如通过 spark-submit 中的--num-executors 参数。

    • yarn.scheduler.minimum-allocation-mb 设置,每个容器总是至少分配这个数量的内存。这意味着如果参数--executor-memory 设置为例如只有1gyarn.scheduler.minimum-allocation-mb 是例如6g,容器比 Spark 应用程序需要的大得多。

    • 反之,如果参数--executor-memory 设置为高于yarn.scheduler.minimum-allocation-mb 值,例如12g,Container 将动态分配更多内存,但当请求的内存量小于或等于 yarn.scheduler.maximum-allocation-mb 值时。

    • yarn.nodemanager.resource.memory-mb的值决定了一台主机的所有容器总共可以分配多少内存!

    => 所以设置yarn.scheduler.minimum-allocation-mb 允许您运行较小的容器,例如对于较小的执行器(否则会浪费内存)。

    =>yarn.scheduler.maximum-allocation-mb 设置为最大值(例如等于yarn.nodemanager.resource.memory-mb)允许您定义更大的执行程序(如果需要,分配更多内存,例如通过--executor-memory 参数)。

    【讨论】:

    • 我们是否必须在每个集群节点上设置/更改yarn.nodemanager.resource.memory-mb
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2019-07-25
    • 2014-09-14
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多