[HADOOP] Hadoop / Spark에서 proto3를 사용하려면 어떻게해야합니까?
HADOOPHadoop / Spark에서 proto3를 사용하려면 어떻게해야합니까?
구문 = "proto3";에 의존하는 여러 .proto 파일이 있습니다. 또한 Hadoop / Spark 작업을 빌드하는 데 사용되는 Maven 프로젝트 (Hadoop 2.7.1 및 Spark 1.5.2)가 있습니다. Hadoop / Spark에서 데이터를 생성하고 내 proto3 파일에 따라 직렬화하고 싶습니다.
libprotoc 3.0.0을 사용하여 pom.xml에 다음을 가지고있는 한, 내 Maven 프로젝트 내에서 잘 작동하는 Java 소스를 생성합니다.
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.0.0-beta-1</version>
</dependency>
이제 클러스터에 배포 된 작업에서 libprotoc에서 생성 한 클래스를 사용하면 다음과 같은 결과가 발생합니다.
java.lang.VerifyError : class blah overrides final method mergeUnknownFields.(Lcom/google/protobuf/UnknownFieldSet;)Lcom/google/protobuf/GeneratedMessage$Builder;
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
Hadoop / Spark가 3.0.0-beta-1과 호환되지 않는 protobuf-java 2.5.0에 종속되어 있기 때문에 ClassLoader가 실패한 것으로 보입니다. 나는 또한 protobufs (아마도 <3)가 다른 몇 곳에서 나의 항아리에 들어간 길을 발견했다.
$ jar tf target/myjar-0.1-SNAPSHOT.jar | grep protobuf | grep '/$'
org/apache/hadoop/ipc/protobuf/
org/jboss/netty/handler/codec/protobuf/
META-INF/maven/com.google.protobuf/
META-INF/maven/com.google.protobuf/protobuf-java/
org/apache/mesos/protobuf/
io/netty/handler/codec/protobuf/
com/google/protobuf/
google/protobuf/
이 문제를 해결하려면 내가 할 수있는 일이 있습니까 (Maven Shade?)?
비슷한 문제 : Spark java.lang.VerifyError
해결법
-
==============================
1.이 일이 여기에 나와 있습니다. https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html
이 일이 여기에 나와 있습니다. https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html
protobuffers를 재배치하면 VerifyError가 사라집니다.
<relocations> <relocation> <pattern>com.google.protobuf</pattern> <shadedPattern>shaded.com.google.protobuf</shadedPattern> </relocation> </relocations>
-
==============================
2.Dranxo와 같은 솔루션이지만 sbt 어셈블리가 있습니다.
Dranxo와 같은 솔루션이지만 sbt 어셈블리가 있습니다.
assemblyShadeRules in assembly := Seq( ShadeRule.rename("com.google.protobuf.*" -> "shadedproto.@1").inProject .inLibrary("com.google.protobuf" % "protobuf-java" % protobufVersion) )
from https://stackoverflow.com/questions/34487996/how-can-i-use-proto3-with-hadoop-spark by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] httpfs 오류 상태 카테고리 READ는 상태 대기 모드에서 지원되지 않습니다. (0) | 2019.06.17 |
---|---|
[HADOOP] 하이브가지도 작업을 동시에 수행하도록 만드는 방법은 무엇입니까? (0) | 2019.06.17 |
[HADOOP] Hadoop에서 기존 파일의 블록 크기 변경 (0) | 2019.06.17 |
[HADOOP] 하이브의 문자열을 타임 스탬프로 변환 (0) | 2019.06.17 |
[HADOOP] Hadoop HADOOP_CLASSPATH 문제 (0) | 2019.06.17 |