2016-12-13 14 views
4

私は4人のエグゼキュータ(それぞれコアが1つ)でSpark-Kafka Streamingジョブを実行しています。カフカソーストピックには50のパーティションがありました。コアを増やさずにスパークエグゼキュータを増やす

ストリーミングJavaプログラムのforeachパーティションでは、私はOracleに接続して作業をしています。 Apache DBCP2が接続プールに使用されています。

スパークストリーミングプログラムがデータベースへの4つの接続を行っていますが、各エグゼキュータごとに1つの可能性があります。しかし、My Expectationは - 50個のパーティションがあるため、50個のスレッドが実行され、50個のデータベース接続が存在する必要があります。

コア数を増やすことなく並列度を上げる方法を教えてください。

答えて

3

あなたの期待は間違っています。 1つのコアは、Spark命名法で使用可能なスレッドと、その時点で処理できる1つのパーティションです。

4 "コア" - > 4スレッド - > 4パーティションが同時に処理されます。

+0

これは、一度に最大4つのデータベース接続を確認できますか? – AKC

0

spark executorでは、各コアがパーティションを1つずつ処理します(一度に1つずつ)。あなたは4人のエグゼキュータを持っており、それぞれコアが1つしかないので、同時に4つのパーティションを同時に処理することができます。したがって、Kafkaに50個のパーティションがある場合、バークジョブを終了するには、スパーククラスターを13回(各回4個のパーティション、50/4 = 12.5)実行する必要があります。それはまた、データベースへの4つの接続しか見ることができない理由です。