Spark Standalone与python和scala的行为不同

时间:2015-06-24 13:16:17

标签: hadoop apache-spark pyspark

我正在探索Spark并发现与Spark Standalone(简称SS)不一致。这里有一些关于我的集群的线索:

  • d125.dtvhadooptest - >最好的datanode
  • d124.dtvhadooptest
  • d211.dtvhadooptest - >最差的datanode

我通过python和scala运行完全相同的工作。当作为python脚本提交作业时,SS在执行者进程之间共享任务。但是,当作为scala脚本提交作业时,SS会异常共享任务。截图将更好地解释我猜:

的Python: PySpark

Scala的: spark-shell

使用scala,作业运行速度明显加快(约55分钟)。使用python工作大约需要90分钟。我认为这个结果的原因是执行者之间的任务共享。

我的问题是,为什么SS与scala和python表现不同?当我使用python时,我如何使SS表现得像我使用scala时的行为?

1 个答案:

答案 0 :(得分:1)

无论使用Python还是Scala,任务调度都完全相同。性能上的差异是由于Python不得不通过套接字将所有内容挑选到一个运行Python代码的单独Python进程。

鉴于上述情况,我认为这是浪费时间试图弄清楚为什么任务号码以某种方式分配。它可以通过排队理论来解释(不同的任务时间分布导致不同的任务计数分布)。如果你想弄清楚,我建议升级到Spark 1.4.0,它提供了有关任务调度时间表的更多细节。 (Spark 1.2.1现在还很老了。)