Spark 是否会在数据所在的相同节点上安排工作人员?

Does Spark schedule workers on the same nodes where the data resides?

Google MapReduce 论文称,worker 被安排在与数据所在的同一节点上,或者如果可能的话,至少在同一机架上。我没有通读整个 Hadoop 文档,但我假设它会尽可能将计算移至数据,而不是将数据移至计算。

(我刚开始接触Hadoop的时候,从HDFS到worker的所有数据都必须通过TCP连接,即使worker和数据在同一个节点上。现在还是这样吗?)

无论如何,使用 Apache Spark 时,worker 是否会被安排在与数据相同的节点上,或者 RDD 概念是否会使其更难做到这一点?

一般来说视情况而定。 Spark 识别多个位置级别(包括 PROCESS_LOCALNODE_LOCALRACK_LOCAL)并尝试调度任务以达到最佳位置级别。参见 Data Locality in Tuning Spark

可以使用 spark.locality.* 属性控制确切的行为。它包括调度程序在选择位置较低的节点之前等待空闲资源的时间量。参见 Scheduling in Spark Configuration