Napísal som žiadosť v Scale, ktorá používa Spark.
Aplikácia pozostáva z dvoch modulov - App
modul, ktorý obsahuje triedy s odlišnou logikou, a Env
modul, ktorý obsahuje inicializačný kód prostredia a systému, ako aj pomocné funkcie.
Vstupný bod sa nachádza v Env
a po inicializácii vytvorí triedu v App
(podľa args
, použitím Class.forName
) a logika je vykonaná.
Moduly sa exportujú do 2 rôznych JAR (konkrétne: env.jar
a app.jar
).
Keď spustím aplikáciu lokálne, spustí sa dobre. Ďalším krokom je nasadenie aplikácie na moje servery. Používam CloudH's CDH 5.4.
Použil som odtieň Hue na vytvorenie nového pracovného postupu Oozie s úlohou Spark s nasledujúcimi parametrami:
- Majster iskier:
yarn
- Mode:
cluster
- Názov aplikácie:
myApp
- Jar / py súbory:
lib/env.jar,lib/app.jar
- Hlavná trieda:
env.Main
(vEnv
module) - argumenty:
app.AggBlock1Task
Potom som umiestnil 2 JAR dovnútra lib
priečinok v priečinku pracovného toku (/user/hue/oozie/workspaces/hue-oozie-1439807802.48
).
Keď spustím pracovný postup, vyvolá to a FileNotFoundException
a aplikácia sa nespustí:
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
Keď však nechám parametre hlavného a režimu Spark prázdne, všetko funguje správne, ale keď skontrolujem spark.master
programovo je nastavený na local[*]
a nie yarn
, Pri pozorovaní protokolov som sa s tým stretol aj pri konfigurácii akcie Oozie Spark:
--master
null
--name
myApp
--class
env.Main
--verbose
lib/env.jar,lib/app.jar
app.AggBlock1Task
Predpokladám, že to nerobím správne - nenastavujem parametre hlavného a režimu Spark a nespúšťam aplikáciu spark.master
nastavený na local[*]
, Pokiaľ to chápem, vytvorenie SparkConf
objekt v aplikácii by mal nastaviť spark.master
majetok podľa toho, čo uvediem v Oozie (v tomto prípade yarn
), ale to jednoducho nefunguje, keď to urobím ..
Robím niečo zle alebo chýba?
Akákoľvek pomoc bude veľmi ocenená!
odpovede:
2 pre odpoveď č. 1Tento problém sa mi podarilo vyriešiť vložením dvoch JAR do adresára používateľa /user/danny/app/
a špecifikovanie Jar/py files
parameter ako ${nameNode}/user/danny/app/env.jar
, Jeho spustenie spôsobilo a ClassNotFoundException
byť hodený, aj keď JAR sa nachádzal v rovnakom priečinku v HDFS. Aby som to obišiel, musel som ísť do nastavení a do zoznamu možností pridať nasledovné: --jars ${nameNode}/user/danny/app/app.jar
, Týmto spôsobom App
modul je tiež referenčný a aplikácia beží úspešne.