2016-12-13 73 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個數據庫連接。

相關問題