Apache spark ApacheSpark:如何添加默认依赖项和特定依赖项?

Apache spark ApacheSpark:如何添加默认依赖项和特定依赖项?,apache-spark,dependencies,Apache Spark,Dependencies,My 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.lan

My 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
java.lang.NoClassDefFoundError:org/influxdb/InfluxDBFactory
在中国欧洲核子研究中心,sparkmeasure.InfluxDBSink.(InfluxDBSink.scala:53)
在中国欧洲核子研究中心,sparkmeasure.InfluxDBSinkExtended.(influxdbsink.scala:232)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
在org.apache.spark.util.Utils$$anonfun$loadExtensions$1.apply(Utils.scala:2688)
在org.apache.spark.util.Utils$$anonfun$loadExtensions$1.apply(Utils.scala:2680)
位于scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
位于scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
位于scala.collection.mutable.resizeblearray$class.foreach(resizeblearray.scala:59)
位于scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
位于scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
位于scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
位于org.apache.spark.util.Utils$.loadExtensions(Utils.scala:2680)
位于org.apache.spark.SparkContext$$anonfun$setupAndStartListenerBus$1.apply(SparkContext.scala:2387)
在org.apache.spark.SparkContext$$anonfun$setupAndStartListenerBus$1.apply上(SparkContext.scala:2386)
位于scala.Option.foreach(Option.scala:257)
位于org.apache.spark.SparkContext.setupAndStartListenerBus(SparkContext.scala:2386)
位于org.apache.spark.SparkContext(SparkContext.scala:555)
位于org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520)
位于org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:935)
位于org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:926)
位于scala.Option.getOrElse(Option.scala:121)
位于org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926)
位于org.apache.spark.repl.Main$.createSparkSession(Main.scala:106)
... 62删去
原因:java.lang.ClassNotFoundException:org.influxdb.InfluxDBFactory
位于java.net.URLClassLoader.findClass(URLClassLoader.java:382)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 88多
我想——包覆盖了spark-default.conf中的包,所以我得到了这个错误

我不想每次都包含XDB包

当我使用--packages启动作业时,我希望在spark-default.conf和dynamic package中包含fixe包,但它似乎不兼容


你知道吗?

这个类确实是XDB java的一部分,所以你不应该得到这个错误。尤其是如果您的代码甚至没有尝试使用流入包

但是,如果您有特定于某个应用程序的包,那么实际上应该将它们打包为该应用程序的一部分。然后其他人也可以运行它,而不记得spark submit选项的具体调用

如果您正在为代码使用构建系统,请考虑创建uber jar


我不熟悉spark默认值的语义,或者它是否被覆盖,但是如果您确实有需要始终作为spark应用程序一部分的包,那么您应该直接将JAR下载到spark workers类路径中,而不是让应用程序每次都下载它们您是否使用maven,sbt还是别的什么?spark submit->sbt nothing whith spark shell行为是sameAdd JARs直接进入spark类路径似乎是个好主意,但是XDB java具有许多依赖性。我不想每次需要更改版本时都管理XDB java依赖项--包裹帮我完成了这项工作。另一个想法是创建一个FAT-JARs文件或创建一个VAR-ENV(在我的例子中,spark需要启动所有包)。例如,我选择第二个选项,现在用户需要:spark submit--package$VARENV PS:I确认--packages在spark-default.conf中覆盖了spark-default