【问题标题】:Is there a way to understand how spark loads the classpath and in which order?有没有办法了解 spark 如何加载类路径以及以何种顺序?
【发布时间】:2018-12-13 01:53:09
【问题描述】:

我正在尝试在 EMR 上使用自定义 spark 运行 spark 作业,并尝试在驱动程序额外类路径中使用自定义 jar,例如

spark.driver.extraClassPath /usr/lib/hadoop/lib/hadoop-lzo.jar:/usr/local/java/avro-1.8.2.jar:/usr/local/java/avro-mapred-1.8.2-hadoop2.jar

但不知何故,它仍然加载了我通过类路径详细选项找到的默认 avro jar(旧 1.7.4)

[Loaded org.apache.avro.generic.GenericContainer from file:/usr/lib/hadoop/lib/avro-1.7.4.jar]

我想了解加载类路径的顺序和优先级。为什么它仍然选择旧的通用 hadoop avro 1.7.4 而没有加载我想使用的那个。

有没有办法查看为 spark 提交运行加载的确切类路径顺序,任何 jvm 选项等都会有所帮助。

简单地说类路径的顺序(顺序,首先,我的custome jar vs spark jars vs hadoop jars)

【问题讨论】:

标签: java apache-spark hadoop2 amazon-emr


【解决方案1】:

在运行时,如果具有相同全限定名(包+类名)的两个类驻留在类路径(库或直接类)中,类加载器可能会以特定于当前加载类的类加载器。
您不能对它的选择做出任何合理的赌注。

因此,在类路径中包含同一个库的两个版本显然是要避免的:avro-1.8.2.jaravro-1.7.4.jar
spark.driver.extraClassPath 选项不会改变 JVM 的工作方式。它只是:

附加到驱动程序的类路径前面的类路径条目。

长话短说:更改类路径值以仅指定您需要的版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2019-06-15
    • 2020-12-09
    • 1970-01-01
    相关资源
    最近更新 更多