Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NoClassDefFoundError:org/apache/spark/sq/sources/v2/StreamingWriteSupportProvider试图从scala中的kafka主题中提取_Scala_Apache Spark_Apache Kafka_Spark Shell - Fatal编程技术网

java.lang.NoClassDefFoundError:org/apache/spark/sq/sources/v2/StreamingWriteSupportProvider试图从scala中的kafka主题中提取

java.lang.NoClassDefFoundError:org/apache/spark/sq/sources/v2/StreamingWriteSupportProvider试图从scala中的kafka主题中提取,scala,apache-spark,apache-kafka,spark-shell,Scala,Apache Spark,Apache Kafka,Spark Shell,我正在使用一个sparkshell实例来测试从客户机的kafka源中提取数据的过程。为了启动实例,我使用命令sparkshell--jars spark-sql-kafka-0-10_2.11-2.5.0-palantir.8.jar、kafka_2.12-2.5.0.jar、kafka-clients-2.5.0.jar(所有jar都存在于woring目录中) 但是,当我在几秒钟后运行命令val df=spark.read.format(“kafka”)……时,它崩溃如下: java.lang

我正在使用一个
sparkshell
实例来测试从客户机的kafka源中提取数据的过程。为了启动实例,我使用命令
sparkshell--jars spark-sql-kafka-0-10_2.11-2.5.0-palantir.8.jar、kafka_2.12-2.5.0.jar、kafka-clients-2.5.0.jar
(所有jar都存在于woring目录中)

但是,当我在几秒钟后运行命令
val df=spark.read.format(“kafka”)……
时,它崩溃如下:

java.lang.NoClassDefFoundError: org/apache/spark/sql/sources/v2/StreamingWriteSupportProvider
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
  at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:344)
  at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:370)
  at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
  at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
  at scala.collection.convert.Wrappers$JIteratorWrapper.next(Wrappers.scala:43)
  at scala.collection.Iterator$class.foreach(Iterator.scala:893)
  at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
  at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
  at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
  at scala.collection.TraversableLike$class.filterImpl(TraversableLike.scala:247)
  at scala.collection.TraversableLike$class.filter(TraversableLike.scala:259)
  at scala.collection.AbstractTraversable.filter(Traversable.scala:104)
  at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:533)
  at org.apache.spark.sql.execution.datasources.DataSource.providingClass$lzycompute(DataSource.scala:89)
  at org.apache.spark.sql.execution.datasources.DataSource.providingClass(DataSource.scala:89)
  at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:304)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146)
  ... 48 elided
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.sources.v2.StreamingWriteSupportProvider
  at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 79 more
但是,如果我将spark shell命令中jar的顺序更改为
spark shell--jars kafka_2.12-2.5.0.jar、kafka-clients-2.5.0.jar、spark-sql-kafka-0-10_2.11-2.5.0-palantir.8.jar
,则会崩溃:

java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/ByteArrayDeserializer
  at org.apache.spark.sql.kafka010.KafkaSourceProvider$.<init>(KafkaSourceProvider.scala:376)
  at org.apache.spark.sql.kafka010.KafkaSourceProvider$.<clinit>(KafkaSourceProvider.scala)
  at org.apache.spark.sql.kafka010.KafkaSourceProvider.validateBatchOptions(KafkaSourceProvider.scala:330)
  at org.apache.spark.sql.kafka010.KafkaSourceProvider.createRelation(KafkaSourceProvider.scala:113)
  at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:309)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146)
  ... 48 elided
Caused by: java.lang.ClassNotFoundException: org.apache.kafka.common.serialization.ByteArrayDeserializer
  at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 55 more
java.lang.NoClassDefFoundError:org/apache/kafka/common/serialization/ByteArraydSerializer
位于org.apache.spark.sql.kafka010.KafkaSourceProvider$(KafkaSourceProvider.scala:376)
位于org.apache.spark.sql.kafka010.KafkaSourceProvider$(KafkaSourceProvider.scala)
在org.apache.spark.sql.kafka010.KafkaSourceProvider.validateBatchOptions(KafkaSourceProvider.scala:330)
位于org.apache.spark.sql.kafka010.KafkaSourceProvider.createRelation(KafkaSourceProvider.scala:113)
位于org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:309)
位于org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
位于org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146)
... 48删去
原因:java.lang.ClassNotFoundException:org.apache.kafka.common.serialization.ByteArraydSerializer
在java.net.URLClassLoader$1.run(URLClassLoader.java:372)
在java.net.URLClassLoader$1.run(URLClassLoader.java:361)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:360)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 55多
我正在开发一个由我们的客户管理的非常严格的代理,无法使用
--packages
,我在这里有点不知所措,我是否无法在shell启动时加载所有3个依赖项?我是不是又错过了一步呢?

这句话的意思是:

为了在spark shell上进行实验,您需要在调用spark shell时添加上述库及其依赖项

您正在使用的库似乎是定制的,在maven中央存储库中不公开。这意味着,我不能研究它的依赖性


然而,看看最新的稳定版本
2.4.5
,根据is
kafka Client
version
2.0.0
,在用户应用程序和Spark本身都依赖于同一个库的情况下,偶尔会出现一个中断性问题,即处理依赖性冲突。这种情况很少出现,但一旦出现,用户可能会感到烦恼。通常,当在执行Spark作业期间引发NoSuchMethodError、ClassNotFoundException或其他与类加载相关的JVM异常时,这会表现出来。这个问题有两种解决方案。第一种方法是修改应用程序,使其依赖于Spark使用的第三方库的相同版本。第二种方法是使用一个通常被称为“着色”的过程来修改应用程序的打包。Maven构建工具通过示例7-5中所示插件的高级配置来支持着色(事实上,着色功能就是插件名为Maven shade plugin的原因)。着色允许您在不同名称空间下创建冲突包的第二个副本,并重写应用程序代码以使用重命名版本。这种蛮力技术在解决运行时依赖关系冲突方面非常有效。有关如何隐藏依赖项的具体说明,请参阅构建工具的文档

我会尝试了解spark shell的scala版本,因为这可能是scala版本的问题

scala> util.Properties.versionString
res3: String = version 2.11.8
如果没有,请检查您正在使用的spark版本以及作为依赖项使用的第三方库版本,因为我确信您的spark版本不支持最新或最旧的版本


我希望它能有所帮助。

您正在尝试导入不同库的多个scala版本
2.11
2.12

请添加相同版本的scala库,并在下面检查如何导入到
spark shell

spark-shell --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.5,org.apache.kafka:kafka_2.11:2.4.1,org.apache.kafka:kafka-clients:2.4.1


嗨,迈克,谢谢你的回复-我下载了spark sql kafka 2.4.5库以及kafka Client 2.0.0,但是当我运行spark shell实例时,我得到了相同的错误,包括这两个Jarsty添加所有依赖项,这意味着也
spark标记
spark sql
,正如我提供的链接中所述。我不高兴,添加所有依赖项仍然会产生相同的错误。作为测试,我运行了
import org.apache.spark.sql.sources.v2.StreamWriteSuport
,得到的响应是
对象v2不是包的成员…
为什么需要导入
org.apache.spark.sql.sources.v2.StreamWriteSuport
?对于使用结构化流媒体读取来自Kafka的消息,我想您不需要这个。我只是作为测试导入了它-这是导致崩溃的缺少的类,但似乎整个对象v2不存在,而不仅仅是一个类谢谢您的回答-spark sql Kafka包针对scala 2.11版,哪个与我拥有的scala版本相匹配,
2.11.8
您的build.sbt中有什么scala版本,spark shell管理什么scala版本?
2.11.8
对于Botshand,在您的开发环境中它没有崩溃,是吗?请使用命令print(sc.version)检查您的spark版本在spark shell中检查匹配版本是否存在问题。