복붙노트

[HADOOP] Spark가있는 proto2를 실행할 수 없습니다

HADOOP

Spark가있는 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. ==============================

    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 파일을 빌드하는 것입니다.

    다른 동료 프로그래머에게 도움이되기를 바랍니다! ^ ^

  2. from https://stackoverflow.com/questions/44123603/proto2-with-spark-cannot-run by cc-by-sa and MIT license