2016-12-13 76 views
4

我正在运行带有4个执行程序(每个1个内核)的Spark-Kafka Streaming作业。而kafka源主题有50个分区。在不增加Cores的情况下增加Spark执行程序的并行度

在流java程序的foreachpartition中,我连接到oracle并做了一些工作。 Apache DBCP2正用于连接池。

Spark-streaming程序正在与数据库建立4个连接 - 每个执行程序可能有1个连接。但是,我的期望是 - 因为有50个分区,应该有50个线程在运行,并且存在50个数据库连接。

如何在不增加内核数量的情况下增加并行度。

回答

3

你的期望是错的。一个核心是Spark命名法中的一个可用线程和一个可以在当时处理的分区。

4个“核心” - > 4个线程 - > 4个分区一致处理。

+0

这是否意味着我一次最多可以看到4个数据库连接? – AKC

0

在火花执行器中,每个核心进程一个接一个地分区(一次一个)。由于您有4个执行程序,每个只有1个内核,这意味着您一次只能同时处理4个分区。所以,如果你的卡夫卡有50个分区,你的火花集群需要运行13轮(每轮4个分区,50/4 = 12.5)来完成一个批处理作业。这也是为什么你只能看到4个数据库连接。

相关问题