[HADOOP] Spark가있는 proto2를 실행할 수 없습니다
HADOOPSpark가있는 proto2를 실행할 수 없습니다
구문 proto2가있는 프로토 파일이 있습니다.
또한 Spark (2.0.2)와 HBase를 사용해야합니다. 내 프로젝트는 Gradle을 사용하여 빌드되었습니다.
현재 Java 코드를 실행할 때 다음 오류가 발생합니다.
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 3.0 failed 1 times, most recent failure: Lost task 0.0 in stage 3.0 (TID 3, localhost): java.lang.NoSuchMethodError: com.google.protobuf.Descriptors$Descriptor.getOneofs()Ljava/util/List;
at com.google.protobuf.GeneratedMessageV3$FieldAccessorTable.<init>(GeneratedMessageV3.java:1707)
at com.google.protobuf.AnyProto.<clinit>(AnyProto.java:52)
at com.google.protobuf.Any.getDescriptor(Any.java:129)
at com.google.protobuf.util.JsonFormat$ParserImpl.buildWellKnownTypeParsers(JsonFormat.java:1100)
at com.google.protobuf.util.JsonFormat$ParserImpl.<clinit>(JsonFormat.java:1094)
at com.google.protobuf.util.JsonFormat$Parser.merge(JsonFormat.java:277)
이 스택 추적은 여기에 게시 된 문제와 매우 유사하지만 게시 된 해결 방법은 적용되지 않았습니다.
내가 시도한 것 :
나는 바꿨다
컴파일 그룹 : 'com.google.protobuf', 이름 : 'protobuf-java', 버전 : '2.5.0'
에
컴파일 그룹 : 'org.spark-project.protobuf', 이름 : 'protobuf-java', 버전 : '2.4.1-shaded'와 같은 링크가 제안했지만 여전히 동일한 오류가 지속되었습니다.
어떤 도움이라도 대단히 감사합니다!
해결법
-
==============================
1.자, 해결책은 다음과 같습니다.
자, 해결책은 다음과 같습니다.
이주는 구조하는 방법입니다.
내 주요 프로그램에서 다음과 같이 build.gradle이 있습니다.
dependencies { compile project(path: ':utils:hbasewrapper', configuration: 'shadow') } apply plugin: 'com.github.johnrengelman.shadow' shadowJar { baseName = 'awesome-jar' zip64 true // This is to avoid the conflict between proto3 we are using and the proto2 hbase is using. relocate ('com.google.protobuf', 'importer.com.google.protobuf') }
그런 다음 build.gradle을 따르는 다른 gradle 패키지를 만들었습니다.
group 'com.abc.hbasewrapper' version '1.0-SNAPSHOT' dependencies { compile group: 'org.apache.hbase', name: 'hbase-client', version: '1.3.0' compile group: 'org.apache.hbase', name: 'hbase-server', version: '1.2.2' } apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow' shadowJar { baseName = 'hbasewrapper' version = null zip64 true relocate ('com.google.protobuf', 'hbasewrapper.com.google.protobuf') relocate ('io.netty', 'hbasewrapper.io.netty') }
근본 원인은 HBase가 proto2를 참조하고 있고 프로그램에서 proto3을 사용하고 있기 때문에이 NoSuchMethodError 오류가 발생했기 때문입니다. 해결 방법은 재배치를 사용하여 com.google.protobuf를 다른 gradle 프로젝트로 재배치하는 것입니다.이 목적은 proto2가있는 hbase jar 파일을 빌드하는 것입니다.
다른 동료 프로그래머에게 도움이되기를 바랍니다! ^ ^
from https://stackoverflow.com/questions/44123603/proto2-with-spark-cannot-run by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] hdfs에서 mysql로 sqoop 내보내기에 실패했습니다. 문자를 이스케이프 처리하는 데 도움이 필요합니다 (0) | 2019.09.08 |
---|---|
[HADOOP] 여러 파일을로드 할 때 PySpark 작업이 실패하고 파일이 누락되었습니다 [중복] (0) | 2019.09.08 |
[HADOOP] 하둡 YARN 작업이 맵 0 %에서 멈추고 0 % 감소 (0) | 2019.09.08 |
[HADOOP] YARN 직업 기록이 오지 않음 (0) | 2019.09.08 |
[HADOOP] Spark / Hadoop은 AWS S3에서 SSE-KMS 암호화를 지원하지 않습니다 (0) | 2019.09.08 |