当前位置: 首页 > 知识库问答 >
问题:

NoClassDefFoundError:在Dataproc中运行时的org/apache/sql/内部/连接器/SimpleTableProvider

闻安宜
2023-03-14

我能够在独立模式下运行我的程序。但是当我试图在集群模式下的Dataproc中运行时,会出现以下错误。请帮助。我的build.sbt

name := "spark-kafka-streaming"
    
  version := "0.1"
    
  scalaVersion := "2.12.10"
    
  val sparkVersion = "2.4.5"
    
  libraryDependencies += "org.apache.spark" %% "spark-sql" % sparkVersion % "provided"
  libraryDependencies += "org.apache.spark" %% "spark-core" % sparkVersion % "provided"
  libraryDependencies += "com.google.cloud.bigdataoss" % "gcs-connector" % "hadoop2-2.1.3"
  libraryDependencies += "org.apache.spark" %% "spark-sql-kafka-0-10" % sparkVersion
    
  assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)
  assemblyJarName in assembly := s"${name.value}_${scalaBinaryVersion.value}-${sparkVersion}_${version.value}.jar"
    
  assemblyMergeStrategy in assembly := {
      case PathList("org","aopalliance", xs @ _*) => MergeStrategy.last
      case PathList("javax", "inject", xs @ _*) => MergeStrategy.last
      case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last
      case PathList("javax", "activation", xs @ _*) => MergeStrategy.last
      case PathList("org", "apache", xs @ _*) => MergeStrategy.last
      case PathList("com", "google", xs @ _*) => MergeStrategy.last
      case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last
      case PathList("com", "codahale", xs @ _*) => MergeStrategy.last
      case PathList("com", "yammer", xs @ _*) => MergeStrategy.last
      case "about.html" => MergeStrategy.rename
      case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last
      case "META-INF/mailcap" => MergeStrategy.last
      case "META-INF/mimetypes.default" => MergeStrategy.last
      case "plugin.properties" => MergeStrategy.last
      case "log4j.properties" => MergeStrategy.last
      case y: String if y.contains("UnusedStubClass") => MergeStrategy.first
      case x =>
        val oldStrategy = (assemblyMergeStrategy in assembly).value
        oldStrategy(x)
    }

原因:java。lang.ClassNotFoundException:org。阿帕奇。火花sql。内部的连接器。java上的SimpleTableProvider。网URLClassLoader。java上的findClass(URLClassLoader.java:382)。lang.ClassLoader。java上的loadClass(ClassLoader.java:418)。lang.ClassLoader。loadClass(ClassLoader.java:351)

使用的命令:spack-提交-类主-主纱-部署-模式集群-num-执行器1-驱动程序-内存4g-执行器-核心4-执行器-内存4g-文件x.jsony.jar

编辑:

集群配置:Image:1.5.4-debian10 spark submit——使用Scala 2.12.10版的2.4.5版,OpenJDK 64位服务器虚拟机,1.8.0_252

Jar——使用命令sbt assembly构建Uber Jar。

Gcloud命令:Gcloud dataproc jobs submit spark--cluster=xyz--region=us-west1--class=Main--files x.json--jars=spark-kafka-streaming_2.12-3.0.0_0.1。罐子

日志:

IterableLike. foreach$(IterableLike. scala: 73)在scala. Collection. AbstractIterable. foreach(Iterable. scala: 56)在scala.集合. TraversableLike. filterImpl(TraversableLike. scala: 255)在scala.集合. TraversableLike. filterImpl$(TraversableLike. scala: 249)在scala.集合. AbstractTraversable. filterImpl(Traversable. scala: 108)在scala.集合. TraversableLike. filter(TraversableLike. scala: 347)在scala. Collection. AbstractTraversable. filter(TraversableLike. scala: 108)在org. apache. sql执行. datasource. DataSource$. lookSourcescala上的App. main(App. scala: 80)。在sun.反射上的Lineage. main(Lineage. scala: 3)上的App. main$(App. scala: 78)。在sun.反射上的NativeMethodAccessorInpl. ainke0(Native Method)。在sun.反射上的NativeMethodAccessorInpl. invoke(NativeMethodAccessorInpl. java: 62)。在java. lang.反射上委托方法访问Inpl. invoke(委托方法访问Inpl. java: 43)。方法调用(方法. java: 498)在org. apache. spak.部署. yarn。Application ationMaster$anon2美元. run(Application ationMaster. scala: 686)由:java. lang引起。ClassNotFoundException:org. apache. spark. sql.内部连接器。简单

根本原因和解决方案:正如答案中指出的那样,这是jar的问题。我正在使用IDEA sbt shell构建jar。并且在build.sbt中进行的任何更改在shell启动后都不会再次加载。所以,虽然我改变了版本,但它没有被选中,直到我再次重新启动sbt shell。艰难地学习了它。

共有2个答案

曹高轩
2023-03-14

原因:java。lang.ClassNotFoundException:org。阿帕奇。火花sql。内部的连接器。SimpleTableProvider

org.apache.spark.sql.internal.connector.SimpleTableProvider是在v3.0.0-rc1中添加的,因此您正在使用来自Spark 3.0.0(我猜)的spack-提交

我现在才注意到您使用了--master warn,异常被抛出到org。阿帕奇。火花部署纱线ApplicationMaster$$anon$2。运行(ApplicationMaster.scala:686)

我对Dataproc一无所知,但您应该检查Thread/Dataproc的配置,确保他们可能不使用Spark 3。

海宁
2023-03-14

基于assembly:=s“${name.value}${scalaBinaryVersion.value}-${sparkVersion}${version.value}.jar”您的jar名称应该是spark-kafka-streaming_2.12-2.4.5_0.1。罐子实际的jar名称意味着您可能正在使用spark 3.0.0 API并部署在spark 2.4.5上

 类似资料:
  • 我正试图在Apache ignite Sink连接器的帮助下将kafka主题数据加载到ignite缓存中。面临以下问题。所有必需的JAR以及ignite配置(xml)文件都已就绪。 我很不确定为什么它要为IGniteSinkTask$StreamerContext$Holder抛出ConnectException和NoClassDefoundException。由于某些原因,java无法运行这些类

  • 我试图使用此库运行示例项目,但出现以下错误: 我添加了commons-lang-2.6。罐子 主要类别: 我提到了以下链接: > 爪哇。lang.ClassNotFoundException:org。阿帕奇。平民BaseClassLoader中的lang.StringUtils Struts 2框架演示 http://apache-commons.680414.n4.nabble.com/lang

  • 我已将 Log4J2 添加到我的应用程序中。我通过LIB将所有Log4J2.jar文件复制到,并创建了Log4J2.xml文件来支持它。我的代码已更新为导入必要的日志管理器和记录器 API。然后,我添加了静态的最终记录器方法,并在我的代码中调用了记录器 API。一切都在Eclipse中编译文件。我继续在 DEV 计算机上启动服务器以对其进行验证。启动服务器后,我收到以下错误: 我的配置有什么问题?

  • 我正在运行一个shell脚本,它调用一个java类从数据库中获取一些数据,并用这些数据创建一个excel报表。当代码在我的java类中遇到下面一行时,我在线程“main”Java . lang . noclassdeffounderror:org/Apache/poi/ss/user model/Workbook中得到错误异常: 以下是我定义类路径的方式: 我验证了jar已经被下载(通过gradl

  • 问题内容: 我在重构的旧系统中有以下SQL语句。这是此问题的缩写视图,只是暂时返回count(*)。 它会生成大量记录并杀死系统,但是有人可以解释其语法吗?可以用其他任何方式表达吗? 表1包含419行 表2包含3374行 Table3包含28182行 编辑: 建议重新格式化 问题答案: 为了提高可读性,我重新构造了查询…从表1的最顶层开始,然后将其绑定到Table3,然后将table3绑定到tab

  • 在spark streaming中,我希望在处理每个批处理之前查询db,将结果存储在一个可以序列化并通过网络发送给执行者的hashmap中。 在上面的代码中,indexMap应该在驱动程序中初始化,得到的map用于处理RDD。在foreachRDD闭包外部声明indexMap时没有问题,但在内部声明时会出现序列化错误。这是什么原因呢? 我之所以要这样做,是为了确保每个批处理都有数据库中的最新值。我