Spark on yarn 概念理解

Posted

技术标签:

【中文标题】Spark on yarn 概念理解【英文标题】:Spark on yarn concept understanding 【发布时间】:2014-09-14 14:33:14 【问题描述】:

我正在尝试了解 spark 如何在 YARN 集群/客户端上运行。我有以下问题。

    是否需要在yarn cluster的所有节点上安装spark?我认为应该是因为集群中的工作节点执行任务并且应该能够解码驱动程序发送到集群的spark应用程序中的代码(spark API)?

    它在文档中说“确保HADOOP_CONF_DIRYARN_CONF_DIR 指向包含Hadoop 集群(客户端)配置文件的目录”。为什么客户端节点在将作业发送到集群时必须安装 Hadoop?

【问题讨论】:

【参考方案1】:

添加到其他答案。

    是否需要在yarn中的所有节点上都安装spark 集群?

,如果 spark 作业在 YARN 中调度(clientcluster 模式)。只有standalone mode需要在很多节点上安装Spark。

这些是 Spark 应用部署模式的可视化。

Spark 独立集群

cluster 模式下,驱动程序 将位于Spark Worker 节点之一,而在client 模式下,它将位于在启动的机器中这份工作


YARN 集群模式

YARN 客户端模式

此表提供了这些模式之间差异的简明列表:

pics source

    它在文档中说“确保 HADOOP_CONF_DIR 或 YARN_CONF_DIR 指向包含(客户端) Hadoop集群的配置文件”。为什么客户端节点有 在将作业发送到集群时安装 Hadoop?

Hadoop 安装不是强制性的但配置(不是全部)是!。 我们可以称它们为网关节点。主要有两个原因。

HADOOP_CONF_DIR 目录中包含的配置将分发到 YARN 集群,以便应用程序使用的所有容器使用相同的配置。 在 YARN 模式下,ResourceManager 的地址是从 Hadoop 配置(yarn-default.xml)。因此,--master 参数为yarn

更新:(2017-01-04)

Spark 2.0+ 不再需要胖组装罐进行生产 部署。 source

【讨论】:

@Leon:谢谢你的意见。我并不是说需要配置中的所有属性。我现在更新了答案。【参考方案2】:

我们正在 YARN 上运行 spark 作业(我们使用 HDP 2.2)。

我们没有在集群上安装 spark。我们只将 Spark 程序集 jar 添加到 HDFS。

例如运行 Pi 示例:

./bin/spark-submit \
  --verbose \
  --class org.apache.spark.examples.SparkPi \
  --master yarn-cluster \
  --conf spark.yarn.jar=hdfs://master:8020/spark/spark-assembly-1.3.1-hadoop2.6.0.jar \
  --num-executors 2 \
  --driver-memory 512m \
  --executor-memory 512m \
  --executor-cores 4 \
  hdfs://master:8020/spark/spark-examples-1.3.1-hadoop2.6.0.jar 100

--conf spark.yarn.jar=hdfs://master:8020/spark/spark-assembly-1.3.1-hadoop2.6.0.jar - 这个配置告诉纱线从被带走火花组件。如果你不使用它,它会从你运行spark-submit上传jar。

关于第二个问题:客户端节点不需要安装 Hadoop。它只需要配置文件。您可以将目录从集群复制到客户端。

【讨论】:

正如 @Jacek Laskowski here 所指出的,SparkYARN 模式下不再使用--num-executors 我相信我们可以now fall-back on spark.dynamicAllocation.initialExecutors for --num-executors or spark.executor.instances【参考方案3】:

1 - 如果遵循从/主架构,则 Spark。所以在你的集群上,你必须安装一个 spark master 和 N 个 spark slave。您可以在独立模式下运行 spark。但是使用 Yarn 架构会给你带来一些好处。 这里有一个很好的解释:http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/

2- 例如,如果你想使用 Yarn 或 HDFS,这是必要的,但正如我之前所说,你可以在独立模式下运行它。

【讨论】:

感谢您的回复。这篇文章很棒。不过我还有一个问题。据我了解,我的节点不必在纱线集群中。那么,为什么我必须安装hadoop。我应该知道如何能够指向在其他地方运行的纱线集群? “安装 hadoop”是什么意思?因为Hadoop是一个非常大的技术栈,包括HDFS、Hive、Hbase……那么你想在Hadoop中安装什么? 好吧,我是一个新手,还在努力掌握。我的意思是我在另一个节点上运行了 hdfs 集群。那么我的 HADOOP_CONF_DIR 在我的 spark-env.sh 中指向什么 这是因为在 HADOOP_CONF_DIR 中包含 Yarn 和 HDFS 的所有配置文件,如 core-site.xml、mapred-site.xml、hdfs-site.xml ... 所以如果你想使用它Spark 将需要这个文件。但正如我之前所说,如果您在独立模式下运行 Spark,则不需要精确 HADOOP_CONF_DIRE,因为您没有安装任何 Hadoop 服务。只需明确区分这两种模式:Hadoop 集群中的 Spark / 独立集群中的 Spark【参考方案4】:

让我试着剪断胶水,让它变得不耐烦。

6 个组件:1. 客户端、2. 驱动程序、3. 执行器、4. 应用程序主控器、5. 工作器和 6. 资源管理器; 2 种部署模式;和2资源(集群)管理

关系如下:

客户

没什么特别的,就是提交 spark 应用。

工人、执行者

没什么特别的,一个worker拥有一个或多个executor。

主控和资源(集群)管理员

(无论是客户端还是集群模式)

yarn 中,资源管理器和主控器位于两个不同的节点中; 在独立中,资源管理器 == master,同一节点中的同一进程。

驱动程序

客户端模式,与客户端坐在一起 在 yarn - 集群模式中,与 master 同坐(在这种情况下,客户端进程在提交应用后退出) 在独立 - 集群模式下,与一名工作人员坐在一起

瞧!

【讨论】:

以上是关于Spark on yarn 概念理解的主要内容,如果未能解决你的问题,请参考以下文章

Yarn下MapReduce部分参数理解

理解Spark运行模式(Yarn Cluster)

spark-on-yarn 学习

深入理解 Taier:MR on Yarn 的实现原理

mapreduce on yarn简单内存分配解释

Spark on yarn