2015-08-17 2 views
5

Я написал приложение в Scala, которое использует Spark.
Приложение состоит из двух модулей - модуля App, который содержит классы с разной логикой и модуль Env, который содержит код инициализации среды и системы, а также служебные функции.
Точка входа находится в Env, а после инициализации она создает класс в App (согласно args, используя Class.forName) и выполняется логика.
Модули экспортируются в 2 разных JAR (а именно, env.jar и app.jar).Каков правильный способ запуска приложения Spark в YARN с помощью Oozie (с оттенком)?

Когда я запускаю приложение локально, он выполняется хорошо. Следующим шагом будет развертывание приложения на моих серверах. Я использую CDH 5.4 для Cloudera.

Я использовал Hue для создания нового рабочего процесса Oozie с задачей Спарк со следующими параметрами:

  • Искра Мастер: yarn
  • Режим: cluster
  • App Название: myApp
  • Банки/py файлы: lib/env.jar,lib/app.jar
  • Основной класс: env.Main (в модуле Env)
  • Аргументы: app.AggBlock1Task

Затем я поместил 2 баночки в папке lib в папке рабочего процесса (/user/hue/oozie/workspaces/hue-oozie-1439807802.48).

При запуске рабочего процесса, он бросает FileNotFoundException и приложение не выполняет:

java.io.FileNotFoundException: File file:/cloudera/yarn/nm/usercache/danny/appcache/application_1439823995861_0029/container_1439823995861_0029_01_000001/lib/app.jar,lib/env.jar does not exist 

Однако, когда я уезжаю параметры мастер Спарк и режим пуст, все работает нормально, но когда я проверяю spark.master программно он установлен в local[*], а не yarn. Кроме того, при наблюдении бревна, я столкнулся с этим при конфигурации Спарк действия Oozie:

--master 
null 
--name 
myApp 
--class 
env.Main 
--verbose 
lib/env.jar,lib/app.jar 
app.AggBlock1Task 

Я предполагаю, что я не делаю это правильно - не устанавливать мастер Спарк и параметры режима и запуска приложения с spark.master набором для local[*]. Насколько я понимаю, создание SparkConf объекта в приложении необходимо установить spark.master свойства, что я указать в Oozie (в данном случае yarn), но он просто не работает, когда я делаю это ..

Есть ли что-то Я делаю не так или нет?
Любая помощь будет высоко оценена!

ответ

2

Мне удалось решить проблему, поставив два JAR в каталог пользователя /user/danny/app/ и указав параметр Jar/py files как ${nameNode}/user/danny/app/env.jar. Запуск он вызвал выброс ClassNotFoundException, хотя JAR был расположен в той же папке в HDFS. Чтобы обойти это, мне пришлось перейти к настройкам и добавить в список опций следующее: --jars ${nameNode}/user/danny/app/app.jar.Этот способ также ссылается на модуль App, и приложение успешно работает.

+1

Приятная находка, это сложно, посмотрим на добавление лучшей помощи в пользовательском интерфейсе! – Romain