Запустите Spark Job через Uber Jar с Oozie и Hue

В настоящее время я изучаю, как использовать Apache Oozie для запуска заданий Spark в CDH 5.8, но, похоже, обнаружил проблемы.

Я компилирую свою искровую работу с помощью IntelliJ> Build Artifact (в Uber JAR / Fat JAR), а затем удаляю его файл манифеста. Затем я запускаю spark-submit, чтобы запустить JAR. Работает нормально.

Но когда я указал Spark Action с Oozie. Я получаю следующую ошибку:

Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SparkMain], exception invoking main(), java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2199)
    at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:234)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2105)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2197)
    ... 9 more

job.properties:

oozie.use.system.libpath=false
security_enabled=False
dryrun=False
jobTracker=master.meshiang:8032
nameNode=hdfs://master.meshiang:8020

Мой рабочий процесс:

<workflow-app name="CSV" xmlns="uri:oozie:workflow:0.4">
    <start to="spark-2bab"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <action name="spark-2bab">
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <master>local[*]</master>
            <mode>client</mode>
            <name>MySpark</name>
              <class>ETL.CSVTransform</class>
            <jar>/user/meshiang/jar/Spark-GetData.jar</jar>
              <arg>work_id</arg>
              <arg>csv_table</arg>
              <arg>id/FirstName/Lastname</arg>
              <arg>/user/meshiang/csv/ST1471448595.csv</arg>
              <arg>,</arg>
        </spark>
        <ok to="End"/>
        <error to="Kill"/>
    </action>
    <end name="End"/>
</workflow-app>

Что я уже сделал:

  1. Когда я помещаю ту же банку в папку / lib рабочей области и использую ее так же, как указано выше. Задание выполнялось в течение 10 минут, само завершилось и не отображалось ни кода ошибки, ни сообщения.
  2. Я выполнил задание Spark Example в Hue. Я получил следующее сообщение

Ошибка:

JA018
Error Message   Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, localhost): java.lang.RuntimeException: Stream '/jars/oozie-examples.jar' was not found. at org.apache.spark.network.client.TransportResponseHandler.handle(TransportResponseHandler.java:219) at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:106) at org.apache.spark.network.server.TransportChannelHandler.channelRead0(Tr

Мои вопросы:

  1. Должен ли я компилировать только те классы, которые мне нужны, и использовать Oozie ShareLibs? Oozie поддерживает Uber JARS в целом?
  2. Если я использую Pig / Sqoop, нужно ли мне делать то же самое?

person Stefanie Tanujaya    schedule 16.09.2016    source источник


Ответы (1)


Чтобы решить ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain, вам нужно включить свойство библиотеки oozie system.

oozie.use.system.libpath=true.

Это необходимо для выполнения любых заданий Hive, Pig, Sqoop, Spark и т. Д.

Вы можете скомпилировать и построить jar-файлы приложений Spark и поместить их в каталог lib по пути к приложению oozie. Путь к приложению Oozie - это каталог в HDFS, в котором вы храните файл workflow.xml и ссылаетесь на него.

Надеюсь, это поможет. Спасибо.

person YoungHobbit    schedule 17.09.2016
comment
Спасибо за ответ! Я пробовал это, но Oozie Yarn Job Launcher, но он продолжает присылать мне ERROR [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Error starting MRAppMaster java.lang.NoSuchMethodError: org.apache.hadoop.yarn.webapp.util.WebAppUtils.getProxyHostsAndPortsForAmFilter. Есть идеи, почему? - person Stefanie Tanujaya; 19.09.2016
comment
Это другая проблема, чем вы изначально писали. Проверьте stdout журнал задания пряжи, вам нужно найти, какая банка содержит WebAppUtils класс, и будут две разные версии этого класса. Вы можете удалить одну (неправильную, не имеющую метода) банку, но вам также необходимо найти источник банки и исправить ее навсегда. Спасибо, - person YoungHobbit; 20.09.2016