【问题标题】:How to submit Apache Spark job to Hadoop YARN on Azure HDInsight如何将 Apache Spark 作业提交到 Azure HDInsight 上的 Hadoop YARN
【发布时间】:2014-07-10 09:14:21
【问题描述】:

我很高兴 HDInsight 切换到 Hadoop 版本 2,它通过 YARN 支持 Apache Spark。对于我想要执行的任务,Apache Spark 比 MapReduce 更适合并行编程范例。

但是,我找不到任何有关如何将 Apache Spark 作业远程作业提交到我的 HDInsight 群集的文档。对于标准 MapReduce 作业的远程作业提交,我知道有几个 REST 端点,例如 Templeton 和 Oozie。但据我所知,通过 Templeton 运行 Spark 作业是不可能的。我确实发现可以将 Spark 作业合并到 Oozie 中,但我读到这是一件非常乏味的事情,而且我读过一些关于在这种情况下工作失败检测不起作用的报告。

可能必须有更合适的方式来提交 Spark 作业。有谁知道如何将 Apache Spark 作业远程提交到 HDInsight?

非常感谢!

【问题讨论】:

  • 困难的话题,您需要一种将 scala 获取到从节点的方法,这在开始工作时不太可能有效。正如您已经发现的那样,您不能从外部提交东西,您必须 RDP 到头节点并从那里提交。
  • 感谢您的评论。我尝试通过 RDP 从头节点提交。当我在头节点中搜索用于运行 Spark 作业的 Spark jar 文件时,我什么也没找到。搜索 Tez,其他新的 YARN 计算模型之一,我确实找到了一个 jar 文件,我还可以使用这个 jar 文件将示例 Tez 作业提交到集群。头节点上没有 Spark 是否可能表明集群根本不支持 Spark?
  • 看起来您可以在安装 HDinsight 集群时使用 power shell 脚本执行此操作。 blogs.technet.com/b/dataplatforminsider/archive/2014/11/17/…
  • 太棒了!很高兴知道 Azure 上对 Spark 的支持有所改进!

标签: azure apache-spark azure-hdinsight


【解决方案1】:

您可以在 hdinsight 集群上安装 spark。您必须通过 creating a custom cluster 执行此操作,并添加一个操作脚本,以便在为集群创建 VM 时在集群上安装 Spark。

install with an action script 进行集群安装非常简单,您可以在 C# 或 powershell 中通过向标准自定义创建集群脚本/程序添加几行代码来完成。

powershell:

# ADD SCRIPT ACTION TO CLUSTER CONFIGURATION
$config = Add-AzureHDInsightScriptAction -Config $config -Name "Install Spark" -ClusterRoleCollection HeadNode -Urin https://hdiconfigactions.blob.core.windows.net/sparkconfigactionv02/spark-installer-v02.ps1

C#:

// ADD THE SCRIPT ACTION TO INSTALL SPARK
clusterInfo.ConfigActions.Add(new ScriptAction(
  "Install Spark", // Name of the config action
  new ClusterNodeType[] { ClusterNodeType.HeadNode }, // List of nodes to install Spark on
  new Uri("https://hdiconfigactions.blob.core.windows.net/sparkconfigactionv02/spark-installer-v02.ps1"), // Location of the script to install Spark
  null //because the script used does not require any parameters.
));

然后您可以 RDP 进入头节点并使用 spark-shell 运行或使用 spark-submit 运行作业。我不确定如何将 spark 作业而不是 rdp 运行到头节点,但这是另一个问题。

【讨论】:

  • 不幸的是,在我需要它的时候,还没有适用于 Azure 的 Spark 安装程序。但很高兴听到这现在可以在 Azure 上实现!我接受并赞成您的回答,因为这对任何想在 Azure 上使用 Spark 并偶然发现此页面的人都有很大帮助。
  • 微软的下一步应该是提供一些远程提交 Spark 作业的方法,而无需手动 RDP 主节点。
  • 我完全同意。我目前正在努力让 oozie 在集群上安排 spark 作业,不确定此时是否可能有多难或是否可行,但可能是解决这个问题的好方法……但有点离题。
  • 已经有一个持续的建议here。如果您能对这个想法进行投票并让 Microsoft 开发人员意识到这一需求,那就太好了。
【解决方案2】:

我也向 Azure 的人提出了同样的问题。以下是他们的解决方案:

“主题的两个问题:1.我们如何在没有“远程到...”的情况下提交集群外的工作 - Tao Li

目前不支持此功能。一种解决方法是自己构建作业提交 Web 服务:

  1. 创建将使用 Spark API 在集群上启动作业的 Scala Web 服务。
  2. 在与群集相同的 VNet 内的 VM 中托管此 Web 服务。
  3. 通过某种身份验证方案向外部公开 Web 服务端点。您也可以使用中间的 map reduce 作业,不过会花费更长的时间。

【讨论】:

    【解决方案3】:

    您可以考虑使用 Brisk (https://brisk.elastatools.com),它在 Azure 上提供 Spark 作为预配服务(提供支持)。有一个免费层,它允许您使用 wasb://path/to/files 访问 blob 存储,就像 HDInsight 一样。

    它不在 YARN 上;相反,它是 Spark 的轻量级和面向 Azure 的发行版。

    免责声明:我从事该项目!

    祝你好运,

    安迪

    【讨论】:

    • 谢谢,这似乎是一个非常有价值的解决方案,因为似乎没有其他方法可以让 Spark 开箱即用地在 Azure 上运行,而无需自己进行大量配置工作。
    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多