开发者社区> 问答> 正文

有没有办法了解spark如何加载类路径以及以何种顺序加载?

社区小助手 2018-12-21 13:55:10 664

我正试图在EMR上运行一个带有自定义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),我通过类路径verbose选项找到了它

[Loaded org.apache.avro.generic.GenericContainer from file:/usr/lib/hadoop/lib/avro-1.7.4.jar]
我想了解类路径加载的顺序和优先级。为什么它仍然选择旧的通用hadoop avro 1.7.4而不加载我想要使用的那个。

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

简单地说类路径的顺序(顺序,首先,我的客户jar与spark jar与hadoop jar)

分布式计算 Java Hadoop Spark
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:23:26

    在运行时,如果具有相同完全限定名称(package + classname)的两个类驻留在类路径(库或直接类)中,则类加载器可以以特定于当前类加载器的方式从一个或另一个jar加载类。加载类。
    因此,在类路径中有两个版本的同一个库显然是要避免的:avro-1.8.2.jar和avro-1.7.4.jar。
    该spark.driver.extraClassPath选项将不会改变其JVM的工作方式。它只是:

    额外的类路径条目,前置于驱动程序的类路径。

    简而言之:更改类路径值以仅指定所需的版本。

    0 0
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

推荐文章
相似问题