Apache Spark架构

Vit*_*t D 6 bigdata hdfs apache-spark

试图找到有关Apache Spark内部架构的完整文档,但没有结果.

例如,我正在尝试理解下一件事:假设我们在HDFS上有1Tb文本文件(群集中有3个节点,复制因子为1).该文件将被分配到128Mb块中,每个块将仅存储在一个节点上.我们在这些节点上运行Spark Workers.我知道Spark正在尝试使用存储在同一节点上的HDFS中的数据(以避免网络I/O).例如,我正试图在这个1Tb文本文件中进行单词计数.

我在这里有下一个问题:

  1. Spark会将chuck(128Mb)加载到RAM中,计算单词,然后将其从内存中删除并按顺序执行吗?如果没有可用内存怎么办?
  2. 什么时候Spark会在HDFS上使用非本地数据?
  3. 如果我需要做更复杂的任务,当每个Worker上的每次迭代的结果需要转移到所有其他Worker(洗牌?)时,我是否需要自己将它们写入HDFS然后读取它们怎么办?例如,我无法理解K-means聚类或Gradient下降如何在Spark上运行.

我将非常感谢Apache Spark架构指南的任何链接.

mrs*_*vas 8

添加到其他答案,在这里我想包括问题中提到的 Spark 核心架构图。

Master是这里的切入点。

Spark 核心架构


Mak*_*sud 5

以下是您的问题的答案

  1. Spark将尝试将128Mb块加载到内存中并在RAM中处理它.请记住,由于Java开销(Java标头等),内存中的大小可能比原始文件的原始大小大几倍.根据我的经验,它可以大2-4倍.如果内存不足(RAM),Spark会将数据溢出到本地磁盘.您可能需要调整这两个参数以最大限度地减少溢出:spark.shuffle.memoryFractionspark.storage.memoryFraction.

  2. Spark总是会尝试使用HDFS中的本地数据.如果块本地不可用,它将从群集中的另一个节点检索它.更多信息

  3. 在随机播放时,您无需手动将中间结果保存到HDFS.Spark会将结果写入本地存储,并且只将最大化本地存储重用所需的数据随机播放到下一阶段.

这里有一个很好的视频,详细介绍了Spark架构,在随机播放过程中会发生什么以及优化性能的技巧.