如何让执行程序使用--num-executors运行spark程序?

时间:2015-12-18 09:48:35

标签: apache-spark

我有四个节点通过set --num-executors 4运行我的spark程序, 但问题是只有两个正在运行,另外两个计算机不做任何计算,这里是: Executor_ID地址...... Total_Task Task_Time输入 1 slave8 88 21.5s 104MB 2 slave6 0 0 0B 3 slave1 88 1min 99.4MB 4 slave2 0 0 0B

如何让所有这四个节点运行我的火花程序?

2 个答案:

答案 0 :(得分:1)

我猜你是在YARN上运行的。在这种情况下,您需要设置

yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator 
在capacity-scheduler.xml文件中。见Apache Hadoop Yarn - Underutilization of cores。否则,无论您使用--num-executors标志指定什么,YARN都只会启动2个执行程序。

答案 1 :(得分:0)

  1. 执行人员运行任务。在spark中,任务由数据分区预先确定。如果您有2个分区,但只有4个执行程序,则只有2个执行程序可能有工作要做。
  2. 在独立群集中,节点需要启动工作程序才能运行执行程序。
  3. 您将CPU和内存与执行程序关联。如果节点无法获取所请求的资源,它将排队等待这些资源可用。
  4. 如果两个节点本身有足够的CPU核心来完成所有工作,那么其他节点将无法工作。数据的位置很重要,因此如果可能,将在一个节点上安排所有任务。
  5. 我怀疑在您的情况下,可以通过更好地划分数据来解决这个问题。更好并不总是意味着更多。它也意味着在正确的时间,并以某种方式可以避免一些改组。