Spark(1.6.1)スタンドアロンマスターを使用して、同じsparkマスターで複数のアプリケーションを実行する必要があります。最初のアプリケーションの後に送信されたすべてのアプリケーション、常に「WAIT」状態を保持し続けます。また、実行中の1つはワーカーのすべてのコアの合計を保持します。すでにSPARK_EXECUTOR_CORES
を使用して制限しようとしましたが、実行中のyarn configは「スタンドアロンマスター」です。多くのワーカーを実行してみました同じマスター上にありますが、最初に送信されたアプリケーションがすべてのワーカーを消費するたびに。
sparkスタンドアロンクラスターでも同じ問題が発生していました。
私が得たのは、どういうわけか、1つのジョブにすべてのリソースを利用しているということです。他のジョブを実行するためのスペースになるように、リソースを定義する必要があります。
以下は、sparkジョブを送信するために使用しているコマンドです。
bin/spark-submit --class classname --master spark://hjvm1:6066 --deploy-mode cluster --driver-memory 500M --conf spark.executor.memory=1g --conf spark.cores.max=1 /data/test.jar
Sparkスタンドアロンクラスターで複数のジョブを並行して実行するための重要なパラメーターはspark.cores.max
。ご了承ください spark.executor.instances
、num-executors
およびspark.executor.cores
だけでは、Sparkスタンドアロンでこれを達成することはできません。単一のアクティブなジョブを除くすべてのジョブは、WAITING
ステータスでスタックします。
スタンドアロンクラスターモードは現在、アプリケーション間で単純なFIFOスケジューラーのみをサポートします。ただし、複数の同時ユーザーを許可するために、各アプリケーションが使用するリソースの最大数を制御できます。デフォルトでは、取得されます。クラスター内のすべてのコア。これは、一度に1つのアプリケーションを実行する場合にのみ意味があります。spark.cores.maxを設定することでコアの数を制限できます。
1つのサーバーですべてのワーカーを実行し、クラスターをシミュレートしようとしていると想定しています。この仮定の理由は、そうでない場合は、1つのワーカーとマスターを使用してスタンドアロンSparkクラスターを実行できるためです。
エグゼキュータコアは、通常のコアとはまったく異なるものです。エグゼキュータの数を設定するには、前に述べたようにYARNをオンにする必要があります。エグゼキュータコアは、エグゼキュータが実行できる同時タスクの数です(hdfsを使用する場合は、これを5未満に保つことをお勧めします)[ 1 ]。
ワーカーを実行するために制限するコアの数は「CPUコア」です。これらは、Spark 1.6.1 [ 2 ]の構成で指定されます。Sparkには、金額を設定するオプションがありますスレーブの起動時のCPUコアの数[]。これは-c CORES、-coresCORESで発生します。これはSparkマシンで使用(デフォルト:すべて使用可能)、ワーカーでのみ使用。
Sparkを開始するコマンドは次のようになります:
./sbin/start-all.sh --cores 2
お役に立てれば
構成設定で、この行を「./conf/spark-env.sh」このファイルに追加します。
export SPARK_MASTER_OPTS = "-Dspark.deploy.defaultCores = 1"
マスターの最大コア数は1に制限されます。複数のsparkアプリケーションが実行されている場合、マスターには1つのコアのみが使用されます。次に、ワーカーの数を定義し、ワーカーに設定を与えます。
export SPARK_WORKER_OPTS = "-Dspark.deploy.defaultCores = 1"
その場合、各ワーカーにも1つのコアがあります。 これは構成設定ですべてのワーカーに設定する必要があることに注意してください。