Spark 运行 on YARN - 现实生活中示例的工作流程是什么样的?
Spark running on YARN - What does a real life example's workflow look like?
我一直在阅读 Hadoop、YARN 和 SPARK。到目前为止,对我来说有意义的是我在下面总结的内容。
Hadoop MapReduce: Client choses an input file and hands if off to
Hadoop (or YARN). Hadoop takes care of splitting the flie based on
user's InputFormat and stores it on as many nodes that are available
and configured Client submits a job (map-reduce) to YARN, which
copeies the jar to available Data Nodes and executes the job. YARN is
the orchestrator that takes care of all the scheduling and running of
the actual tasks
Spark: Given a job, input and a bunch of configuration parameters, it
can run your job, which could be a series of transformations and
provide you the output.
I also understand MapReduce is a batch based processing paradigm and
SPARK is more suited for micro batch or stream based data.
有很多文章讨论了 Spark 如何 运行 在 YARN 上以及它们是如何互补的,但是 none 设法帮助我理解了这两者如何在实际中结合在一起工作流程。例如,当客户有一个作业要提交、读取一个巨大的文件并进行一系列转换时,在 YARN 上使用 Spark 时,工作流程是什么样的。让我们假设客户端的输入文件是一个 100GB 的文本文件。请提供尽可能详细的信息
如有任何帮助,我们将不胜感激
谢谢
凯
假设大文件存储在 HDFS 中。在 HDFS 中,文件被分成一定大小的块(默认 128 MB)。
这意味着您的 100GB 文件 将被分成 800 个块。每个块将被复制并可以存储在集群中的不同节点上。
当使用 Hadoop 读取文件时 InputFormat
首先获取带有位置的拆分列表。然后每个拆分创建一个任务。您将获得 800 个并行任务,这些任务的执行时间为 运行。
基本上MapReduce和Spark的输入过程是一样的,因为两者都使用Hadoop输入格式。
他们都将在单独的任务中处理每个 InputSplit
。主要区别在于 Spark 具有更丰富的转换集,如果有可以立即应用的转换链,则可以优化工作流程。与 MapReduce 相反,这里总是 map 和 reduce 阶段。
YARN 代表 "Yet another resource negotiator"。当提交具有某些资源需求(内存、处理器)的新作业时,YARN 有责任检查集群上是否有所需资源。如果集群上的其他作业 运行ning 占用了过多的资源,那么新作业将等待之前的作业完成并且资源可用。
YARN 会在集群中为 worker 分配足够的 containers,同时也会为 Spark 驱动程序分配一个。在这些容器中的每一个中,JVM 都是用给定的资源启动的。每个 Spark worker 可以并行处理多个任务(取决于每个执行器配置的核心数)。
例如
如果为每个 Spark 执行器设置 8 个核心,YARN 会尝试在集群中分配 101 个容器 tu 运行100 个 Spark worker + 1 个 Spark master(驱动程序)。每个 worker 将并行处理 8 个任务(因为有 8 个核心)。
我一直在阅读 Hadoop、YARN 和 SPARK。到目前为止,对我来说有意义的是我在下面总结的内容。
Hadoop MapReduce: Client choses an input file and hands if off to Hadoop (or YARN). Hadoop takes care of splitting the flie based on user's InputFormat and stores it on as many nodes that are available and configured Client submits a job (map-reduce) to YARN, which copeies the jar to available Data Nodes and executes the job. YARN is the orchestrator that takes care of all the scheduling and running of the actual tasks
Spark: Given a job, input and a bunch of configuration parameters, it can run your job, which could be a series of transformations and provide you the output.
I also understand MapReduce is a batch based processing paradigm and SPARK is more suited for micro batch or stream based data.
有很多文章讨论了 Spark 如何 运行 在 YARN 上以及它们是如何互补的,但是 none 设法帮助我理解了这两者如何在实际中结合在一起工作流程。例如,当客户有一个作业要提交、读取一个巨大的文件并进行一系列转换时,在 YARN 上使用 Spark 时,工作流程是什么样的。让我们假设客户端的输入文件是一个 100GB 的文本文件。请提供尽可能详细的信息
如有任何帮助,我们将不胜感激
谢谢 凯
假设大文件存储在 HDFS 中。在 HDFS 中,文件被分成一定大小的块(默认 128 MB)。
这意味着您的 100GB 文件 将被分成 800 个块。每个块将被复制并可以存储在集群中的不同节点上。
当使用 Hadoop 读取文件时 InputFormat
首先获取带有位置的拆分列表。然后每个拆分创建一个任务。您将获得 800 个并行任务,这些任务的执行时间为 运行。
基本上MapReduce和Spark的输入过程是一样的,因为两者都使用Hadoop输入格式。
他们都将在单独的任务中处理每个 InputSplit
。主要区别在于 Spark 具有更丰富的转换集,如果有可以立即应用的转换链,则可以优化工作流程。与 MapReduce 相反,这里总是 map 和 reduce 阶段。
YARN 代表 "Yet another resource negotiator"。当提交具有某些资源需求(内存、处理器)的新作业时,YARN 有责任检查集群上是否有所需资源。如果集群上的其他作业 运行ning 占用了过多的资源,那么新作业将等待之前的作业完成并且资源可用。
YARN 会在集群中为 worker 分配足够的 containers,同时也会为 Spark 驱动程序分配一个。在这些容器中的每一个中,JVM 都是用给定的资源启动的。每个 Spark worker 可以并行处理多个任务(取决于每个执行器配置的核心数)。
例如
如果为每个 Spark 执行器设置 8 个核心,YARN 会尝试在集群中分配 101 个容器 tu 运行100 个 Spark worker + 1 个 Spark master(驱动程序)。每个 worker 将并行处理 8 个任务(因为有 8 个核心)。