[BugFix] Fix Child Class Loader of JNI Readers (#60163)
Signed-off-by: yan zhang <dirtysalt1987@gmail.com>
This commit is contained in:
parent
05d01b32f6
commit
ba48ea9526
|
|
@ -19,7 +19,6 @@
|
|||
<dependency>
|
||||
<groupId>software.amazon.awssdk</groupId>
|
||||
<artifactId>bundle</artifactId>
|
||||
<version>${aws-v2-sdk.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
|
|
|||
|
|
@ -32,11 +32,6 @@
|
|||
<artifactId>hadoop-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.hadoop</groupId>
|
||||
<artifactId>hadoop-aws</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-api</artifactId>
|
||||
|
|
|
|||
|
|
@ -17,24 +17,11 @@ package com.starrocks.hive.reader;
|
|||
import com.starrocks.jni.connector.ScannerFactory;
|
||||
import com.starrocks.jni.connector.ScannerHelper;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class HiveScannerFactory implements ScannerFactory {
|
||||
static ClassLoader classLoader;
|
||||
|
||||
static {
|
||||
String basePath = System.getenv("STARROCKS_HOME");
|
||||
List<File> preloadFiles = new ArrayList<>();
|
||||
preloadFiles.add(new File(basePath + "/lib/jni-packages/starrocks-hadoop-ext.jar"));
|
||||
File dir = new File(basePath + "/lib/hive-reader-lib");
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
dir = new File(basePath + "/lib/common-runtime-lib");
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
classLoader = ScannerHelper.createChildFirstClassLoader(preloadFiles, "hive scanner");
|
||||
classLoader = ScannerHelper.createModuleClassLoader("hive-reader-lib");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -34,11 +34,6 @@
|
|||
<artifactId>hadoop-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.hadoop</groupId>
|
||||
<artifactId>hadoop-aws</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.hadoop</groupId>
|
||||
<artifactId>hadoop-mapreduce-client-core</artifactId>
|
||||
|
|
|
|||
|
|
@ -17,24 +17,11 @@ package com.starrocks.hudi.reader;
|
|||
import com.starrocks.jni.connector.ScannerFactory;
|
||||
import com.starrocks.jni.connector.ScannerHelper;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class HudiSliceScannerFactory implements ScannerFactory {
|
||||
static ClassLoader classLoader;
|
||||
|
||||
static {
|
||||
String basePath = System.getenv("STARROCKS_HOME");
|
||||
List<File> preloadFiles = new ArrayList<>();
|
||||
preloadFiles.add(new File(basePath + "/lib/jni-packages/starrocks-hadoop-ext.jar"));
|
||||
File dir = new File(basePath + "/lib/hudi-reader-lib");
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
dir = new File(basePath + "/lib/common-runtime-lib");
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
classLoader = ScannerHelper.createChildFirstClassLoader(preloadFiles, "hudi scanner");
|
||||
classLoader = ScannerHelper.createModuleClassLoader("hudi-reader-lib");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -27,11 +27,6 @@
|
|||
<artifactId>hadoop-ext</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.hadoop</groupId>
|
||||
<artifactId>hadoop-aws</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.hadoop</groupId>
|
||||
<artifactId>hadoop-common</artifactId>
|
||||
|
|
|
|||
|
|
@ -17,22 +17,11 @@ package com.starrocks.connector.iceberg;
|
|||
import com.starrocks.jni.connector.ScannerFactory;
|
||||
import com.starrocks.jni.connector.ScannerHelper;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class IcebergMetadataScannerFactory implements ScannerFactory {
|
||||
static ClassLoader classLoader;
|
||||
|
||||
static {
|
||||
String basePath = System.getenv("STARROCKS_HOME");
|
||||
File dir = new File(basePath + "/lib/iceberg-reader-lib");
|
||||
List<File> preloadFiles = new ArrayList<>(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
dir = new File(basePath + "/lib/common-runtime-lib");
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
classLoader = ScannerHelper.createChildFirstClassLoader(preloadFiles, "iceberg metadata scanner");
|
||||
classLoader = ScannerHelper.createModuleClassLoader("iceberg-reader-lib");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -39,8 +39,7 @@ public class ChildFirstClassLoader extends URLClassLoader {
|
|||
super(urls, null);
|
||||
this.parentLoader = new ParentClassLoader(parent);
|
||||
// load native method class from parent
|
||||
this.parentFirstClass = new ArrayList<>(
|
||||
Arrays.asList("com.starrocks.utils.NativeMethodHelper", "org.slf4j.ILoggerFactory", "org.slf4j.Logger"));
|
||||
this.parentFirstClass = new ArrayList<>(Arrays.asList("com.starrocks.utils.NativeMethodHelper"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -20,7 +20,9 @@ import java.io.File;
|
|||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class ScannerHelper {
|
||||
|
|
@ -39,6 +41,20 @@ public class ScannerHelper {
|
|||
return classLoader;
|
||||
}
|
||||
|
||||
public static ClassLoader createModuleClassLoader(String moduleName) {
|
||||
String basePath = System.getenv("STARROCKS_HOME");
|
||||
List<File> preloadFiles = new ArrayList<>();
|
||||
preloadFiles.add(new File(basePath + "/lib/jni-packages/starrocks-hadoop-ext.jar"));
|
||||
File dir = new File(basePath + "/lib/" + moduleName);
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
dir = new File(basePath + "/lib/common-runtime-lib");
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
dir = new File(basePath + "/lib/hadoop/common");
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
ClassLoader classLoader = ScannerHelper.createChildFirstClassLoader(preloadFiles, moduleName);
|
||||
return classLoader;
|
||||
}
|
||||
|
||||
private static void parseKeyValuePairs(String value, String itemSep, String pairSep, Function<String[], Void> addHandler,
|
||||
Function<String, Void> errorHandler) {
|
||||
if (value == null) {
|
||||
|
|
|
|||
|
|
@ -33,11 +33,6 @@
|
|||
<artifactId>hadoop-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.hadoop</groupId>
|
||||
<artifactId>hadoop-aws</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-api</artifactId>
|
||||
|
|
|
|||
|
|
@ -17,23 +17,11 @@ package com.starrocks.kudu.reader;
|
|||
import com.starrocks.jni.connector.ScannerFactory;
|
||||
import com.starrocks.jni.connector.ScannerHelper;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class KuduSplitScannerFactory implements ScannerFactory {
|
||||
static ClassLoader classLoader;
|
||||
|
||||
static {
|
||||
String basePath = System.getenv("STARROCKS_HOME");
|
||||
List<File> preloadFiles = new ArrayList<>();
|
||||
File dir = new File(basePath + "/lib/kudu-reader-lib");
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
dir = new File(basePath + "/lib/common-runtime-lib");
|
||||
preloadFiles.addAll(Arrays.asList(Objects.requireNonNull(dir.listFiles())));
|
||||
classLoader = ScannerHelper.createChildFirstClassLoader(preloadFiles, "kudu scanner");
|
||||
classLoader = ScannerHelper.createModuleClassLoader("kudu-reader-lib");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -32,11 +32,6 @@
|
|||
<artifactId>hadoop-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.hadoop</groupId>
|
||||
<artifactId>hadoop-aws</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.trino.hive</groupId>
|
||||
<artifactId>hive-apache</artifactId>
|
||||
|
|
|
|||
|
|
@ -460,6 +460,12 @@
|
|||
<artifactId>kryo-shaded</artifactId>
|
||||
<version>${kryo.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>software.amazon.awssdk</groupId>
|
||||
<artifactId>bundle</artifactId>
|
||||
<version>${aws-v2-sdk.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue