Spark类路径冲突

时间:2018-06-20 00:32:28

标签: java apache-spark

我使用的是Spark版本2.1.0,我使用的是

./bin/spark-submit --master spark://some_master_host_name:7077 \
--class com.foo.bar.SomeApp \
--deploy-mode cluster \
--conf spark.jars=libraries/avro-1.8.2.jar \
--jars libraries/avro-1.8.2.jar \
--conf spark.executor.extraClassPath=avro-1.8.2.jar \
--conf spark.driver.extraClassPath=avro-1.8.2.jar \
--conf spark.files.fetchTimeout=600s \
--conf spark.driver.extraJavaOptions="-XX:+UnlockDiagnosticVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/some_file_name.hprof" \
--conf spark.executor.extraJavaOptions="-XX:+PrintFlagsFinal -XX:+PrintReferenceGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintAdaptiveSizePolicy -XX:+UnlockDiagnosticVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/some_file_name.hprof" \
/some/where/on/disk/FOO-assembly.jar

将Spark应用程序提交到集群。在应用程序端,我启用了以下调试日志记录以检查类路径

private static void printSystemClasspath() {
    System.err.println("-------System Classpath--------------");
    String[] entries = System.getProperty("java.class.path").split("\\:");
    for (String entry : entries) {
        System.err.println(entry + " - " + new File(entry).exists());
    }
    System.err.println("-------------------------------------");
}

private static void printCurrentThreadClassloaderClasspath() {
    System.err.println("-------Current Thread Classpath--------------");
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    URL[] urls = ((URLClassLoader) cl).getURLs();
    for (URL url : urls) {
        System.err.println(url.getFile());
    }
    System.err.println("-------------------------------------");
}

问题:我试图覆盖spark提供的avro版本,并在运行时提供1.8.2。

我在FOO-assembly.jar中打包了适当版本的avro类,但是当我使用spark.driver.userClassPathFirstspark.executor.userClassPathFirst时,我遇到了其他一些冲突。我希望能够在运行时将avro库覆盖为升级版本。

我在系统类路径中以avro-1.8.2.jar的形式收到第一个条目,但是文件不存在于文件系统中(代码评估为false

在这种情况下如何覆盖类路径?

0 个答案:

没有答案