我正试图在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)
在运行时,如果具有相同完全限定名称(package + classname)的两个类驻留在类路径(库或直接类)中,则类加载器可以以特定于当前类加载器的方式从一个或另一个jar加载类。加载类。
因此,在类路径中有两个版本的同一个库显然是要避免的:avro-1.8.2.jar和avro-1.7.4.jar。
该spark.driver.extraClassPath选项将不会改变其JVM的工作方式。它只是:
额外的类路径条目,前置于驱动程序的类路径。
简而言之:更改类路径值以仅指定所需的版本。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。