[HADOOP] AWS EMR의 유로 오류
HADOOPAWS 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.스파크 - 레드 쉬프트 유지 보수 자.
스파크 - 레드 쉬프트 유지 보수 자.
다른 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.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.참조 용 - 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.Avro와 관련된 EMR의 실행 시간 충돌 오류가 매우 일반적입니다. Avro는 널리 사용되고 있으며 많은 항아리에는 의존성이 있습니다. 나는 'NoSuchMethodError'또는 다른 Avro 버전에서 다른 방법으로이 질문에 대한 몇 가지 변형을 보았습니다.
Avro와 관련된 EMR의 실행 시간 충돌 오류가 매우 일반적입니다. Avro는 널리 사용되고 있으며 많은 항아리에는 의존성이 있습니다. 나는 'NoSuchMethodError'또는 다른 Avro 버전에서 다른 방법으로이 질문에 대한 몇 가지 변형을 보았습니다.
내가 LinkageError있어 'spark.executor.userClassPathFirst'플래그로 해결하지 못했습니다.
나를위한 갈등을 해결 한 해결책은 다음과 같습니다.
보시다시피 기존 라이브러리에 새 라이브러리를 추가해야했습니다. 그렇지 않으면 작동하지 않았습니다.
from https://stackoverflow.com/questions/33159254/avro-error-on-aws-emr by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop 디렉토리 / 파일 마지막 수정 시간 (0) | 2019.07.01 |
---|---|
[HADOOP] 하이브의 파티션 열을 포함하여 다른 테이블에서 임시 테이블 만들기 (0) | 2019.07.01 |
[HADOOP] 스파크 스칼라의 커스텀 레코드 리더 PST 파일 포맷 (0) | 2019.07.01 |
[HADOOP] 돼지 기본 JsonLoader 스키마 문제 (0) | 2019.07.01 |
[HADOOP] Hadoop / Hive 수집 목록 - 반복되는 항목 없음 (0) | 2019.07.01 |