想象一下,我对HDFS中托管的文件执行了一些Spark操作。像这样:
var file = sc.textFile("hdfs://...")
val items = file.map(_.split('\t'))
...
因为在Hadoop世界中,代码应该放在数据所在的位置,对吗?
所以我的问题是: Spark worker 如何知道 HDFS数据节点? Spark如何知道在哪个数据节点上执行代码?
最佳答案
Spark重用Hadoop类:当您调用textFile
时,它将创建一个具有getSplits
方法(拆分大致是一个分区或块)的TextInputFormat,然后每个InputSplit都具有getLocations
和getLocationInfo
方法。