Apache spark 纱线资源管理器上的火花:纱线容器和火花执行器之间的关系

Apache spark 纱线资源管理器上的火花:纱线容器和火花执行器之间的关系,apache-spark,containers,yarn,hortonworks-data-platform,executor,Apache Spark,Containers,Yarn,Hortonworks Data Platform,Executor,我是一个新手,不了解纱线容器和火花执行器之间的关系。根据warn utils.py脚本的结果,我尝试了以下配置,可用于找到最佳集群配置 我正在研究的Hadoop集群(HDP2.4): 1主节点: CPU:2个CPU,每个6核=12核 内存:64 GB SSD:2 x 512 GB 5个从节点: CPU:2个CPU,每个6核=12核 内存:64 GB 硬盘驱动器:4 x 3 TB=12 TB 已安装HBase(这是下面脚本的参数之一) 因此,我运行了python-thread-util

我是一个新手,不了解纱线
容器
和火花
执行器
之间的关系。根据
warn utils.py
脚本的结果,我尝试了以下配置,可用于找到最佳集群配置

我正在研究的Hadoop集群(HDP2.4):

  • 1主节点:
    • CPU:2个CPU,每个6核=12核
    • 内存:64 GB
    • SSD:2 x 512 GB
  • 5个从节点:
    • CPU:2个CPU,每个6核=12核
    • 内存:64 GB
    • 硬盘驱动器:4 x 3 TB=12 TB
  • 已安装HBase(这是下面脚本的参数之一)
因此,我运行了
python-thread-utils.py-c12-m64-d4-ktrue
(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提交
    脚本找到最佳设置
    
    • 参数
      --num executors
      --executor cores
      --executor memory
  • 获得纱线容器和火花执行器之间的关系
  • 了解Spark History UI中的硬件信息(设置时显示的内存较少(通过乘以工作节点数量计算到总内存时))
  • 为了理解纱线中
    vcores
    的概念,我在这里还找不到任何有用的例子
然而,我发现了这篇文章,但它并没有真正起到帮助作用,因为它没有描述与遗嘱执行人的关系


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

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

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

    在纱线上运行火花时,每个火花执行器作为纱线容器运行。[……]

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

  • warn.scheduler设置。最小分配mb
    每个容器始终至少分配此内存量。这意味着,如果参数
    --executor memory
    设置为例如仅
    1g
    warn.scheduler。最小分配mb
    为例如
    6g
    ,则容器比Spark应用程序所需的大得多

  • 反过来说,如果参数
    --executor memory
    设置为高于
    纱线调度程序的最小分配mb
    值,例如
    12g
    ,则容器将动态分配更多内存,但是仅当请求的内存量小于或等于
    warn.scheduler.maximum allocation mb
    值时

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

=>因此设置
纱线调度程序。最小分配mb
允许您运行较小的容器,例如为较小的执行器(否则将浪费内存)


=>
纱线.调度器.最大分配mb
设置为最大值(例如等于
纱线.节点管理器.资源.内存mb
)允许您定义更大的执行器(如果需要,可分配更多内存,例如通过
--执行器内存
参数).

我们是否必须在每个群集节点上设置/更改
warn.nodemanager.resource.memory mb