我正在尝试从 Microsoft Azure 在 HDInsight 群集上自动启动 Spark 作业。我知道有几种方法可以自动化 Hadoop 作业提交(由 Azure 本身提供),但到目前为止我还没有找到一种方法来远程运行< em> Spark 作业,无需使用主实例设置RDP。
有没有办法实现这个目标?
答案 0 :(得分:4)
Spark-jobserver提供RESTful接口,用于提交和管理Apache Spark作业,jar和作业上下文。
https://github.com/spark-jobserver/spark-jobserver
我的解决方案是使用Scheduler和Spark-jobserver定期启动Spark-job。
答案 1 :(得分:2)
在撰写本文时,似乎没有官方方法来实现这一目标。但是,到目前为止,我已经能够以某种方式使用 Oozie shell 工作流远程运行 Spark 作业。它只不过是一个补丁,但到目前为止它对我有用。这些是我遵循的步骤:
<workflow-app name="myWorkflow" xmlns="uri:oozie:workflow:0.2">
<start to = "myAction"/>
<action name="myAction">
<shell xmlns="uri:oozie:shell-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>myScript.cmd</exec>
<file>wasb://myContainer@myAccount.blob.core.windows.net/myScript.cmd#myScript.cmd</file>
<file>wasb://myContainer@myAccount.blob.core.windows.net/mySpark.jar#mySpark.jar</file>
</shell>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
请注意,无法识别要在哪个 HDInsight 节点上执行脚本,因此需要将其与 Spark 应用程序一起放置 .jar ,位于 wasb 存储库中。然后将其重定向到执行 Oozie 作业的本地目录。
C:\apps\dist\spark-1.2.0\bin\spark-submit --class spark.azure.MainClass
--master yarn-cluster
--deploy-mode cluster
--num-executors 3
--executor-memory 2g
--executor-cores 4
mySpark.jar
有必要将 .cmd 和 Spark .jar 上传到wasb存储库(此答案中未包含的进程),具体到工作流程中指出的方向:
wasb://myContainer@myAccount.blob.core.windows.net/
powershell脚本非常取自官方的 Oozie on HDInsight 教程。我没有在这个答案中包含脚本,因为它与我的方法几乎完全相同。
我在azure feedback portal上提出了一个新建议,表明需要官方支持远程Spark工作提交。
答案 2 :(得分:1)
2016年8月17日更新: 我们的火花集群产品现在包括一个Livy服务器,它提供休息服务来提交火花作业。您也可以通过Azure Data Factory自动执行spark作业。
原帖: 1)目前不支持针对spark的远程作业提交。
2)如果您希望每次都自动设置主设备(即每次执行时添加--master yarn-client),您可以使用以下配置在%SPARK_HOME \ conf \ spark-defaults.conf文件中设置值:
spark.master yarn-client
您可以在apache spark网站上找到有关spark-defaults.conf的更多信息。
3)如果要在部署时将其自动添加到spark-defaults.conf文件,请使用群集自定义功能。