복붙노트

[HADOOP] AWS EMR의 유로 오류

HADOOP

AWS EMR의 유로 오류

나는 전송을 위해 avro를 사용하는 spark-redshift (https://github.com/databricks/spark-redshift)를 사용하고있다.

Redshift에서 읽는 것은 괜찮습니다.

Caused by: java.lang.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter

아마존 EMR 4.1.0 (스파크 1.5.0)과 4.0.0 (스파크 1.4.1)을 사용해 보았습니다. 할 수 없다

import org.apache.avro.generic.GenericData.createDatumWriter

어느 쪽이든, 그냥

import org.apache.avro.generic.GenericData

나는 스칼라 껍질을 사용하고있다. 다운로드 여러 다른 avro-mapred 및 avro 항아리, 시도 설정

{"classification":"mapred-site","properties":{"mapreduce.job.user.classpath.first":"true"}},{"classification":"spark-env","properties":{"spark.executor.userClassPathFirst":"true","spark.driver.userClassPathFirst":"true"}}

그리고 그 항아리들을 클래스 패스를 촉발시키기 위해 추가했다. 어떻게 든 하둡 (EMR)을 조정해야 할 수도 있습니다.

누구에게이 종소리가 들리는가?

해결법

  1. ==============================

    1.스파크 - 레드 쉬프트 유지 보수 자.

    스파크 - 레드 쉬프트 유지 보수 자.

    다른 EMR 사용자는 spark-avro 라이브러리의 최신 버전을 사용할 때 비슷한 오류가 발생했습니다 (spark-redshift는 이에 의존 함). 요컨대, 문제는 EMR의 이전 버전 인 Avro가 spark-avro에서 요구하는 새 버전보다 우선 순위가 높다는 것입니다. https://github.com/databricks/spark-avro/issues/91에서 여기에보고 된 예외와 일치하는 것으로 보이는 한 사용자는 Avro JAR에 응용 프로그램 코드 (https://github.com/)를 삽입 할 것을 제안했습니다. databricks / spark-avro / issues / 91 # issuecomment-142543149

  2. ==============================

    2.EMR에서 조나단이 왔어. 문제의 일부는 Hadoop이 Avro 1.7.4에 종속되며 전체 Hadoop 클래스 경로가 EMR의 Spark 경로에 포함된다는 것입니다. Hadoop의 Avro 종속성을 1.7.7로 업그레이드하여 Spark의 Avro 종속성과 일치하도록하는 데 도움이 될 수 있습니다. 그러나이 작업이 다른 문제를 일으킬 수 있다는 점을 조금은 두려워하지만 어쨌든 시도해 볼 수는 있습니다.

    EMR에서 조나단이 왔어. 문제의 일부는 Hadoop이 Avro 1.7.4에 종속되며 전체 Hadoop 클래스 경로가 EMR의 Spark 경로에 포함된다는 것입니다. Hadoop의 Avro 종속성을 1.7.7로 업그레이드하여 Spark의 Avro 종속성과 일치하도록하는 데 도움이 될 수 있습니다. 그러나이 작업이 다른 문제를 일으킬 수 있다는 점을 조금은 두려워하지만 어쨌든 시도해 볼 수는 있습니다.

    BTW, 내가 당신의 예제 EMR 클러스터 구성을 발견 한 한 가지 문제는 "spark-env"구성 분류를 사용하는 반면 "spark-defaults"분류는 spark. {driver, executor} 설정에 적합한 분류입니다. userClassPathFirst. 나는 그 자체로 당신의 문제를 해결할 것이라고 확신하지 못합니다.

  3. ==============================

    3.참조 용 - Alex Nastetsky의 해결 방법

    참조 용 - Alex Nastetsky의 해결 방법

    마스터 노드에서 jar를 삭제한다.

    find / -name "*avro*jar" 2> /dev/null -print0 | xargs -0 -I file sudo rm file
    

    슬레이브 노드에서 jar를 삭제한다.

    yarn node -list | sed 's/ .*//g' | tail -n +3 | sed 's/:.*//g' | xargs -I node ssh node "find / -name "*avro*jar" 2> /dev/null -print0 | xargs -0 -I file sudo rm file
    

    Jonathan이 제안한 설정을 올바르게 설정하는 것도 가치가 있습니다.

  4. ==============================

    4.Avro와 관련된 EMR의 실행 시간 충돌 오류가 매우 일반적입니다. Avro는 널리 사용되고 있으며 많은 항아리에는 의존성이 있습니다. 나는 'NoSuchMethodError'또는 다른 Avro 버전에서 다른 방법으로이 질문에 대한 몇 가지 변형을 보았습니다.

    Avro와 관련된 EMR의 실행 시간 충돌 오류가 매우 일반적입니다. Avro는 널리 사용되고 있으며 많은 항아리에는 의존성이 있습니다. 나는 'NoSuchMethodError'또는 다른 Avro 버전에서 다른 방법으로이 질문에 대한 몇 가지 변형을 보았습니다.

    내가 LinkageError있어 'spark.executor.userClassPathFirst'플래그로 해결하지 못했습니다.

    나를위한 갈등을 해결 한 해결책은 다음과 같습니다.

    보시다시피 기존 라이브러리에 새 라이브러리를 추가해야했습니다. 그렇지 않으면 작동하지 않았습니다.

  5. from https://stackoverflow.com/questions/33159254/avro-error-on-aws-emr by cc-by-sa and MIT license