我一直在阅读Hadoop,YARN和SPARK。到目前为止,对我来说有意义的是我在下面总结的内容。
Hadoop MapReduce:客户端选择输入文件,如果关闭则选择 Hadoop(或YARN)。 Hadoop负责基于分裂flie 用户的InputFormat并将其存储在可用的节点上 并配置客户端将作业(map-reduce)提交给YARN,其中 将jar应用于可用的数据节点并执行该作业。 YARN是 负责所有调度和运行的协调器 实际的任务
Spark:给定一个作业,输入和一堆配置参数,它 可以运行你的工作,这可能是一系列的转变和 为您提供输出。
我也理解MapReduce是一种基于批处理的处理范例 SPARK更适合微批量或基于流的数据。
有很多文章讨论了Spark如何在YARN上运行以及它们如何互补,但没有一篇能够帮助我理解这两者在实际工作流程中是如何结合在一起的。例如,当客户端有一个要提交的作业时,读取一个巨大的文件并进行一系列转换,在YARN上使用Spark时,工作流程是什么样的。我们假设客户端的输入文件是100GB的文本文件。请尽可能多地提供详细信息
非常感谢任何帮助
由于 凯
答案 0 :(得分:1)
假设大文件存储在HDFS中。在HDFS中,文件被分成一些大小的块(默认为128 MB)。
这意味着您的 100GB文件将分为 800块。每个块都将被复制,并可以存储在集群中的不同节点上。
使用Hadoop InputFormat
读取文件时首先获取带位置的拆分列表。然后每个拆分创建一个任务。您将获得由运行时执行的800个并行任务。
基本上, MapReduce 和 Spark 的输入过程是相同的,因为两者都使用 Hadoop输入格式。
他们都将在单独的任务中处理每个InputSplit
。主要区别在于Spark具有更丰富的转换集,并且如果存在可以一次应用的转换链,则可以优化工作流。与 MapReduce 相反,其中 map 和 reduce 仅相位。
YARN 代表"又一个资源谈判者"。当提交具有某些资源要求(内存,处理器)的新作业时,YARN负责检查群集上是否有所需的资源。如果群集上运行的其他作业占用了太多资源,则新作业将等待prevoius作业完成并且资源可用。
YARN将在群集中为工作人员分配足够的容器,并为Spark驱动程序分配一个容器。在每个容器中,JVM都是使用给定的资源启动的。每个Spark工作人员可以并行处理多个任务(取决于每个执行程序配置的核心数)。
e.g。
如果为每个Spark执行程序设置8个核心,则YARN会尝试在群集中分配101个容器。运行100个Spark工作人员+ 1个Spark主服务器(驱动程序)。每个工作人员将并行处理8个任务(因为8个核心)。