Apache Spark 如何知道 HDFS 数据节点?

How does Apache Spark know about HDFS data nodes?

假设我对托管在 HDFS 中的文件执行了一些 Spark 操作。像这样:

var file = sc.textFile("hdfs://...")
val items = file.map(_.split('\t'))
...

因为在 Hadoop 世界中,代码应该放在数据所在的地方,对吗?

所以我的问题是:Spark workers 如何知道 HDFS 数据节点? Spark 如何知道在哪些数据节点上执行代码?

Spark 重用 Hadoop 类:当您调用 textFile 时,它会创建一个 TextInputFormat which has a getSplits method (a split is roughly a partition or block), and then each InputSplit 具有 getLocationsgetLocationInfo 方法。