0

開発にはどのようにPlay FrameworkとSparkクラスタを使用しますか?distributed Spark and Play Frameworkの使い方は?

私は[*]

ローカルに設定マスタと任意のスパークアプリを実行することができます。しかし、私は、クラスタ上で実行するように設定した場合、私はこの取得:

play.api.Application$$anon$1: Execution exception[[SparkException: Job aborted due to stage failure: Task 1 in stage 0.0 failed 4 times, most recent failure: Lost task 1.3 in stage 0.0 (TID 5, 192.168.1.239): java.lang.ClassNotFoundException: controllers.Application$$anonfun$test$1$$anonfun$2 
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:348) 
at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:67) 
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620) 
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) 
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018) 
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) 
at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75) 
at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114) 
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66) 
at org.apache.spark.scheduler.Task.run(Task.scala:86) 
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

を私は問題があることを理解分散ワーカーには私のアプリケーションクラスがロードされていないことがわかります。

Lightbend ActivatorでSparkをどのように使用しますか?コマンドラインからPlay Frameworkアプリを送信するのは意味がありません。Playフレームワークアプリを実行すると、ブラウザで結果を確認できるようになります。

私はLightbendサンプルのSparkアプリケーションをダウンロードし、Spark Masterにはローカル[*]を使用します。私がspark:// master:portのURLに切り替えると、それらはすべて同じ問題でクラッシュします。

誰でもこれを解決する方法を知っていますか?前もって感謝します。

+0

ダウンロードした場所からリポジトリを提供してください。 –

+0

こんにちは@ShivanshSrivastava:最新のLightbend Activatorから、コマンドアクティベータuiにいくつかのサンプルSparkアプリケーションが示されています。私は1つずつ走って、その情報源を読んでいます。私が1つを見逃していなければ、すべてSparkマスターのためにローカル[*]を使用します。 –

答えて

2

申し訳ありません。これは右のin the documentationで説明されています。

「Advanced Dependency Management」セクションでは、マスターがJARをスレーブワーカーに配布する方法について説明します。

そこから、 - jarsコマンドラインオプションをSparkContextの.addJarに変換することができました。

アクティベータdistを使用してjarを生成すると、target/scala-2.versionの下にあり、addJars経由でそのファイルへのパスを追加します。

完璧に動作します。

問題が発生するのは、同じJVMを使用してファイルを変更したときにPlayがアプリケーションを再起動するため、1つのJVMに2つのコンテキストがあるというSparkエラーが発生します。そのため、変更をテストするには、アプリケーションを再起動する必要があります。プレイの下にあるスパークのパワーを考慮した小さな迷惑。乾杯!

+0

こんにちはホセ、私たちはspark-submitを使用していますが、target/scala-xxのjarファイルで-jarsを追加する必要がありますか? 私はまだ理解していないので、これについてもっと話していただけますか、ありがとう。 –