假设有一个Spark作业将从HDFS读取名为records.txt的文件,并进行一些转换和一个动作(将处理后的输出写入HDFS)。该作业将提交到YARN群集模式
还假设records.txt是一个128 MB的文件,其中一个HDFS复制块也在NODE 1中
让我们说YARN分配是NODE 1中的执行者。
YARN如何在输入数据所在的节点中准确分配执行程序?
谁告诉YARN在NODE 1中有一个复制的record.txt复制HDFS块?
Spark Application如何找到数据localilty?它是由在Application Master中运行的Driver完成的吗?
YARN知道datalocality吗?
答案 0 :(得分:4)
这里的基本问题是:
YARN知道datalocality吗?
YARN"知道"什么应用程序告诉它,它了解集群的结构(拓扑)。当应用程序发出资源请求时,它可以包含特定的位置约束,在分配资源时可能会或可能不会满足。
如果无法指定约束,YARN(或任何其他集群管理器)将根据其对集群拓扑的了解,尝试提供最佳替代匹配。
那么应用程序"如何知道" ?
如果应用程序使用支持某种形式的数据局部性的输入源(文件系统或其他),它可以查询相应的目录(在HDFS的情况下为namenode)以获取它想要访问的数据块的位置。 / p>
从广义上讲,Spark RDD可以定义preferredLocations
,具体取决于特定的RDD
实现,后者可以在以后转换为资源约束,用于集群管理器(不一定是YARN)。