【问题标题】:How to use the programmatic spark submit capability如何使用程序化 Spark 提交功能
【发布时间】:2016-09-11 15:02:41
【问题描述】:

最近有一个(2015 年春季)功能,显然是为了允许以编程方式提交 Spark 作业。

这是 JIRA https://issues.apache.org/jira/browse/SPARK-4924

但是,关于如何实际使用这些功能存在不确定性(我也算在内)。这是 jira 中的最后一个 cmets:

当要求该作品的实际作者进一步解释时,它是“查看 API 文档”。

“用户文档”是 Spark API 文档。

作者没有提供更多细节,显然认为整个问题是不言自明的。如果有人可以在这里连接点:特别是 - API 文档中描述了这个较新的 Spark 提交功能的位置 - 将不胜感激。

这是我正在寻找的一些信息-指向以下内容的指针:

  • spark api 新增了哪些功能
  • 我们如何使用它们
  • 任何示例/其他相关文档和/或代码

更新接受的答案中提到的SparkLauncher 确实会在微不足道的 (master=local[*]) 条件下启动一个简单的应用程序。它在实际集群上的可用性还有待观察。在链接代码中添加打印语句后:

println("启动..等待..") spark.waitFor()

我们确实看到了:

启动..等待..

这可能是向前迈出的一小步。当我转向真正的集群环境时,将更新这个问题。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    查看pull request的细节,似乎功能是由SparkLauncher类提供的,在API docs here中有描述。

    public class SparkLauncher extends Object

    Spark 应用程序的启动器。

    使用此类以编程方式启动 Spark 应用程序。班上 使用构建器模式允许客户端配置 Spark 应用程序并将其作为子进程启动。

    API 文档相当少,但我发现一篇博客文章给出了 worked example(代码也可在 GitHub repo 中找到)。我复制了以下示例的简化版本(未经测试),以防链接失效:

    import org.apache.spark.launcher.SparkLauncher
    
    object Launcher extends App {
      val spark = new SparkLauncher()
        .setSparkHome("/home/user/spark-1.4.0-bin-hadoop2.6")
        .setAppResource("/home/user/example-assembly-1.0.jar")
        .setMainClass("MySparkApp")
        .setMaster("local[*]")
        .launch();
      spark.waitFor();
    }
    

    另见:

    【讨论】:

    • 感谢您来到这里。您是否尝试过直接使用该类?它的使用在正确设置环境方面具有挑战性。通过阅读 JIRA,我了解到并发症可能已经减少。仅仅查看 API 文档没有会有帮助。我会在这里为你投票——因为你做了这么多的挖掘工作。
    • 更新了 OP 以进一步解释我在寻找什么。
    • 使用 SparkLauncher 查看您的更新。现在试试看。
    • 上述代码确实有效(请参阅对 OP 的更新)。颁奖。注意:随着工作在更重要的场景中的进展,我将继续添加信息。
    • PySpark 是否也提供此功能?
    猜你喜欢
    • 2017-11-27
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2017-08-16
    • 2021-02-12
    相关资源
    最近更新 更多