将 Spark 作业提交到 Spark 集群

Posted

技术标签:

【中文标题】将 Spark 作业提交到 Spark 集群【英文标题】:Submitting Spark Jobs to Spark Cluster 【发布时间】:2016-05-12 05:33:15 【问题描述】:

我是 Spark 的新手,刚刚开始对此进行更多探索。我选择了更长的路径,不使用任何 CDH 发行版安装 hadoop,我从 Apache 网站安装了 Hadoop,并自己设置配置文件以了解更多基础知识。

我已经设置了一个 3 节点集群(所有节点都是从 ESX 服务器创建的 VM 机器)。 我已经使用 zookeeper 机制为 Namenode 和 ResourceManager 设置了高可用性。这三个节点也都被用作DataNode。

以下守护进程正在所有三个节点上运行

Daemon in Namenode 1          Daemon In Namenode 2       Daemon in Datanode         
8724 QuorumPeerMain           22896 QuorumPeerMain       7379 DataNode   
13652 Jps                     23780 ResourceManager      7299 JournalNode
9045 DFSZKFailoverController  23220 DataNode             7556 NodeManager
9175 DataNode                 23141 NameNode             7246 QuorumPeerMain
9447 NodeManager              27034 Jps                  9705 Jps
8922 NameNode                 23595 NodeManager
8811 JournalNode              22955 JournalNode
9324 ResourceManager          23055 DFSZKFailoverController

我在 NameNode 1 和 2 中为 NN 和 RM 设置了 HA。 节点具有非常小的硬件配置(每个 4GM RAM 和 20GB 磁盘空间),但这些仅用于测试目的。所以我想没关系。

我已经在 NameNode 1 中安装了 Spark(与我安装的 Hadoop 2.7 兼容的版本)。我能够在本地启动 Spark-shell 并执行基本的 scala 命令来创建 RDD 并对其执行一些操作。我还设法以 Yarn-Cluster 和 Yarn-Client 部署模式测试运行 SparkPi 示例。一切都很好。

现在我的问题是,在实时场景中,我们将在我们的本地机器(而不是形成 Hadoop 集群的节点中)编写基于(Java、scala 或 py)的代码。假设我在与我的 HA 集群相同的网络中有另一台机器。我如何将我的作业提交到 Yarn-Cluster(假设我想尝试提交 SparkPi)示例从不在 HA 中的主机到 Yarn RM,如何我这样做?

我相信,SPARK 必须安装在我编写代码的机器上(我的假设是否正确),并且 HA 集群中不需要安装 spark。我还想将提交的作业的输出从提交的位置返回给主机。我不知道需要做什么才能完成这项工作。

我听说过 Spark JobServer,这是我启动并运行这一切所需的吗?我相信你们可以帮助我解决这个困惑。我只是找不到任何明确指定完成此操作的步骤的文件。我可以将作业从基于 Windows 的机器提交到我在 unix 环境中设置的 HA 集群吗?

【问题讨论】:

【参考方案1】:

Spark JobServer 为您的需求提供了 rest 接口。除此之外还有其他功能。

更多信息请参见https://github.com/spark-jobserver/spark-jobserver。

【讨论】:

您能否确认我是否需要将它安装在我的客户端计算机或 Hadoop 集群中。另外我相信如果没有错的话,Spark 必须只安装在客户端机器上 是的,spark 必须安装在您要运行 Spark JobServer 的机器上。但是SJS没有必要在集群内部运行,除非有很强的网络限制。 您是否对解释如何将 Spark 作业从远程机器提交到 Yarn Cluster 的站点有任何参考。我发现的大部分帖子都是使用 localhost(将作业提交到独立服务器) 不,我没有用过纱线。有关于 EMR 和 SJS github.com/spark-jobserver/spark-jobserver/blob/master/doc/… 的文档可能对您有用。 Yarn 客户端文档在这里github.com/spark-jobserver/spark-jobserver/blob/master/doc/…【参考方案2】:

为了向集群提交 Spark 作业,您的机器必须成为“网关节点”。这基本上意味着您在该机器上安装了 hadoop 二进制文件/库/配置,但没有在其上运行 hadoop 守护进程。

设置完成后,您应该能够从该机器对您的集群运行 hdfs 命令(如 hdfs dfs -ls /),将纱线应用程序提交到集群(yarn jar /opt/cloudera/parcels/CDH/ jars/hadoop-examples.jar pi 3 100)。

完成该步骤后,您可以在网关机器上安装 spark 并开始提交 spark 作业。如果您要使用 Spark-on-yarn,这是唯一需要安装 spark 的机器。

您(您的代码)负责获取作业的输出。您可以选择将结果保存在 HDFS 中(最常见的选择),将其打印到控制台等... Spark 的历史服务器用于调试目的。

【讨论】:

感谢您的输入。澄清一下,“网关节点”机器是指开发人员将编写应用程序代码并将其提交给 Yarn-Cluster 的机器。这些机器中的每一个都必须安装 hadoop(但不是必需的)才能启动所有守护进程。在我在集群中安装了 SPARK 的场景中,网关机器指的是 Namenode 1 正确。网关机器是开发人员提交作业的机器。每台机器都必须安装 hadoop,但它不会运行任何 hadoop 守护进程。 所以这个过程跳过了 Spark-Job Server 的需要? Spark-Job Server 是什么意思?是 Spark 历史服务器吗? Spark History Server 是一个 Web 服务器,可让您浏览过去执行的作业的作业信息。如果您不需要,则无需安装。

以上是关于将 Spark 作业提交到 Spark 集群的主要内容,如果未能解决你的问题,请参考以下文章

通过独立集群中的 REST 作业提交的 spark.master 配置被忽略

python作业上的Spark提交过程泄漏

AWS 上 DC/OS 集群上的 Spark 作业

替代递归运行Spark-submit作业

CDH集群spark-shell执行过程分析

每次在纱线中执行批处理作业时都会创建 Spark 上下文