Ho diversi file .proto che si basano su syntax = "proto3";
. Ho anche un progetto Maven che viene utilizzato per creare lavori Hadoop/Spark (Hadoop 2.7.1 e Spark 1.5.2). Mi piacerebbe generare dati in Hadoop/Spark e quindi serializzarli in base ai miei file proto3.Come posso usare proto3 con Hadoop/Spark?
Utilizzando libprotoc 3.0.0, ho generare sorgenti di Java che funzionano bene all'interno del mio progetto Maven finché ho il seguente nel mio pom.xml:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.0.0-beta-1</version>
</dependency>
Ora, quando muovo il libprotoc generati classi in un lavoro che viene distribuito a un gruppo che vengono colpiti con:
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)
ClassLoader difetto sembra ragionevole dato che Hadoop/Spark hanno una dipendenza da protobuf-java 2.5.0 che è incompatibile con la mia 3.0.0- beta-1. Ho anche notato che protobufs (presumibilmente versioni < 3) hanno trovato la loro strada nel mio vaso in pochi altri posti:
$ 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/
C'è qualcosa che posso fare (Maven ombra?) Per risolvere la questione?
problema simile qui: Spark java.lang.VerifyError
Come stai eseguendo il tuo programma? – Kaushal
@kaushal spark-submit – dranxo
Prova con questa opzione '--packages com.google.protobuf: protobuf-java: 3.0.0-beta-1' – Kaushal