在 HDInsight 群集上远程执行 Spark 作业
Remotely execute a Spark job on an HDInsight cluster
我正在尝试在 Microsoft Azure[=20= 的 HDInsight 集群上自动启动 Spark 作业].我知道有几种方法可以自动提交 Hadoop 作业(由 Azure 本身提供),但到目前为止我还没有找到远程 运行 Spark 作业的方法,无需使用主实例设置 RDP。
有什么办法可以实现吗?
2016 年 8 月 17 日更新:
我们的 spark 集群产品现在包括一个 Livy 服务器,它提供休息服务来提交 spark 作业。您也可以通过 Azure 数据工厂自动化 spark 作业。
原文post:
1)目前不支持spark的远程作业提交。
2) 如果你想每次都自动设置master(即每次执行时添加--master yarn-client),你可以在%SPARK_HOME\conf\spark-defaults.conf文件中设置值,配置如下:
spark.master 纱线客户端
您可以在 apache spark 网站上找到有关 spark-defaults.conf 的更多信息。
3) 如果您想在部署时将其自动添加到 spark-defaults.conf 文件,请使用集群自定义功能。
在撰写本文时,似乎还没有 官方 方法来实现这一点。然而,到目前为止,我已经能够使用 Oozie shell 工作流程以某种方式远程 运行 Spark 作业。它只是一个补丁,但到目前为止它对我很有用。这些是我遵循的步骤:
先决条件
- 微软威力shell
- 蔚蓝力量shell
进程
定义一个 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
需要将 .cmd 和 Spark .jar 上传到 wasb 存储库(一个过程,它不是包含在这个答案中),具体到工作流程中指出的方向:
wasb://myContainer@myAccount.blob.core.windows.net/
定义电源shell脚本
powershell 脚本很大程度上取自官方 Oozie on HDInsight 教程。由于它与我的方法几乎完全相同,因此我没有将脚本包含在这个答案中。
我在azure feedback portal上提出了新的建议,需要官方支持远程提交Spark作业
Spark-jobserver 提供了一个 RESTful 接口,用于提交和管理 Apache Spark 作业、jar 和作业上下文。
https://github.com/spark-jobserver/spark-jobserver
我的解决方案是使用 Scheduler 和 Spark-jobserver 定期启动 Spark-job。
我正在尝试在 Microsoft Azure[=20= 的 HDInsight 集群上自动启动 Spark 作业].我知道有几种方法可以自动提交 Hadoop 作业(由 Azure 本身提供),但到目前为止我还没有找到远程 运行 Spark 作业的方法,无需使用主实例设置 RDP。
有什么办法可以实现吗?
2016 年 8 月 17 日更新: 我们的 spark 集群产品现在包括一个 Livy 服务器,它提供休息服务来提交 spark 作业。您也可以通过 Azure 数据工厂自动化 spark 作业。
原文post: 1)目前不支持spark的远程作业提交。
2) 如果你想每次都自动设置master(即每次执行时添加--master yarn-client),你可以在%SPARK_HOME\conf\spark-defaults.conf文件中设置值,配置如下:
spark.master 纱线客户端
您可以在 apache spark 网站上找到有关 spark-defaults.conf 的更多信息。
3) 如果您想在部署时将其自动添加到 spark-defaults.conf 文件,请使用集群自定义功能。
在撰写本文时,似乎还没有 官方 方法来实现这一点。然而,到目前为止,我已经能够使用 Oozie shell 工作流程以某种方式远程 运行 Spark 作业。它只是一个补丁,但到目前为止它对我很有用。这些是我遵循的步骤:
先决条件
- 微软威力shell
- 蔚蓝力量shell
进程
定义一个 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
需要将 .cmd 和 Spark .jar 上传到 wasb 存储库(一个过程,它不是包含在这个答案中),具体到工作流程中指出的方向:
wasb://myContainer@myAccount.blob.core.windows.net/
定义电源shell脚本
powershell 脚本很大程度上取自官方 Oozie on HDInsight 教程。由于它与我的方法几乎完全相同,因此我没有将脚本包含在这个答案中。
我在azure feedback portal上提出了新的建议,需要官方支持远程提交Spark作业
Spark-jobserver 提供了一个 RESTful 接口,用于提交和管理 Apache Spark 作业、jar 和作业上下文。
https://github.com/spark-jobserver/spark-jobserver
我的解决方案是使用 Scheduler 和 Spark-jobserver 定期启动 Spark-job。