Spark num-executors

时间:2016-09-13 11:58:11

标签: apache-spark yarn hortonworks-data-platform

我在AWS上设置了10节点HDP平台。以下是我的配置 2个服务器 - 名称节点和备用名称节点 7个数据节点和每个节点有40个vCPU和160 GB内存。

我试图在提交spark应用程序时计算执行程序的数量,在浏览不同的博客后,我对这个参数的实际含义感到困惑。

查看下面的博客,似乎num executors是所有节点上执行程序的总数 http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/

但是看下面的博客,似乎num执行者是每个节点或服务器 https://blogs.aws.amazon.com/bigdata/post/Tx578UTQUV7LRP/Submitting-User-Applications-with-spark-submit

任何人都可以澄清并审查以下内容: -

  1. num-executors值是每个节点还是所有数据节点上的执行程序总数。

  2. 我使用以下计算来计算每个执行者的核心数,执行者数和内存

    核心数< = 5(假设5) Num执行者=(40-1)/ 5 = 7 记忆=(160-1)/ 7 = 22 GB

  3. 通过上述计算,这将是正确的方法

    --master yarn-client --driver-memory 10G --executor-memory 22G --num-executors 7 --executor-cores 5 
    
    OR
    
    --master yarn-client --driver-memory 10G --executor-memory 22G --num-executors 49 --executor-cores 5 
    

    谢谢, Jayadeep

2 个答案:

答案 0 :(得分:0)

  

任何人都可以澄清并审查以下内容: -

     
      
  1. num-executors值是每个节点还是所有数据节点上的执行程序总数。
  2.   

您首先需要了解执行程序在NodeManager上运行(您可以将其视为Spark独立的工作者)。将为YARN上的Spark应用程序分配一些容器(包括vCPU,内存,网络,磁盘等)等于执行程序数。现在,这些执行程序容器将在多个NodeManager上运行,这取决于CapacityScheduler(HDP中的默认调度程序)。

总而言之,执行程序的总数是您为应用程序指定的资源容器的数量。

请参阅this博客,以便更好地了解。

  
      
  1. 我使用以下计算来计算核心数,执行者数和每个执行者的内存
  2.         

    核心数< = 5(假设5)Num executors =(40-1)/ 5 = 7 Memory =(160-1)/ 7 = 22 GB

没有用于计算执行者数量的严格公式。相反,您可以尝试为您的应用启用Dynamic Allocation in YARN

答案 1 :(得分:0)

容量调度程序出现了问题。据我所知,它允许您只按内存计划。您首先需要将其更改为主导资源计算器调度类型。这将允许您要求更多的内存和核心组合。一旦你改变了它,你应该能够用你的火花应用程序询问杯子和记忆。

对于--num-executors标志,您甚至可以将其保持在1000的非常高的值。它仍将仅分配可在每个节点上启动的容器数。当您的群集资源增加时,附加到应用程序的容器将会增加。每个节点可以启动的容器数量将受到分配给这些节点上的节点管理器的资源量的限制。