排除CDH中spark-core的依赖

2023-12-15

我正在使用 Structured Spark Streaming 写入来自 Kafka 的 HBase 数据。

我的集群发行版是:Hadoop 3.0.0-cdh6.2.0,我使用的是 Spark 2.4.0

我的代码如下:

val df = spark
 .readStream
 .format("kafka")
 .option("kafka.bootstrap.servers", bootstrapServers)
 .option("subscribe", topic)
 .option("failOnDataLoss", false)
 .load()
 .selectExpr("CAST(key AS STRING)" , "CAST(value AS STRING)")
 .as(Encoders.STRING)

df.writeStream
  .foreachBatch { (batchDF: Dataset[Row], batchId: Long) =>
     batchDF.write
           .options(Map(HBaseTableCatalog.tableCatalog->catalog, HBaseTableCatalog.newTable -> "6"))
          .format("org.apache.spark.sql.execution.datasources.hbase").save()
     }
     .option("checkpointLocation", checkpointDirectory)
     .start()
     .awaitTermination()

HBaseTableCatalog 使用 json4s-jackson_2.11 库。这个库包含在 Spark Core 中,但是版本不好,这会产生冲突......

为了解决这个问题,我排除了 Spark 核心中的 json4s-jackson_2.11 库,并在 pom 中添加了降级版本:

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.11</artifactId>
  <version>2.4.0-cdh6.2.0</version>
  <exclusions>
    <exclusion>
      <groupId>org.json4s</groupId>
      <artifactId>json4s-jackson_2.11</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.json4s</groupId>
  <artifactId>json4s-jackson_2.11</artifactId>
  <version>3.2.11</version>
</dependency>

当我在我的语言环境机器中执行代码时,它工作得很好,但问题是,当我在cloudera集群中提交它时,我遇到了第一个库冲突错误:

Caused by: java.lang.NoSuchMethodError: org.json4s.jackson.JsonMethods$.parse(Lorg/json4s/JsonInput;Z)Lorg/json4s/JsonAST$JValue;
        at org.apache.spark.sql.execution.datasources.hbase.HBaseTableCatalog$.apply(HBaseTableCatalog.scala:257)
        at org.apache.spark.sql.execution.datasources.hbase.HBaseRelation.<init>(HBaseRelation.scala:80)
        at org.apache.spark.sql.execution.datasources.hbase.DefaultSource.createRelation(HBaseRelation.scala:59)
        at org.apache.spark.sql.execution.datasources.SaveIntoDataSourceCommand.run(SaveIntoDataSourceCommand.scala:45)
        at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:70)
        at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:68)
        at org.apache.spark.sql.execution.command.ExecutedCommandExec.doExecute(commands.scala:86)
        at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:131)
        at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:127)
        at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeQuery$1.apply(SparkPlan.scala:155)
        at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
        at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:152)
        at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:127)
        at org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExecution.scala:80)
        at org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala:80)
        at org.apache.spark.sql.DataFrameWriter$$anonfun$runCommand$1.apply(DataFrameWriter.scala:668)
        at org.apache.spark.sql.DataFrameWriter$$anonfun$runCommand$1.apply(DataFrameWriter.scala:668)
        at org.apache.spark.sql.execution.SQLExecution$$anonfun$withNewExecutionId$1.apply(SQLExecution.scala:78)
        at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:125)
        at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:73)
        at org.apache.spark.sql.DataFrameWriter.runCommand(DataFrameWriter.scala:668)
        at org.apache.spark.sql.DataFrameWriter.saveToV1Source(DataFrameWriter.scala:276)
        at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:270)
        at com.App$$anonfun$main$1.apply(App.scala:129)
        at com.App$$anonfun$main$1.apply(App.scala:126)

我知道集群有自己的hadoop和spark库并且它使用它们,所以,在spark提交中,我将confsspark.driver.userClassPathFirst和spark.executor.userClassPathFirst设置为true,但我有另一个错误并且我不明白:

Exception in thread "main" java.lang.ExceptionInInitializerError
        at org.apache.spark.deploy.yarn.YarnSparkHadoopUtil$.<init>(YarnSparkHadoopUtil.scala:48)
        at org.apache.spark.deploy.yarn.YarnSparkHadoopUtil$.<clinit>(YarnSparkHadoopUtil.scala)
        at org.apache.spark.deploy.yarn.Client$$anonfun$1.apply$mcJ$sp(Client.scala:83)
        at org.apache.spark.deploy.yarn.Client$$anonfun$1.apply(Client.scala:83)
        at org.apache.spark.deploy.yarn.Client$$anonfun$1.apply(Client.scala:83)
        at scala.Option.getOrElse(Option.scala:121)
        at org.apache.spark.deploy.yarn.Client.<init>(Client.scala:82)
        at org.apache.spark.deploy.yarn.YarnClusterApplication.start(Client.scala:1603)
        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:851)
        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
        at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:926)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:935)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassCastException: org.apache.hadoop.yarn.api.records.impl.pb.PriorityPBImpl cannot be cast to org.apache.hadoop.yarn.api.records.Priority
        at org.apache.hadoop.yarn.api.records.Priority.newInstance(Priority.java:39)
        at org.apache.hadoop.yarn.api.records.Priority.<clinit>(Priority.java:34)
        ... 15 more

最后,我想要的是使用我的 pom 中的 json4s-jackson_2.11 而不是 Spark 核心中的 json4s-jackson_2.11 来创建 Spark


要解决此问题,请勿使用spark.driver.userClassPathFirst and spark.executor.userClassPathFirst但相反,使用spark.driver.extraClassPath and spark.executor.extraClassPath.

来自官方的定义文档:“附加到驱动程序类路径之前的额外类路径条目。”

  • “prepend”,放在 Spark 的核心类路径前面。

例子 :

--conf Spark.driver.extraClassPath=C:\Users\Khalid\Documents\Projects\libs\jackson-annotations-2.6.0.jar;C:\Users\Khalid\Documents\Projects\libs\jackson-core-2.6 .0.jar;C:\Users\Khalid\Documents\Projects\libs\jackson-databind-2.6.0.jar

这解决了我的问题(我想使用的 Jackson 版本与正在使用的 Spark 版本之间存在冲突)。

希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

排除CDH中spark-core的依赖 的相关文章

随机推荐

  • 如何在禁用 SSL 卸载的情况下使 ARR 正常工作? 502.3 错误网关

    所以我已经遇到这个错误好几天了 我用谷歌搜索了又搜索 但似乎没有什么可以解决我的情况 我希望有人可以提供帮助 问题 当我在 ARR 路由规则 中禁用 SSL 卸载时 我收到以下信息 502 Web 服务器在充当 Web 服务器时收到无效响应
  • 学习使用 Xcode 和 Objective-C 基础知识进行 iPhone 开发的最佳地点是哪里? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 当我说最好的地方时 我指的是实体课程 研讨会 讲习班等 它可能遍布世界各地 Thanks 我会避开神学院来学习 Objective C 我听说过关于大书呆子牧场培训班
  • C++ 多重继承转换如何工作?

    这个问题帮助我理解了一些 但我的问题与他们的略有不同 据我了解 C 中的基本类型转换涉及将内存中的结构重新解释为不同的结构 例如 class Building int sqFootage class Office public Buildi
  • RMarkdown 生成 HTML 文档注释/评论窗格

    我正在从 Word 文档报告转向使用 RMarkdown 生成的 HTML 文件 然而 我的客户在放弃 Word 后会错过的一大功能是能够轻松地直接向文档添加注释 是否存在一些 HTML Java 等代码片段 可以在 HTML 文档的一侧添
  • ASP GridView 在按钮单击时获取行值

    我正在做什么 单击图像按钮时重置用户密码 到目前为止已完成 添加了 GridViewCommandEventHandler 它正确触发 使用代码来自MSDN 我的 e CommandArgument 得到一个空字符串 并且在运行时抛出错误
  • 运行节点应用程序时 bcrypt 无效的 elf 标头

    我正在为学校开发一个 Nodejs 项目 我无法使用 npm 安装 bcrypt 所以我安装了 bcrypt nodejs 并且该项目昨天运行良好 但是今天 当我做 节点应用程序 时 我遇到了这个错误 node modules bcrypt
  • PHP $_REQUEST 作为数组

    我有一个搜索表单 我想将搜索词作为数组 REQUEST 这样我就可以列出每个搜索词 将每个搜索词包装在一个跨度中以进行样式设置 我怎么做 编辑 这是请求的代码
  • Swift 3.0 无法解析 DispatchQueue 的标识符

    我几个小时以来一直试图找到这个问题的答案 但仍然无济于事 我正在尝试使用以下代码 func fetchPosts ref child Amore child Posts observeSingleEventOfType Value with
  • 我正在尝试将 SFTP 文件(SAS 数据集或令牌)从一台服务器传输到 SAS 中的另一台服务器

    这是我第一次尝试使用 SAS 对文件进行 SFTP 我尝试使用文件名语句 但出现了一些错误 let user userid filename source sftp input sas7bdat user user pass passwor
  • 如何使用多部分实体将图像上传到服务器?

    我正在创建一个应用程序 并在我的应用程序中添加了一个选项来从图库浏览图像 然后上传到服务器 我之前问过这个问题 但没有得到好的答案 为了上传图像 我正在遵循本教程http mayanklangalia blogspot in 2014 04
  • 在 DLL 上使用 WPF 动态创建图像(而不是 GDI+)

    我需要动态生成图像 在阅读教程后here我意识到我可以使用 WPF 中的所有控件和布局来生成渲染 然后将其另存为 JPG 这个想法是使用它来代替 GDI 这是相当原始的 问题是 如何创建一个常规 dll 文件 该文件将以编程方式生成 WPF
  • 使用进程构建器执行两个命令

    我正在尝试编写一个程序 从命令提示符编译另一个 java 文件 不过我有一个问题 此时 它已成功执行编译 Mocha java 的第一部分 但是 我希望它也执行该文件并显示它的输出内容 它什么也没显示 有什么建议么 pb new Proce
  • 以编程方式将加载项宏添加到快速访问工具栏

    我有一个用于格式化 Excel 报告的宏 该宏需要在许多不同的工作簿上运行 因为每天都会生成报告并将其保存到新文件中 这已经在我的个人作业簿中了 我现在需要分享这个宏 我的计划是将该加载项放在我的本地加载项文件夹中 在那里进行任何更新并运行
  • 为Nextjs动态路由添加前缀

    我定义了很多路由 其中 一条路由专用于用户配置文件 每个用户都有一个可通过 HTTP example com username 访问的公共配置文件 我尝试过创建文件pages username js但它似乎不起作用 有没有办法在不通过用户名
  • 当主键具有不同名称时,如何使用 TPT 继承模型?

    针对旧数据库使用 Entity Framework 4 1 我无法生成一组非复数的 TPT 继承模型工作集 并且对公共主键使用不同的名称 我正在使用数据库表 组织 帐户 和 公司 如下所示 Organization Organization
  • 在 VBScript 中读取音乐文件长度

    我只是想知道是否有一种方法可以通过 VBScript 将 mp3 文件的长度以秒为单位获取到变量中 改编自我的答案关于 JScript 的类似问题 您可以使用GetDetailsOfWindows Shell 的方法Folder对象获取音频
  • 将 WordPress jQuery 添加到自定义页面模板

    我有一个插件 它有一个下面的自定义页面模板 该模板需要 jQuery 我有一个变量 link to js 喜欢 google 库 但我希望它将它链接到 WordPress 内部 jQuery 库
  • 如何在 html 片段的 X 段之后插入文本字符串? [复制]

    这个问题在这里已经有答案了 可能的重复 如何用PHP解析和处理HTML content p This is the first paragraph p p This is the second paragraph p p This is t
  • WCF 服务的 SOAP 消息的服务器端跟踪

    我正在努力追随本教程为我的 WCF 服务配置服务器端 SOAP 跟踪 以及MSDN 文档 当我运行测试时 我在 Microsoft 服务跟踪查看器中看到活动 00000000 但消息选项卡为空 C temp Web tracelog svc
  • 排除CDH中spark-core的依赖

    我正在使用 Structured Spark Streaming 写入来自 Kafka 的 HBase 数据 我的集群发行版是 Hadoop 3 0 0 cdh6 2 0 我使用的是 Spark 2 4 0 我的代码如下 val df sp