从多线程驱动程序启动Apache Spark SQL作业

问题描述 投票:2回答:4

我想使用Spark从大约1500个远程Oracle表中提取数据,并且我想拥有一个多线程应用程序,该应用程序每个线程或每个线程可以选择10个表,并启动spark作业以从各自的表中读取数据表。

从官方Spark网站https://spark.apache.org/docs/latest/job-scheduling.html可以正常运行...

... Spark运行于其上的集群管理器为跨应用程序调度提供了便利。其次,在每个Spark应用程序中,如果多个“作业”(Spark操作)是由不同的线程提交的,则它们可能同时运行。如果您的应用程序通过网络处理请求,则这很常见。 Spark包含一个公平的调度程序,用于调度每个SparkContext中的资源。

但是您可能已经在此SO帖子Concurrent job Execution in Spark中注意到,在该相似问题上没有被接受的答案,并且最受支持的答案以]开头>

这实际上不是Spark的精神

  1. 每个人都知道这不是Spark的“精神”
  • 谁在乎Spark的精神是什么?这实际上没有任何意义
  • 有人曾经得到过这样的工作吗?你有什么特别的事吗?在我浪费大量工作时间进行原型设计之前,只想提供一些建议。我真的很感谢任何帮助!

    我想用Spark从大约1500个远程Oracle表中提取数据,并且我想要一个多线程应用程序,该应用程序每个线程选择一个表,或者每个线程选择10个表并启动...

    java multithreading scala apache-spark apache-spark-2.0
    4个回答
    8
    投票
    spark上下文是线程安全的,因此可以从多个线程中并行调用它。 (我正在生产中)

    3
    投票
    您不需要在一个多线程应用程序中提交作业(尽管我没有看到您不能提交作业的原因)。只需将您的工作作为单独的流程提交即可。拥有一个脚本,可以一次提交所有这些作业,然后将流程推送到后台,或者以yarn-cluster模式提交。您的调度程序(纱线,mesos,spark群集)将仅等待您的某些作业,因为它没有空间让所有调度程序根据内存和/或cpu可用性同时运行。

    2
    投票
    同意@lev,我一直在想这个问题,所以我写了一个简单的小代码来确保它能正常工作,请注意!!为了控制每个驱动程序的工作者人数,您需要通过合并限制数据帧/集。

    0
    投票
    在这种情况下,如果每个spark会话有多个踏步,如果一个线程有问题并关闭spark会话,则该会话将没有其他线程的值!
    © www.soinside.com 2019 - 2024. All rights reserved.