2016-09-16 10 views
0

현재 Apache Oozie를 사용하여 CDH 5.8에서 Spark Jobs를 실행하는 방법을 배우고 있지만 문제를 발견 한 것 같습니다.Oozie와 Hue가있는 Uber Jar를 통해 Spark Job 실행

IntelliJ> 빌드 아티팩트 (Uber JAR/Fat JAR)를 사용하여 스파크 작업을 컴파일 한 다음 나중에 매니페스트 파일을 제거합니다. 그런 다음 JAR을 실행하기 위해 spark-submit을 실행합니다. 그것은 잘 작동합니다.

하지만 Oozie와 Spark Action을 지정했을 때.

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 폴더에 같은 jar 파일을 넣었을 때 위와 같은 방법으로 사용하십시오. 작업이 10 분 동안 실행되고 자체가 죽었으며 오류 코드 또는 메시지가 표시되지 않았습니다.
  2. 색조에서 Spark Example 작업을 실행했습니다. 나는 다음과 같은 메시지
  3. 을 가지고

오류 :

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을 사용하는 경우에도 동일한 작업을 수행해야합니까?

답변

0

ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain을 해결하려면 oozie 시스템 lib 속성을 활성화해야합니다.

oozie.use.system.libpath=true. 

이것은 Hive, Pig, Sqoop, Spark 등의 작업을 실행하는 데 필요합니다.

스파크 응용 프로그램 병을 컴파일하고 빌드하여 oozie 응용 프로그램 경로 아래의 lib 디렉토리에 넣을 수 있습니다. Oozie 응용 프로그램 경로는 workflow.xml 파일을 저장하고 참조하는 HDFS의 디렉토리입니다.

희망이 도움이 될 것입니다. 감사.

+0

응답 해 주셔서 감사합니다!하지만 Oozie Yarn Job Launcher를 사용해 보았습니다.하지만 오류 메시지 [Main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster : MRAppMaster를 시작하는 중에 오류가 발생했습니다. java. lang.NoSuchMethodError : org.apache.hadoop.yarn.webapp.util.WebAppUtils.getProxyHostsAndPortsForAmFilter'. 왜 그런가? –

+0

이것은 원래 게시 한 것과 다른 이슈입니다. 원사 작업의'stdout' 로그에서'WebAppUtils' 클래스가 들어있는 jar 파일을 찾아야합니다.이 클래스에는 클래스가 두 가지있을 것입니다. 하나의 메소드 (메소드가없는 부정확 한 하나)를 제거 할 수 있지만, jar의 소스를 찾아 영구적으로 수정해야합니다. 감사, – YoungHobbit