【问题标题】:how to submit to spark for many jobs in one application如何在一个应用程序中提交多个工作的火花
【发布时间】:2019-08-01 20:17:10
【问题描述】:

我有一个使用 spark 2.1(scala) 的报表统计项目,它是这样工作的:

object PtStatsDayApp extends App {
    Stats A...
    Stats B...
    Stats C...
     .....     
}

有人将许多统计计算(大部分不相关)放在一个类中并使用 shell 提交。我发现它有两个问题:

  • 如果一个统计数据卡住,那么下面的其他统计数据将无法运行

  • 如果一个统计失败,那么应用程序将从头开始重新运行

    我有两个重构解决方案:

  • 将每个统计数据放在一个类中,但需要更多脚本。这个解决方案是否会因为提交这么多而产生很多开销?
  • 并行运行这些统计信息。这个问题是资源压力,还是 spark 可以适当地处理它?

还有其他想法或最佳实践吗?谢谢

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    有几个像 Airflow 这样的免费 3d 派对 Spark 调度程序,但我建议使用 Spark Launcher API 并以编程方式编写启动逻辑。使用此 API,您可以并行、顺序或任何您想要的方式运行您的作业。

    文档链接:https://spark.apache.org/docs/2.3.0/api/java/index.html?org/apache/spark/launcher/package-summary.html

    并行运行作业的效率主要取决于您的 Spark 集群配置。一般来说,Spark 支持此类工作负载。

    【讨论】:

      【解决方案2】:

      首先您可以将调度程序模式设置为FAIR。然后,您可以使用并行集合在多线程驱动程序上同时启动 Spark 作业。 一个并行集合,比方说......您的十个Stats 查询的并行序列ParSeq 可以使用foreach 一个一个地触发每个Stats 查询。这取决于驱动程序有多少内核以及您可以同时使用多少线程。默认情况下,全局执行上下文有那么多线程。

      查看这些帖子,它们是使用并行集合启动并发 Spark 作业的示例。

      Cache and Query a Dataset In Parallel Using Spark

      Launching Apache Spark SQL jobs from multi-threaded driver

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-26
        • 1970-01-01
        • 1970-01-01
        • 2016-10-12
        • 2017-02-26
        相关资源
        最近更新 更多