我是Spark的新手,刚刚开始对此进行更多探索。我选择了更长的路径,不使用任何CDH发行版安装hadoop,我从Apache网站安装了hadoop,并自己设置了配置文件,以了解更多的基础知识。
我已经设置了一个3节点群集(所有节点都是从ESX服务器创建的虚拟机)。我已经使用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.节点的硬件配置非常低(每个4GM RAM和20GB磁盘空间),但这些只是用于测试目的。所以我想没关系。
我已经在NameNode 1中安装了Spark(与我安装的Hadoop 2.7兼容的版本)。我能够在本地启动Spark shell,并执行基本的scala命令来创建RDD并对其执行一些操作。我还设法以Yarn Cluster和Yarn Client部署模式测试运行SparkPi示例。一切都很好。
现在我的问题是,在实时场景中,我们将在本地机器中(而不是在形成Hadoop集群的节点中)编写基于(Java、scala或py)的代码。假设我有另一台机器在与我的HA集群相同的网络中。我如何将我的作业从不在HA的主机提交到Yarn RM?
我相信,SPARK必须安装在我编写代码的机器上(我的假设正确吗),并且不需要在HA集群中安装SPARK。我还想将提交作业的输出从提交作业的主机返回。我不知道需要做些什么才能使这项工作成功。
我听说过Spark JobServer,这就是我需要的吗?我相信你们能帮我摆脱这种困惑。我只是找不到任何文件明确说明完成这项工作需要遵循的步骤。我可以从基于Windows的机器向unix环境中的HA集群设置提交作业吗?
Spark JobServer为您的需求提供rest接口。除此之外,还有其他特点。
请参阅https://github.com/spark-jobserver/spark-jobserver了解更多信息。
为了向集群提交spark作业,您的机器必须成为"网关节点"。这基本上意味着你在那台机器上安装了hadoop二进制文件/库/configs,但上面没有运行hadoop守护进程
一旦你设置好了,你就可以从那台机器上对集群运行hdfs命令(比如hdfs-dfs-ls/),向集群提交yarn应用程序(yarn jar/opt/cloudera/pulps/CDH/jars/hadoop-examples.jar pi 3 100)。
完成该步骤后,您可以在网关机器上安装spark并开始提交spark作业。如果你要在纱线上使用Spark,这是唯一需要安装的机器火花。
您(您的代码)是负责获得作业输出的人。您可以选择将结果保存在HDFS中(最常见的选择),打印到控制台等。Spark的历史服务器用于调试目的。