Spark Executor如何执行代码?它有多个正在运行的线程吗?如果是,它将打开多个JDBC连接以从RDBMS读取数据或向RDBMS写入数据吗?
Spark Executor 如何执行代码?
开源(包括 Apache Spark 项目)的美妙之处在于您可以查看代码并自己找到答案。这并不是说这是找到答案的最好也是唯一的方法,但我的可能不像代码本身那么清楚(相反的也可以是真的:))
它有多个线程在运行吗?
是的。请参阅此行,其中Executor创建了一个新TaskRunner的 Java Runnable(一个单独的线程)。那Runnable将在线程池上执行。
引用Spark 用于线程池的Java 的Executors.newCachedThreadPool:
创建一个线程池,根据需要创建新线程,但会在可用时重用先前构造的线程,并在需要时使用提供的 ThreadFactory 创建新线程。
如果是,它是否会打开多个 JDBC 连接以从 RDBMS 读/写数据?
我相信你已经知道答案了。是的,它会打开多个连接,这就是为什么您应该使用foreachPartition操作来 _“将函数f应用于此数据集的每个分区”。(同样适用于 RDD)和某种连接池。
| 归档时间: |
|
| 查看次数: |
4298 次 |
| 最近记录: |