Apache Spark 架构
Apache Spark architecture
试图找到有关 Apache Spark 内部架构的完整文档,但没有结果。
例如,我正在尝试了解下一件事:
假设我们在 HDFS 上有 1Tb 的文本文件(集群中有 3 个节点,复制因子为 1)。该文件将被分成 128Mb 的块,每个块将仅存储在一个节点上。我们 运行 这些节点上的 Spark Worker。我知道 Spark 正在尝试在同一节点上处理存储在 HDFS 中的数据(以避免网络 I/O)。例如,我正在尝试在这个 1Tb 的文本文件中进行字数统计。
这里我有下一个问题:
- Spark会把chuck(128Mb)加载到RAM中,统计字数,然后从内存中删除,然后依次执行吗?如果没有可用的 RAM 怎么办?
- Spark 什么时候不使用 HDFS 上的本地数据?
- 如果我需要做更复杂的任务,当每个 Worker 的每次迭代的结果需要转移到所有其他 Worker(洗牌?)时,我是否需要自己将它们写入 HDFS 和然后阅读它们?例如,我无法理解 K 均值聚类或梯度下降如何在 Spark 上工作。
我将感谢任何 link Apache Spark 体系结构指南。
这里是您问题的答案
Spark 将尝试将 128Mb 块加载到内存中并在 RAM 中处理它。请记住,由于 Java 开销(Java headers 等),内存中的大小可能比原始文件的原始大小大几倍。根据我的经验,它可以大 2-4 倍。
如果内存 (RAM) 不足,Spark 会将数据溢出到本地磁盘。您可能需要调整这两个参数以尽量减少溢出:spark.shuffle.memoryFraction
和 spark.storage.memoryFraction
.
Spark 将始终尝试使用 HDFS 中的本地数据。如果块在本地不可用,它将从集群中的另一个节点检索它。 more info
在shuffle上,您不需要手动将中间结果保存到HDFS。 Spark 会将结果写入本地存储,并仅对需要的数据进行混洗,从而最大限度地重用下一阶段的本地存储。
这里很好video,它详细介绍了 Spark 架构、shuffle 期间发生的情况以及优化性能的提示。
添加到其他答案中,这里我想包括问题中提到的 Spark 核心架构图。
大师是这里的入口点。
试图找到有关 Apache Spark 内部架构的完整文档,但没有结果。
例如,我正在尝试了解下一件事: 假设我们在 HDFS 上有 1Tb 的文本文件(集群中有 3 个节点,复制因子为 1)。该文件将被分成 128Mb 的块,每个块将仅存储在一个节点上。我们 运行 这些节点上的 Spark Worker。我知道 Spark 正在尝试在同一节点上处理存储在 HDFS 中的数据(以避免网络 I/O)。例如,我正在尝试在这个 1Tb 的文本文件中进行字数统计。
这里我有下一个问题:
- Spark会把chuck(128Mb)加载到RAM中,统计字数,然后从内存中删除,然后依次执行吗?如果没有可用的 RAM 怎么办?
- Spark 什么时候不使用 HDFS 上的本地数据?
- 如果我需要做更复杂的任务,当每个 Worker 的每次迭代的结果需要转移到所有其他 Worker(洗牌?)时,我是否需要自己将它们写入 HDFS 和然后阅读它们?例如,我无法理解 K 均值聚类或梯度下降如何在 Spark 上工作。
我将感谢任何 link Apache Spark 体系结构指南。
这里是您问题的答案
Spark 将尝试将 128Mb 块加载到内存中并在 RAM 中处理它。请记住,由于 Java 开销(Java headers 等),内存中的大小可能比原始文件的原始大小大几倍。根据我的经验,它可以大 2-4 倍。 如果内存 (RAM) 不足,Spark 会将数据溢出到本地磁盘。您可能需要调整这两个参数以尽量减少溢出:
spark.shuffle.memoryFraction
和spark.storage.memoryFraction
.Spark 将始终尝试使用 HDFS 中的本地数据。如果块在本地不可用,它将从集群中的另一个节点检索它。 more info
在shuffle上,您不需要手动将中间结果保存到HDFS。 Spark 会将结果写入本地存储,并仅对需要的数据进行混洗,从而最大限度地重用下一阶段的本地存储。
这里很好video,它详细介绍了 Spark 架构、shuffle 期间发生的情况以及优化性能的提示。
添加到其他答案中,这里我想包括问题中提到的 Spark 核心架构图。
大师是这里的入口点。