2015-08-17 31 views
5

Napisałem aplikację w Scali, która używa Sparka.
Aplikacja składa się z dwóch modułów - modułu App, który zawiera klasy z inną logiką oraz modułu Env, który zawiera kod inicjalizacji środowiska i systemu, a także funkcje użytkowe.
Punkt wejścia znajduje się w Env, a po inicjalizacji tworzy klasę w App (zgodnie z args, przy użyciu Class.forName) i logika jest wykonywana.
Moduły są eksportowane do 2 różnych JARów (mianowicie env.jar i app.jar).Jaki jest właściwy sposób uruchamiania aplikacji Spark na YARN przy użyciu Oozie (z Hue)?

Po uruchomieniu aplikacji lokalnie, działa dobrze. Następnym krokiem jest wdrożenie aplikacji na moich serwerach. Używam CDH 5.4 Cloudera.

użyłem Hue, aby utworzyć nowy Oozie przepływ pracy z zadaniem Spark z następującymi parametrami:

  • Spark Master: yarn
  • Mode: cluster
  • App nazwa: myApp
  • Słoiki/py pliki: lib/env.jar,lib/app.jar
  • Kategoria główna: env.Main (w module Env)
  • argumenty app.AggBlock1Task

Następnie umieszcza się 2 JAR w folderze lib w folderze przepływu pracy (/user/hue/oozie/workspaces/hue-oozie-1439807802.48).

Kiedy uruchomić przepływ pracy, to rzuca FileNotFoundException a aplikacja nie wykonuje:

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 

Jednak kiedy wychodzę parametry Master Spark i tryb pusty, to wszystko działa poprawnie, ale kiedy sprawdzić spark.master programowo jest ustawiony na local[*], a nie na yarn. Również, gdy obserwując dzienniki, natknąłem to pod konfiguracji działania Spark Oozie:

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

Przypuszczam nie robię to dobrze - nie ustawienie mistrza zapłonową i parametry trybu i uruchamiając aplikację z spark.master zestaw do local[*]. O ile mi zrozumieć, tworząc SparkConf obiektu w aplikacji należy ustawić właściwość spark.master aby cokolwiek określić w Oozie (w tym przypadku yarn), ale po prostu nie działa, gdy to zrobić ..

Czy istnieje coś Robię źle lub zaginęłam?
Każda pomoc będzie doceniona!

Odpowiedz

2

Udało mi się rozwiązać problem, umieszczając dwa pliki JAR w katalogu użytkownika /user/danny/app/ i określając parametr Jar/py files jako ${nameNode}/user/danny/app/env.jar. Uruchomienie go spowodowało wygenerowanie ClassNotFoundException, mimo że JAR znajdował się w tym samym folderze w HDFS. Aby obejść to, musiałem przejść do ustawień i dodać następujące opcje do listy opcji: --jars ${nameNode}/user/danny/app/app.jar.W ten sposób odwołuje się również moduł App i aplikacja działa poprawnie.

+1

Przyjemne znalezisko, to podchwytliwe, będzie wyglądało na dodanie lepszej pomocy w interfejsie użytkownika! – Romain