0

Как вы используете Play Framework и кластер Spark в разработке?Как использовать распределенную платформу Spark и Play?

я могу запустить любой Спарк приложение с мастером, установленным местный [*]

Но если я установить его для работы на кластере, я получаю это:

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) 

Я понимаю, проблема в том, что у распределенных рабочих нет загруженных классов приложений.

Итак, как вы используете Spark под активатором Lightbend? Не имеет смысла представлять приложение Play Framework через командную строку, оно должно запускаться под Play, чтобы вы могли видеть результаты в браузере.

Я загрузил образцы Spark Lightbend, и они используют локальные [*] для Spark Master. Если я переключусь на искру: // master: port url, все они сбой с той же проблемой.

Кто-нибудь знает, как это исправить? Заранее спасибо.

+0

Укажите, пожалуйста, репозиторий, откуда вы скачали? –

+0

Привет @ShivanshSrivastava: из последнего активатора Lightbend активатор команд ui показывает несколько образцов приложений Spark. Я побежал один за другим и читал их источники. Если я не пропустил один, все используют локальные [*] для мастера Spark. –

ответ

2

Прошу прощения, ребята. Это объясняется правильно in the documentation.

В разделе «Расширенное управление зависимостями» объясняется, как мастер будет распространять JAR на рабовладельцев.

Оттуда речь шла о переводе опции командной строки -jars на .addJar на SparkContext.

Создайте банку с помощью активатора dist, она будет находиться под целью/scala-2.version, а затем добавит путь к этому файлу через addJars.

Работает отлично сейчас.

Только проблема в том, что в процессе разработки Play перезапустит приложение при смене файлов с использованием той же JVM, которая будет генерировать ошибку Spark, имеющую два контекста в одной JVM. Поэтому вам нужно перезапустить приложение для проверки изменений. Незначительная неприятность, учитывая силу Spark под Play. Ура!

+0

Привет, Хосе, мы имеем в виду, что мы используем spark-submit, мы должны добавить jars-файл с файлом jar из target/scala-xx? Не могли бы вы рассказать об этом больше, потому что я до сих пор не понимаю, спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^