尝试使用 spark 以 bulkload 的方式写 HBase 时,遇到一个问题,错误堆栈如下

19/02/02 09:00:43 ERROR Utils: Aborting task
java.lang.NoSuchMethodError: org.apache.hadoop.hbase.util.ByteStringer.wrap([B)L/com/google/protobuf/ByteString;
at org.apache.hadoop.hbase.io.hfile.HFile$FileInfo.write(HFile.java:709)
at org.apache.hadoop.hbase.io.hfile.AbstractHFileWriter.writeFileInfo(AbstractHFileWriter.java:184)
at org.apache.hadoop.hbase.io.hfile.HFileWriterV2.close(HFileWriterV2.java:346)
at org.apache.hadoop.hbase.regionserver.StoreFile$Writer.close(StoreFile.java:996)
at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2$1.close(HFileOutputFormat2.java:269)
at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2$1.close(HFileOutputFormat2.java:277)
at org.apache.spark.internal.io.HadoopMapReduceWriteConfigUtil.closeWriter(SparkHadoopWriter.scala:357)
at org.apache.spark.internal.io.SparkHadoopWriter$$anonfun$4.apply(SparkHadoopWriter.scala:133)
at org.apache.spark.internal.io.SparkHadoopWriter$$anonfun$4.apply(SparkHadoopWriter.scala:123)
at org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1414)
at org.apache.spark.internal.io.SparkHadoopWriter$.org$apache$spark$internal$io$SparkHadoopWriter$$executeTask(SparkHadoopWriter.scala:135)
at org.apache.spark.internal.io.SparkHadoopWriter$$anonfun$3.apply(SparkHadoopWriter.scala:79)
at org.apache.spark.internal.io.SparkHadoopWriter$$anonfun$3.apply(SparkHadoopWriter.scala:78)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:109)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:345)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

一开始以为是找不到 com.google.protobuf.ByteString,怎么都没想明白。后来找同事讨论,确定问题是找不到 return 为 com.google.protobuf.ByteString 的 org.apache.hadoop.hbase.util.ByteStringer.wrap 的函数

原因如下:

同时引用了 org.apache.hbase:hbase-shaded-client 和 org.apache.hbase:hbase-protocol,其中都有类 org.apache.hadoop.hbase.util.ByteStringer 和 方法 wrap,但是返回值分别为 org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString 和 com.google.protobuf.ByteString。前者被打进 jar 包,于是有了之前的错误。

更进一步,发生这个错误的原因,是在引用 hbase 依赖的时候,同时引用了 shaded 和非 shaded,这是错误的。于是改成都使用 shaded 的 hbase 依赖。

记一个 protobuf 的 jar 包冲突的更多相关文章

  1. 记一次jar包冲突

    题记:永远不要在同一个项目中,引用不同版本的两个jar包,否则,这可能就是一个大坑. 在做网校项目的时候,帮助中心要使用lucene,所以就引入了lucene-5.5.1的包,删掉了原先存在于项目中的 ...

  2. 一个jar包冲突引起的StackOverflowError

    项目运行中错误信息:java.lang.IllegalStateException: Unable to complete the scan for annotations for web appli ...

  3. sbt公布assembly解决jar包冲突 deduplicate: different file contents found in the following

    一个.问题定义 近期使用sbt战斗assembly发生故障时,包,在package什么时候,发生jar包冲突/文件冲突,两个相同class来自不同jar包classpath内心冲突. 有关详细信息:我 ...

  4. 为什么项目的jar包会和tomcat的jar包冲突?

    为什么项目的jar包会和tomcat的jar包冲突? 碰到这个问题,猜测tomcat启动时会将自己的lib和项目的lib在逻辑上归并为一个大的lib,但是并没有做版本区分以及去重,这样相同的包可能就有 ...

  5. weblogic与axis2 jar包冲突

    1.org.springframework.web.util.NestedServletException: Handler processing failed; nested exception i ...

  6. 重新看待Jar包冲突问题及解决方案

    Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免地遇到过,并且也都能想到通常的原因一般是同一个Jar包由于maven传递依赖等原因被引进了多个不同的版本而导致,可采用依赖排除.依赖管理 ...

  7. 【BUG】websphere找不到类或jar包冲突

    来自:http://liuwei1578.blog.163.com/blog/static/49580364200991572642653/ Jar包冲突问题是在大型Java软件开发中经常遇到的问题, ...

  8. 开发使用tomcat生产使用weblogic造成jar包冲突如何解决?

    问题描述开发时新增了jar包,当将增量包部署到测试服务器后启动应用出现如下错误提示:java.lang.LinkageError: loader constraint violation: loade ...

  9. [转]基于S2SH框架的项目—antlr-2.7.2.jar包冲突问题

    java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I        org.hibernate.hql.ast.HqlSqlWal ...

随机推荐

  1. robotframe常用的类库、对应的方法和属性

    robotframe常用的类库.对应的方法和属性

  2. Blockchain资源

    程序源码: https://github.com/HuangFJ/pyeth https://www.jianshu.com/p/b72b4eb259b8

  3. Draw.io--自认为最好用的流程图绘制软件

    draw.io 是一个强大简洁的在线的绘图网站,支持流程图,UML图,架构图,原型图等图标.支持Github,Google Drive, One drive等网盘同步,并且永久免费.如果觉得使用Web ...

  4. 如何把web项目部署到Linux云服务器(详细流程)

    转自: https://blog.csdn.net/M_Kerry/article/details/81664548

  5. 排序算法之插入排序的python实现

    插入排序的工作原理如下: (1)从数组第一个元素开始(0下标),从该元素开始进行构建有序序列: (2)取出待排序列中第一个元素,然后从“有序”序列中,从后往前扫描: (3)如果该元素(有序序列)大于待 ...

  6. How2j学习java-3下载 ECLIPSE

    1.下载并解压Eclipse 下载并解压到e:/eclipse,目录情况如图所示.注: 这个Eclipse是64位的,应该使用本站提供的JDK(64)位,下载地址:JDK. 如果JDK位数和 Ecli ...

  7. Deeplearning.ai课程笔记-神经网络和深度学习

    神经网络和深度学习这一块内容与机器学习课程里Week4+5内容差不多. 这篇笔记记录了Week4+5中没有的内容. 参考笔记:深度学习笔记 神经网络和深度学习 结构化数据:如数据库里的数据 非结构化数 ...

  8. mysql5.7修改root密码

    use mysql; update mysql.user set authentication_string=password('123456') where user='root'; flush p ...

  9. spark sql 访问mysql数据库

    pom.xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-ja ...

  10. 吴裕雄 python 神经网络——TensorFlow训练神经网络:MNIST最佳实践

    import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_N ...