当前位置: 首页 > 知识库问答 >
问题:

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

洪经义
2023-03-14

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

从spark的官方站点https://spark.apache.org/docs/latest/job-scheduling.html可以看出这是可行的...

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

但是,您可能已经注意到,在Spark中的并发作业执行中,这个类似的问题没有被接受的答案,最受欢迎的答案以以下内容开头

  1. 大家都知道不是在星火的“精神”
  2. 谁在乎星火的精神是什么?这实际上没有任何意义

以前有人用过这样的东西吗?你非得做什么特别的事吗?在我浪费大量工作时间制作原型之前,我只是想要一些指示。我将非常感谢任何帮助!

共有1个答案

苗盛
2023-03-14

spark上下文是线程安全的,因此可以从多个线程并行调用它。(我正在制作中做)

需要注意的一件事是限制正在运行的线程数量,因为:
1。执行器内存在所有线程之间共享,您可能会获得OOM或不断地从缓存中交换内存
2。cpu是有限的,所以任务比核心多不会有任何改进

 类似资料:
  • 我试图在远程节点上运行selenium网格代码,但它总是引发异常。 集线器: 它会听192.168.1.106:4444 节点: 它将在192.168.1.132:5566收听 Java代码: 节点日志: 操作系统:Fedora 23,Firefox版本50.1.0,selenium独立服务器3.0.1

  • 我有一个工作正常的GUI类,但是我在那个GUI类中有一个按钮,应该是从另一个类打开一个新的GUI... 然而,当调用新的GUI类(newGui)时,它只是一个透明窗口。这是因为两个GUI不能同时运行吗? 我现在正试图以线程的形式打开新的GUI,但我不知道该怎么做! 公开无效运行(); 这是我的尝试,但不出所料,这没有成功。 有什么帮助吗? 谢谢

  • 我有一份spark流媒体工作,我正试图由spark-k8运营商提交。我始终保持重启策略。但是,手动删除驱动程序时,驱动程序不会重新启动。我的yaml: Spark版本:2.4.5 apiVersion:“sparkoperator.k8s.io/v1beta2” 我遵循的步骤: 通过kubectl apply-f示例/spark测试创建资源。亚马尔。Pod创建成功。手动删除驱动程序。 预期行为:将

  • 我有一个Spring Boot Batch作业,有两个主要步骤,第一个从电子表格中读取一堆行。第二个写入数据库。现在,它被设置为串行写入数据库 问题是体积太大。因为没有理由维持任何秩序,我希望有多个作家。我试过这个: 但我得到了一个。 我喜欢这种方法,但我怀疑我必须遵循一些非常复杂的Spring Boot方法。做多个作家的最佳方法是什么? 谢谢,樵夫

  • 我一直在尝试写一些java应用程序。这个应用程序想要运行的是处理一个文本文件。 但是,输入文本文件很大(超过200MB),我尝试将200MB拆分为四个拆分文件(每个50MB) 所以,每一个都只需要0.5秒,但是用这种线性运行,每一个也需要2秒。(worker1+0.5s,worker2+0.5s,worker3+0.5s,worker4)如果我可以同时运行4个线程,我预计这个应用程序只需要0.5秒

  • 我正在尝试使用 启动 的会话 我一直收到这个错误: (未知错误:DevToolsActivePort文件不存在)(从chrome位置/usr/lib/chrumbrowser/chrum浏览器启动的进程不再运行,因此ChromeDriver假设chrome已崩溃。)(驱动程序信息:ChromeDriver=71.0.3578.98,平台=Linux 4.15.0-45-generic x86_64