YARN 如何在集群模式下了解 Apache Spark 中的数据位置

Sur*_*aja 5 hadoop-yarn apache-spark

假设有一个 Spark 作业将从 HDFS 读取一个名为 records.txt 的文件,并执行一些转换和一个操作(将处理后的输出写入 HDFS)。作业将提交到 YARN 集群模式

还假设 record.txt 是一个 128 MB 的文件,其 HDFS 复制块之一也在节点 1 中

可以说 YARN 正在分配的是 NODE 1 中的执行程序。

YARN 如何在输入数据所在的节点准确分配执行器?

谁告诉 YARN,记录.txt 的复制 HDFS 块之一在 NODE 1 中可用?

Spark 应用程序如何找到数据局部性?它是由在 Application Master 内部运行的 Driver 完成的吗?

YARN 知道数据本地性吗?

hi-*_*zir 6

这里的基本问题是:

YARN 知道数据本地性吗?

YARN“知道”应用程序告诉它什么并且它理解集群的结构(拓扑)。当应用程序发出资源请求时,它可以包括特定的位置约束,在分配资源时可能会或可能不会满足。

如果无法指定约束,YARN(或任何其他集群管理器)将根据其对集群拓扑的了解尝试提供最佳替代匹配。

那么应用程序如何“知道”呢?

如果应用程序使用支持某种形式数据局部性的输入源(文件系统或其他),它可以查询其对应的目录(HDFS 中的名称节点)以获取它想要访问的数据块的位置。

在更广泛的意义上,Spark RDD 可以preferredLocations根据特定的RDD实现为集群管理器(不一定是 YARN)定义,稍后可以将其转换为资源约束。