繁体   English   中英

在HDInsight群集上远程执行Spark作业

[英]Remotely execute a Spark job on an HDInsight cluster

我试图从Microsoft Azure自动在HDInsight群集上启动Spark作业。 我知道有几种方法可以自动化Hadoop作业提交(由Azure本身提供),但到目前为止,我还没有找到一种方法来远程运行Spark作业,而无需使用主实例设置RDP。

有没有办法实现这个目标?

Spark-jobserver提供RESTful接口,用于提交和管理Apache Spark作业,jar和作业上下文。

https://github.com/spark-jobserver/spark-jobserver

我的解决方案是使用Scheduler和Spark-jobserver定期启动Spark-job。

在撰写本文时,似乎没有正式的方法来实现这一目标。 然而,到目前为止,我已经能够以某种方式使用Oozie shell工作流远程运行Spark作业。 它只不过是一个补丁,但到目前为止它对我有用。 这些是我遵循的步骤:

先决条件

  • 微软Powershell
  • Azure Powershell

处理

定义Oozie工作流* .xml *文件:

<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  

有必要将.cmdSpark .jar上传到wasb存储库(此答案中未包含的进程),具体到工作流中指向的方向:

wasb://myContainer@myAccount.blob.core.windows.net/

定义powershell脚本

powershell脚本非常取自官方Oozie的HDInsight教程。 由于它与我的方法几乎完全相同,因此我不在此答案中包含脚本。

我在天蓝色反馈门户上提出了一个新的建议,表明需要官方支持远程Spark作业提交。

2016年8月17日更新:我们的火花群集现在包括一个Livy服务器,它提供休息服务以提交火花作业。 您也可以通过Azure Data Factory自动执行spark作业。


原帖:1)目前不支持针对spark的远程作业提交。

2)如果您希望每次都自动设置主设备(即每次执行时添加--master yarn-client),您可以使用以下配置在%SPARK_HOME \\ conf \\ spark-defaults.conf文件中设置值:

spark.master纱线客户端

您可以在apache spark网站上找到有关spark-defaults.conf的更多信息。

3)如果要在部署时将其自动添加到spark-defaults.conf文件,请使用群集自定义功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM