假设有一个 Spark 作业将从 HDFS 读取一个名为 Records.txt 的文件,并执行一些转换和一个操作(将处理后的输出写入 HDFS)。作业将提交到YARN集群模式
还假设 Records.txt 是一个 128 MB 的文件,并且其 HDFS 复制块之一也在 NODE 1 中
假设 YARN 正在分配的是 NODE 1 内的执行程序。
YARN如何准确地在输入数据所在的节点分配一个执行器呢?
谁告诉 YARN HDFS 复制的records.txt 块之一在 NODE 1 中可用?
Spark 应用程序如何找到数据局部性?它是由在 Application Master 内部运行的 Driver 完成的吗?
YARN 知道数据局部性吗?
这里的基本问题是:
YARN 知道数据局部性吗?
YARN“知道”应用程序告诉它什么,并且它了解集群的结构(拓扑)。当应用程序发出资源请求时,它可以包括特定的局部性限制,在分配资源时可能会或可能不会满足。
如果无法指定约束,YARN(或任何其他集群管理器)将根据其对集群拓扑的了解,尝试提供最佳替代匹配。
那么应用程序如何“知道”?
如果应用程序使用支持某种形式的数据局部性的输入源(文件系统或其他),则它可以查询相应的目录(HDFS 中的名称节点)以获取它想要访问的数据块的位置。
从更广泛的意义上讲,Spark RDD 可以定义preferredLocations
,取决于具体的RDD
集群管理器(不一定是 YARN)的实现,稍后可以转化为资源约束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)