2017-03-09 10 views
0

우리 파이프 라인 중 하나에서 spark (java)를 사용하여 집계를 수행하고 있으며 oozie를 사용하여 조정합니다. 이 파이프 라인은 집계 된 데이터를 다음 행을 사용하여 ORC 파일에 씁니다.ozzie에서 하이브 컨텍스트를 사용하지 않는 스파크 작업

HiveContext hc = new HiveContext(sc); 
DataFrame modifiedFrame = hc.createDataFrame(aggregateddatainrdd, schema); 

modifiedFrame.write().format("org.apache.spark.sql.hive.orc").partitionBy("partition_column_name").save(output); 

는 oozie 작업의 점화 동작이 트리거됩니다 때 다음과 같은 예외를

Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SparkMain], main() threw exception, org.apache.hadoop.hive.shims.HadoopShims.isSecurityEnabled()Z java.lang.NoSuchMethodError: org.apache.hadoop.hive.shims.HadoopShims.isSecurityEnabled()Z

을 던져 그러나 같은 워크 플로를 여러 번 다시 실행 후 성공지고 있습니다.

실행 시간과 컴파일 시간 모두에 필요한 모든 병이 제자리에 있습니다.

이것은 첫 번째 스파크 앱이며 문제를 이해할 수 없습니다.

누군가가 문제를 더 잘 이해하고 해결할 수 있도록 도와 줄 수 있습니까?

답변

0

"the same is getting succeeded after rerunning the workflow multiple times"

는 컴파일처럼/클러스터를 실행하는 것보다 다른 버전에서 하둡 클라이언트와 스파크 작업을 번들로 소리; 결과적으로 CLASSPATH에 충돌하는 JAR이 있고 어떤 JAR이 먼저 선택되는지에 따라이 무작위로 으로 실패합니다.

확인하려면, (job_*******_****를 표시하지만, 원사 ID application_******_****을 의미한다) 작업 의 "외부 ID"를 얻을, 성공 하나 Oozie 작업 실패 하나의 작업을 선택하고 대한 YARN 로그를 검사 두 직업. Java CLASSPATH에서 JAR의 실제 순서에 차이가 있는지 확인해야합니다.

즉 실제로 그렇다면, 다음 true에 (스파크 드라이버) true

Oozie 활동에
  • 의 조합, 설정 특성 oozie.launcher.mapreduce.user.classpath.first 스파크 설정에서
  • 설정 특성 spark.yarn.user.classpath.first 시도 (집행자 용)

user.classpath.first 의미 ...!


충돌하는 JAR이 실제로 Hadoop 클라이언트가 아닌 Oozie ShareLib에있는 경우 작동하지 않을 수 있습니다. YARN의 관점에서 볼 때, Oozie는 "클라이언트"입니다. Oozie가 ShareLib에서 제공하는 것부터 Spark 작업에서 제공되는 것의 우선 순위를 설정할 수는 없습니다.

그런 경우 은 Java 프로젝트에 적절한 종속성을 사용하고 실행할 Hadoop 버전과 일치해야합니다. 이는 상식 일뿐입니다.

+0

감사합니다 삼손 당신이 언급 한 무엇이 의미가 있습니다. 그러나 나는 그 방향으로 디버깅을 시작했습니다. 그러나 원사 로그에서 의심의 여지가 있습니다. 클래스 경로와 관련하여 두 가지를 볼 수 있습니다. 상단에 java.class.path가 있습니다. 다른 하나는 ClassPath Elements이고, 하나는 spark에 의해로드 될 것입니까? –

+0

일치해야합니다 - 둘 다 Oozie 실행기 클래스의 디버그 추적입니다. –

+0

감사합니다. samson! 항아리 실행 순서에 따라 문제가 발생했습니다. oozie.launcher.mapreduce.user.classpath.first를 사용하여 우선 순위를 설정했습니다. –