首页 > 解决方案 > Apache Spark 工作节点可以是不同于 HDFS 数据节点的机器吗?

问题描述

我有一个 HDFS 集群(比如它有 5 个数据节点),如果我想设置一个 Spark 集群(比如它有 3 个工作节点)读/写数据到 HDFS 集群,我需要确保 Spark 工作节点是在 HDFS 数据节点的同一台机器上?IMO 他们可以是不同的机器。但是如果 Spark Worker 节点和 HDFS 数据节点是不同的机器,当从 HDFS 读取数据时,Spark Worker 节点需要从不同的机器下载数据,这会导致更高的延迟。如果它们在同一台机器上,则可以减少延迟。我的理解正确吗?

标签: apache-sparkhdfs

解决方案


在裸机设置中,正如 MR 最初假设的那样,数据局部性原则适用于您所说的,并且 Spark 将安装在所有数据节点上,这意味着它们也是工作节点。因此,Spark Worker 驻留在数据节点上,以实现 HDFS 的机架感知和数据本地化。也就是说,现在还有其他存储管理器,例如 KUDU 和其他不使用 HDFS 的 NOSQL 变体。

使用 Hadoop 的云方法,您会看到存储和计算必然分离,例如 AWS EMR 和 EC2 等。就计算的弹性而言,这是不可能的。一旦获得相关键的数据,Spark 会随机分配给相同的 Worker,这并没有那么糟糕。

因此,对于 Cloud,这个问题实际上不再相关。对于裸机,Spark 可以安装在不同的机器上,但没有意义。在这种情况下,我会在所有 HDFS 节点上安装 5 个而不是 3 个。


推荐阅读