2016-08-11 5 views
1

SparkジョブをREST APIで実行したいので、Scala for Sparkを使用したいと思います。私はSpringフレームワークを持つScalaプロジェクトと混合Javaの&を持っています。私はSparkContextを作成し、REST APIによっていくつかの仕事をするScalaメソッドを呼び出すことができます。この問題は、ローカルではなくマスターリモートを設定するときに発生します。Spring RESTfulサービスからのSparkジョブの実行

val conf = new SparkConf().setAppName("App").setMaster("local") 
val sc = new SparkContext(conf) 

java.lang.ClassNotFoundExceptionを引き起こし

罰金ですが、

val conf = new SparkConf().setAppName("App").setMaster(" spark://10.122.221.164:7077") 
val sc = new SparkContext(conf) 
。私がこれまでに見つけることができる

ソリューションがfat-jarファイルを作成し、conf.setJars(...)を行う、またはProcessBuilderのようなものを経由して​​スクリプトを使用しています。

私の現在の設定では、Tomcatなどで実行するwarファイルにパックされているSpark Scalaコードを含む唯一のSpringプロジェクトしかないので、fat-jarはありません。私は、Springプロジェクトと、それぞれがfat-jarとしてパックされたいくつかの別々のScalaアプリケーションを持つことは望ましくありません。シンプルで合理的なアーキテクチャをどうやって考え出すことができますか?

+0

なぜMavenを使用してpom.xmlに依存関係を追加しないのですか?私はSpringとSparkを一緒に使ってきました。試してみてください。 – Dip

+0

@DipすでにMavenを使用しています。私は、脂肪の瓶を構築するために 'mvn package'を使うことができますが、私はなぜこれらのSpringプロジェクトとSparkドライバアプリを分けなければならないのか分かりません。 – groove

答えて

0

ClassNotFoundExceptionを与えるクラスはどれですか? Sparkアプリケーションはそのクラスに依存しており、Sparkアプリケーションと共にパッケージ化する必要があることは明らかです。

使用可能なすべてのjarファイルがあるため、ローカルで動作しますが、リモートの場合、依存関係jarをドライバ/エグゼキュータに転送する必要があります。

spark-submitを実行すると、 - jarsを使用して指定された依存関係ジャーが転送されることがわかります。

SparkConf.setJarsを使用して、uber jarを作成したり、依存関係jarを指定することができます。

Maven Shadeプラグインを使用して、uber jarを作成し、バンドルする必要があるjarsだけを指定できます。

また、SparkLauncherを使用してSparkアプリケーションを起動しないでください。

+0

SparkContextをSpring Webアプリケーションのメソッドとして呼び出す方法は、ローカルに設定されていない場合はありません。私がSparkLauncherを使用しても、私はSparkアプリケーション用のファットジャーを作成する必要があるので、2つの異なるプロジェクトが必要です。私はMaven Assemblyプラグインを使用していますが、Maven Shadeに似ていると思います。 – groove

+0

sparkアプリケーションを提出する唯一の方法は、spark-submitまたはSparkLauncherです。 SparkConf/SparkContextは、アプリケーションを起動し、sparkアプリケーションを起動しないように初期化します。はい、fat jarを作成するか依存関係jarを指定する必要があります。 –

関連する問題