2017-03-06 6 views
0

現在、2つのスパークアプリケーションを展開するようになっており、アプリケーションごとにコアとエグゼキュータを制限したいと考えています。スパークアプリケーションが1つのコアでのみ動作しない

ここで問題となるのは、この厳密な設定では、1つのストリーミングアプリケーションが動作し、もう1つは動作しないということです。 RUNNINGと継続的にログに以下のメッセージを出力します:動作しないアプリケーションでは、状態のまま、私は次のように設定を変更した場合

17/03/06 10:31:50 INFO JobScheduler: Added jobs for time 1488814310000 ms 
17/03/06 10:31:55 INFO JobScheduler: Added jobs for time 1488814315000 ms 

驚くべきことに、今働いていなかった同じアプリケーションが問題なく進みます。

spark.executor.cores=3 
spark.driver.cores=1 
spark.cores.max=3 
spark.executor.instances=3 

注:アプリケーションは、私はこのようにいくつかのストリーミングアプリケーションが他よりもコアを必要とすることが表示されます3.

の最小値を使用する理由です値2では動作しません。私の質問は、アプリケーションが必要とするリソースの量を決定するものです。 1つのアプリケーションを3つのコアで実行すると同時に、1つのコアで実行できないのはなぜですか?

答えて

1

使用しているレシーバーの数はいくつですか?受信機とSparkジョブを実行するのに十分なコアがあることを確認する必要があります。

DStreamは1つの受信機に関連付けられています。読取り並列性を達成するために、複数の受信機、すなわち複数のDストリームを作成する必要がある。レシーバはエグゼキュータ内で実行されます。 1つのコアを占有します。受信機スロットを予約した後に処理するのに十分なコアがあることを確認します。つまり、spark.cores.maxは受信機スロットを考慮する必要があります。レシーバは、エグゼキュータにラウンドロビン方式で割り当てられます。私は1つの受信機のみを使用し

http://spark.apache.org/docs/latest/streaming-programming-guide.html#important-points-to-remember

+0

。 ; ' 基本的には、それ以降の ' JavaReceiverInputDStream 結果= MQTTUtils.createStream(JSSC、brokerUrl、mqttTopic、クライアントID、 \t \t \t \tユーザ名、パスワード、偽):実は私はこの命令を使用してMQTTと直接ストリームを作成します私は、ストリームデータを取得するために次の行を使用して、さらに分析を行います。 'JavaDStream ライン= results.flatMap(新しいFlatMapFunction <文字列、文字列>(){ \t \t \t公共イテレータコール(列X){ \t \t \t \t戻り値Arrays.asList(x).iterator(); \t \t \t} \t \t}); 'あなたはスパークUIを見て、エグゼキュータ・ページに無料のコードを確認することができます –

+0

。空きコアがない場合は、実行中のタスクを確認してここに投稿してください。 – zsxwing

+0

私は合計50のコアと13を使用しています。 –

関連する問題