2017-07-22 4 views
1

setMaster("local")でコンパイルしたスパークジョブ(2.2.0)をspark-submit --master yarn --deploy-mode clusterで送信するとどうなりますか?明示的なsetMaster( "local")を持つスパークジョブ、YARNでスパーク送信に渡されました

私はこれを試しました。ジョブはパッケージ化され、ローカルではなくYARNクラスタで実行されたように見えました。

  • なぜこの作業を行います。私は明確ではないよ何

    ?ドキュメントによれば、SparkConfに設定したものは、コマンドラインから渡されたものよりも明示的に優先されるか、​​(https://spark.apache.org/docs/latest/configuration.html参照)より優先されます。私はSparkSession.getBuilderを使用しているのでこれは違うのですか?

  • setMaster("local")をコードから除外して除外した場合の影響はそれほどありませんか?私が見ているのは、クラスタリソースを適切に使用するのではなく、クラスタ内でローカルモードで実行されているジョブのようなものなのだろうかと思います。

答えて

3

あなたのアプリケーションをYarnに提出するのは、SparkConf.setMasterより前です。

--master yarn --deploy-mode clusterを使用すると、Sparkはローカルマシンでmainメソッドを実行し、Yarで実行するようにjarファイルをアップロードします。糸はSparkドライバa.k.aを実行するためのアプリケーションマスタとしてコンテナを割り当てます。 SparkConf.setMaster("local")はYarnコンテナ内で実行され、ローカルモードで動作するSparkContextが作成され、Yarnクラスターリソースは使用されません。

コードにmasterを設定しないことをお勧めします。コマンドライン--masterまたはMASTERのenvを使用して、Sparkマスタを指定してください。

+0

ありがとう、これは私が探していた答えです。これは混乱を招く恐れがあります:Sparkがローカルモードで動作している場合は、YARNアプリケーションマネージャ内でローカルモードであることがすぐに分かりません。 – wrschneider

1

私はsetMaster(「ローカル」)でコンパイルされたスパークジョブ(2.2.0)を持っている場合、私は火花提出--master糸--deployモードクラスタ

でそのジョブを送信する場合、何が起こりますか

setMasterが最も優先度が高く、他のオプションは除外されています。

私の推薦:(あなたは私が間違っている私を説得しない限り、 - の感触が挑戦:))これを使用しないでください

私は早期かつ頻繁に​​を使用しての強力な支持者だ理由です。それはデフォルトでlocal[*]になり、その仕事はとてもうまくいっています。最近のSparkのバージョンでは、見栄えの良いアプリケーション名(別名appName)が追加されていますので、設定する必要はありません(または...しないでください...ハードコア)。

Spark SQLがSparkのすべての機能のエントリポイントであるSpark 2.2日を前提としている場合は、常にSparkSessionで開始する必要があります(SparkConfまたはSparkContextが低すぎると忘れてしまいます)。


あなたのIDE(例えばのIntelliJ IDEA)内でアプリケーションを実行する場合、私はあなたがスパークアプリケーションでsetMasterを持つことができるときに承知している唯一の理由です。 setMasterがなければ、アプリケーションを実行することはできません。

回避策は、ソース(sbt)にsrc/test/scalaを使用し、メインアプリケーションを実行するsetMasterのランチャーを使用することです。

+0

src/test/scalaでランチャーを使用する方法の例を提供できますか? –

関連する問題