【问题标题】:Remotely execute a Spark job on an HDInsight cluster在 HDInsight 群集上远程执行 Spark 作业
【发布时间】:2015-02-16 13:22:59
【问题描述】:

我正在尝试在 Microsoft AzureHDInsight 集群上自动启动 Spark 作业。我知道有几种方法可以自动提交 Hadoop 作业(由 Azure 本身提供),但到目前为止,我还没有找到一种方法来远程运行 Hadoop em>Spark 作业没有设置与主实例的 RDP。

有什么方法可以实现吗?

【问题讨论】:

    标签: azure apache-spark remote-access azure-hdinsight


    【解决方案1】:

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

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

    我的解决方案是同时使用调度程序和 Spark-jobserver 来定期启动 Spark-job。

    【讨论】:

    • 好吧,经过很长时间,似乎我们终于可以开始工作了,虽然我已经切换到 AWS。
    • 不错的选择人 :) 但是,只需标记我的答案给下一个人 :)
    • 我正在测试 Spark-jobserver,然后将其标记为最终答案。但是,就我所看到的而言,我希望尽早标记它。 :)
    【解决方案2】:

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

    先决条件

    • Microsoft 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 on HDInsight 教程。由于它与我的方法几乎完全相同,因此我没有在此答案中包含脚本。

    我对@9​​87654322@提出了新的建议,表明需要官方支持远程Spark作业提交。

    【讨论】:

      【解决方案3】:

      2016 年 8 月 17 日更新: 我们的 spark 集群产品现在包括一个 Livy 服务器,它提供了一个休息服务来提交一个 spark 作业。你也可以通过 Azure 数据工厂自动化 spark 作业。


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

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

      spark.master 纱线客户端

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

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

      【讨论】:

        猜你喜欢
        • 2017-02-25
        • 2017-11-20
        • 1970-01-01
        • 2018-08-24
        • 2018-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多