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

标签 java multithreading scala apache-spark apache-spark-2.0

我想要使用 Spark 从大约 1500 个远程 Oracle 表中提取数据,并且我想要一个多线程应用程序,该应用程序可以为每个线程获取一个表,或者每个线程可能为 10 个表,然后启动一个 Spark 作业来读取它们的数据。各自的表。

来自 Spark 官方网站 https://spark.apache.org/docs/latest/job-scheduling.html很明显,这是可行的......

...cluster managers that Spark runs on provide facilities for scheduling across applications. Second, within each Spark application, multiple “jobs” (Spark actions) may be running concurrently if they were submitted by different threads. This is common if your application is serving requests over the network. Spark includes a fair scheduler to schedule resources within each SparkContext.

但是您可能已经在这篇文章中注意到了 Concurrent job Execution in Spark在这个类似的问题上没有被接受的答案,而得票最多的答案以

开头

This is not really in the spirit of Spark

  1. 每个人都知道这不符合 Spark 的“精神”
  2. 谁在乎Spark的精神是什么?这实际上并不意味着什么

以前有人做过这样的事情吗?你需要做什么特别的事情吗?只是想在我浪费大量工作时间进行原型(prototype)设计之前得到一些指导。我真的很感激任何帮助!

最佳答案

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

需要注意的一件事是限制正在运行的线程数量,因为:
1.执行器内存在所有线程之间共享,你可能会出现OOM或不断从缓存中换入换出内存
2. cpu是有限的,所以任务多于核心不会有任何改善

关于java - 从多线程驱动程序启动 Apache Spark SQL 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47842048/

相关文章:

java - 如何实现插入排序?

Java Rx Observable 方法 switchIfEmpty

multithreading - 原子更新以增加 Postgresql 中的整数

Java掷骰子游戏While循环随机数生成

使用 XStream 进行 Java XML 解析

python - 使用 Flask Web 应用程序监控实时数据流

java - 可靠地停止无响应的线程

angularjs - 无法让 sbt-mocha 正确查看 Angular webjar 模拟库

linux - 如何修复 SBT 崩溃 : java. lang.NumberFormatException : For input string: "0x100"?

Scala 最佳实践 : mapping 2D data