Skip to content

Commit 8344203

Browse files
the-other-tim-brownrahil-c
authored andcommitted
[HUDI-9246] Confine protobuf shading to the hudi-io package (#13065)
1 parent f620c27 commit 8344203

File tree

13 files changed

+49
-15
lines changed

13 files changed

+49
-15
lines changed

hudi-client/hudi-client-common/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
<groupId>org.apache.hudi</groupId>
4848
<artifactId>hudi-io</artifactId>
4949
<version>${project.version}</version>
50+
<classifier>shaded</classifier>
5051
</dependency>
5152
<dependency>
5253
<groupId>org.apache.hudi</groupId>

hudi-client/hudi-spark-client/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<groupId>org.apache.hudi</groupId>
6060
<artifactId>hudi-io</artifactId>
6161
<version>${project.version}</version>
62+
<classifier>shaded</classifier>
6263
</dependency>
6364

6465
<dependency>

hudi-client/hudi-spark-client/src/main/scala/org/apache/spark/HoodieSparkKryoRegistrar.scala

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.esotericsoftware.kryo.serializers.JavaSerializer
3232
import com.google.protobuf.Message
3333
import com.twitter.chill.protobuf.ProtobufSerializer
3434
import org.apache.spark.serializer.KryoRegistrator
35+
import org.slf4j.LoggerFactory
3536

3637
/**
3738
* NOTE: PLEASE READ CAREFULLY BEFORE CHANGING
@@ -50,6 +51,8 @@ import org.apache.spark.serializer.KryoRegistrator
5051
* </ol>
5152
*/
5253
class HoodieSparkKryoRegistrar extends HoodieCommonKryoRegistrar with KryoRegistrator {
54+
private val log = LoggerFactory.getLogger(classOf[HoodieSparkKryoRegistrar])
55+
5356

5457
override def registerClasses(kryo: Kryo): Unit = {
5558
///////////////////////////////////////////////////////////////////////////
@@ -74,7 +77,14 @@ class HoodieSparkKryoRegistrar extends HoodieCommonKryoRegistrar with KryoRegist
7477
// So we replace it with [[HadoopStorageConfiguration]] for Spark.
7578
kryo.register(classOf[HadoopStorageConfiguration], new JavaSerializer())
7679
// NOTE: Protobuf objects are not serializable by default using kryo, need to register them explicitly.
77-
kryo.addDefaultSerializer(classOf[Message], new ProtobufSerializer())
80+
// Only initialize this serializer if Protobuf is on the classpath.
81+
try {
82+
if (Class.forName(classOf[Message].getName, false, getClass.getClassLoader) != null) {
83+
kryo.addDefaultSerializer(classOf[Message], new ProtobufSerializer())
84+
}
85+
} catch {
86+
case _: ClassNotFoundException | _: NoClassDefFoundError => log.warn("Protobuf classes not found on the classpath, skipping Protobuf serializer registration.")
87+
}
7888
}
7989

8090
/**

hudi-common/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
<groupId>org.apache.hudi</groupId>
108108
<artifactId>hudi-io</artifactId>
109109
<version>${project.version}</version>
110+
<classifier>shaded</classifier>
110111
</dependency>
111112

112113
<dependency>

hudi-hadoop-common/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
<groupId>org.apache.hudi</groupId>
7878
<artifactId>hudi-io</artifactId>
7979
<version>${project.version}</version>
80+
<classifier>shaded</classifier>
8081
</dependency>
8182

8283
<!-- Hadoop -->

hudi-io/pom.xml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,36 @@
9696
<groupId>org.jacoco</groupId>
9797
<artifactId>jacoco-maven-plugin</artifactId>
9898
</plugin>
99+
<plugin>
100+
<groupId>org.apache.maven.plugins</groupId>
101+
<artifactId>maven-shade-plugin</artifactId>
102+
<version>${maven-shade-plugin.version}</version>
103+
<executions>
104+
<execution>
105+
<phase>package</phase>
106+
<goals>
107+
<goal>shade</goal>
108+
</goals>
109+
<configuration>
110+
<createDependencyReducedPom>false</createDependencyReducedPom>
111+
<shadedArtifactAttached>true</shadedArtifactAttached>
112+
<shadedClassifierName>shaded</shadedClassifierName>
113+
<artifactSet>
114+
<includes>
115+
<!-- native HFile reader uses protobuf -->
116+
<include>com.google.protobuf:protobuf-java</include>
117+
</includes>
118+
</artifactSet>
119+
<relocations>
120+
<relocation>
121+
<pattern>com.google.protobuf.</pattern>
122+
<shadedPattern>org.apache.hudi.com.google.protobuf.</shadedPattern>
123+
</relocation>
124+
</relocations>
125+
</configuration>
126+
</execution>
127+
</executions>
128+
</plugin>
99129
</plugins>
100130
</build>
101131

hudi-spark-datasource/hudi-spark/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@
205205
<groupId>org.apache.hudi</groupId>
206206
<artifactId>hudi-io</artifactId>
207207
<version>${project.version}</version>
208+
<classifier>shaded</classifier>
208209
</dependency>
209210
<dependency>
210211
<groupId>org.apache.hudi</groupId>

hudi-sync/hudi-hive-sync/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
<groupId>org.apache.hudi</groupId>
5454
<artifactId>hudi-io</artifactId>
5555
<version>${project.version}</version>
56+
<classifier>shaded</classifier>
5657
</dependency>
5758
<dependency>
5859
<groupId>org.apache.hudi</groupId>

hudi-utilities/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@
172172
<groupId>org.apache.hudi</groupId>
173173
<artifactId>hudi-io</artifactId>
174174
<version>${project.version}</version>
175+
<classifier>shaded</classifier>
175176
</dependency>
176177
<dependency>
177178
<groupId>org.apache.hudi</groupId>

packaging/hudi-integ-test-bundle/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
<include>org.apache.parquet:parquet-avro</include>
123123
<include>com.twitter:parquet-avro</include>
124124
<include>com.twitter.common:objectsize</include>
125+
<include>com.google.protobuf:protobuf-java</include>
125126

126127
<include>io.confluent:kafka-avro-serializer</include>
127128
<include>io.confluent:common-config</include>

0 commit comments

Comments
 (0)