You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hudi.apache.org by vi...@apache.org on 2020/02/25 06:40:45 UTC
[incubator-hudi] branch master updated: [HUDI-625] Fixing
performance issues around DiskBasedMap & kryo (#1352)
This is an automated email from the ASF dual-hosted git repository.
vinoth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hudi.git
The following commit(s) were added to refs/heads/master by this push:
new 83c8ad5 [HUDI-625] Fixing performance issues around DiskBasedMap & kryo (#1352)
83c8ad5 is described below
commit 83c8ad5a38e1b561d501d0dcbcbd39fb02638054
Author: lamber-ken <la...@163.com>
AuthorDate: Tue Feb 25 14:40:37 2020 +0800
[HUDI-625] Fixing performance issues around DiskBasedMap & kryo (#1352)
---
.../hudi/common/util/SerializationUtils.java | 45 ++--------------------
1 file changed, 3 insertions(+), 42 deletions(-)
diff --git a/hudi-common/src/main/java/org/apache/hudi/common/util/SerializationUtils.java b/hudi-common/src/main/java/org/apache/hudi/common/util/SerializationUtils.java
index 9096080..9d075bb 100644
--- a/hudi-common/src/main/java/org/apache/hudi/common/util/SerializationUtils.java
+++ b/hudi-common/src/main/java/org/apache/hudi/common/util/SerializationUtils.java
@@ -21,18 +21,13 @@ package org.apache.hudi.common.util;
import org.apache.hudi.exception.HoodieSerializationException;
import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
-import com.esotericsoftware.kryo.serializers.FieldSerializer;
-import com.esotericsoftware.reflectasm.ConstructorAccess;
-import org.objenesis.instantiator.ObjectInstantiator;
+import org.objenesis.strategy.StdInstantiatorStrategy;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
/**
* {@link SerializationUtils} class internally uses {@link Kryo} serializer for serializing / deserializing objects.
@@ -121,50 +116,16 @@ public class SerializationUtils {
public Kryo newKryo() {
- Kryo kryo = new KryoBase();
+ Kryo kryo = new Kryo();
// ensure that kryo doesn't fail if classes are not registered with kryo.
kryo.setRegistrationRequired(false);
// This would be used for object initialization if nothing else works out.
- kryo.setInstantiatorStrategy(new org.objenesis.strategy.StdInstantiatorStrategy());
+ kryo.setInstantiatorStrategy(new Kryo.DefaultInstantiatorStrategy(new StdInstantiatorStrategy()));
// Handle cases where we may have an odd classloader setup like with libjars
// for hadoop
kryo.setClassLoader(Thread.currentThread().getContextClassLoader());
return kryo;
}
- private static class KryoBase extends Kryo {
- @Override
- protected Serializer newDefaultSerializer(Class type) {
- final Serializer serializer = super.newDefaultSerializer(type);
- if (serializer instanceof FieldSerializer) {
- final FieldSerializer fieldSerializer = (FieldSerializer) serializer;
- fieldSerializer.setIgnoreSyntheticFields(true);
- }
- return serializer;
- }
-
- @Override
- protected ObjectInstantiator newInstantiator(Class type) {
- return () -> {
- // First try reflectasm - it is fastest way to instantiate an object.
- try {
- final ConstructorAccess access = ConstructorAccess.get(type);
- return access.newInstance();
- } catch (Throwable t) {
- // ignore this exception. We may want to try other way.
- }
- // fall back to java based instantiation.
- try {
- final Constructor constructor = type.getConstructor();
- constructor.setAccessible(true);
- return constructor.newInstance();
- } catch (NoSuchMethodException | IllegalAccessException | InstantiationException
- | InvocationTargetException e) {
- // ignore this exception. we will fall back to default instantiation strategy.
- }
- return super.getInstantiatorStrategy().newInstantiatorOf(type).newInstance();
- };
- }
- }
}
}