apache-spark - Apache Spark:如何添加默认和特定依赖项?
问题描述
我的 spark-defaults.conf :
#a package I need everytime
spark.jars.packages org.influxdb:influxdb-java:2.14
当我开始工作时:
spark-shell --master yarn --num-executors 6 --packages "a random package that I need only for this job specifically"
我收到此错误:
java.lang.NoClassDefFoundError: org/influxdb/InfluxDBFactory
at ch.cern.sparkmeasure.InfluxDBSink.<init>(influxdbsink.scala:53)
at ch.cern.sparkmeasure.InfluxDBSinkExtended.<init>(influxdbsink.scala:232)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.spark.util.Utils$$anonfun$loadExtensions$1.apply(Utils.scala:2688)
at org.apache.spark.util.Utils$$anonfun$loadExtensions$1.apply(Utils.scala:2680)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
at org.apache.spark.util.Utils$.loadExtensions(Utils.scala:2680)
at org.apache.spark.SparkContext$$anonfun$setupAndStartListenerBus$1.apply(SparkContext.scala:2387)
at org.apache.spark.SparkContext$$anonfun$setupAndStartListenerBus$1.apply(SparkContext.scala:2386)
at scala.Option.foreach(Option.scala:257)
at org.apache.spark.SparkContext.setupAndStartListenerBus(SparkContext.scala:2386)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:555)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:935)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:926)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926)
at org.apache.spark.repl.Main$.createSparkSession(Main.scala:106)
... 62 elided
Caused by: java.lang.ClassNotFoundException: org.influxdb.InfluxDBFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 88 more
我认为 --packages 覆盖 spark-default.conf 中的包,所以我收到此错误
我不想每次都包含 influxdb 包。
当我使用 --packages 启动作业时,我希望在 spark-default.conf 和动态包中包含 fixe 包,但它似乎不兼容。
任何想法 ?
解决方案
该类确实是 influxdb-java 的一部分,所以你不应该得到那个错误。特别是如果您的代码甚至没有尝试使用 Influx 包
但是,如果您有特定于某个应用程序的包,您实际上应该将它们打包为该应用程序的一部分。然后其他人也可以运行它并且不记得火花提交选项的具体调用
如果您为代码使用构建系统,请考虑创建一个 uber jar
我不熟悉 spark-defaults 的语义或者它是否被覆盖,但如果你确实有包总是需要成为 Spark 应用程序的一部分,你应该直接将 JAR 下载到 Spark 工作者类路径中,而不是让应用程序下载他们每次
推荐阅读
- amazon-web-services - 为任何 Cloudfront 源访问身份添加 S3 存储桶策略
- java - 我想将聊天窗口/选项集成到我的网络应用程序中。我从哪里开始?
- java - 如何将方法作为参数传入
- c# - 如何使用 Microsoft 图形 API 获取组织中的房间详细信息。我只能获取房间名称和房间 ID
- android - 如何在相对布局中将 Textview 放置在 Imageview 的右侧和中心
- assembly - 如何修复“语法错误:,”和“未定义符号”
- php - 从搜索框中键入的 ajax 检索数据
- node.js - 未捕获的语法错误:在开发模式下本地运行 Turnilo 时出现意外的令牌“<”
- database - NoSQL - 数据库设计:如何在 NoSQL 数据库模式中正确设计或表示关联?
- ios - 无法解析模块“react-native-vector-icons/AntDesign”