线上一个项目需要操作hdfs和hive,在使用时报如下错误:

java.lang.UnsupportedOperationException: This is supposed to be overridden by subclasses.at com.google.protobuf.GeneratedMessage.getUnknownFields(GeneratedMessage.java:180)at org.apache.hadoop.hdfs.protocol.proto.HdfsProtos$FsPermissionProto.getSerializedSize(HdfsProtos.java:5407)at com.google.protobuf.CodedOutputStream.computeMessageSizeNoTag(CodedOutputStream.java:749)at com.google.protobuf.CodedOutputStream.computeMessageSize(CodedOutputStream.java:530)at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$CreateRequestProto.getSerializedSize(ClientNamenodeProtocolProtos.java:2371)at com.google.protobuf.AbstractMessageLite.toByteString(AbstractMessageLite.java:49)at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.constructRpcRequest(ProtobufRpcEngine.java:149)at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:193)at $Proxy28.create(Unknown Source)at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.create(ClientNamenodeProtocolTranslatorPB.java:193)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:164)at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:83)at $Proxy29.create(Unknown Source)at org.apache.hadoop.hdfs.DFSOutputStream.<init>(DFSOutputStream.java:1325)at org.apache.hadoop.hdfs.DFSOutputStream.newStreamForCreate(DFSOutputStream.java:1344)at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1255)at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1212)at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:276)at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:265)at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:82)at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:886)

根据堆栈信息,可以看到是pb的问题,异常由com.google.protobuf.GeneratedMessage类的getUnknownFields方法抛出。
在2.4.0a中这个方法的定义如下:

    //@Override (Java 1.6 override semantics, but we must support 1.5)public final UnknownFieldSet getUnknownFields() {return unknownFields; //会返回一个值}

而在2.5.0中:

  //@Override (Java 1.6 override semantics, but we must support 1.5)public UnknownFieldSet getUnknownFields() {throw new UnsupportedOperationException( //在180行可以看到这个方法直接返回一个错误"This is supposed to be overridden by subclasses.");}

即这个错误是由于pb的版本导致,项目是运行在tomcat容器下面的,在WEB-INF/lib目录下只发现protobuf-java-2.4.0a.jar的包,同时在整个文件系统中也只有这一个pb包,在删除这个pb包之后,错误仍然存在,也就是有可能pb已经打在别的jar包里面了。通过jar tvf,最终发现pb是在hive-exec的包里面:

jar tvf hive-exec-0.13.1.jar |grep protobuf0 Mon Jun 02 12:50:20 CST 2014 META-INF/maven/com.google.protobuf/0 Mon Jun 02 12:50:20 CST 2014 META-INF/maven/com.google.protobuf/protobuf-java/141 Mon Jun 02 12:50:20 CST 2014 META-INF/maven/com.google.protobuf/protobuf-java/pom.properties8375 Mon Jun 02 12:50:20 CST 2014 META-INF/maven/com.google.protobuf/protobuf-java/pom.xml0 Mon Jun 02 12:50:20 CST 2014 com/google/protobuf/1014 Mon Jun 02 12:50:20 CST 2014 com/google/protobuf/AbstractMessage$1.class
30034 Mon Jun 02 12:50:20 CST 2014 com/google/protobuf/AbstractMessage$Builder.class7979 Mon Jun 02 12:50:20 CST 2014 com/google/protobuf/AbstractMessage.class
...

同时解压jar之后,查看其pom.properties文件,发现是pb是2.5.0版本的

cd /usr/local/src/META-INF/maven/com.google.protobuf/protobuf-java
cat pom.properties
#Generated by org.apache.felix.bundleplugin
#Thu Mar 07 15:48:28 PST 2013
version=2.5.0
groupId=com.google.protobuf
artifactId=protobuf-java

尝试更改了hive的pom文件,把pb的依赖设置为2.4.0a时,编译不能通过,即cdh4.6.0是需要使用pb 2.4.x的,而hive0.13.1默认是使用2.5.0的,而项目默认加载了2.5.0的pb,导致会报错。

根据

http://stackoverflow.com/questions/5474765/order-of-loading-jar-files-from-lib-directory

https://issues.apache.org/bugzilla/show_bug.cgi?id=57129

在 tomcat 5-7 jar包是按字母顺序加载的,因此如果要想使protobuf-java-2.4.0a.jar先于hive-exec-0.13.1.jar加载,可以更改protobuf-java-2.4.0a.jar的文件名。

本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1592804,如需转载请自行联系原作者

protobuf 2.5.0问题相关推荐

  1. protobuf 2.5.0 编译jar

    为什么80%的码农都做不了架构师?>>>    本机是windows环境 1. 下载 protobuf最新版本:https://code.google.com/p/protobuf/ ...

  2. 【linux】linux 安装 protobuf 2.5.0 版本

    1.概述 视频参考:04-02-配置HDFS-编译executor-container 上传安装包内的protobuf-2.5.0. tar .gz, 解压进入目录执行: ./configure ma ...

  3. 含protobuf程序运行时与libqgtk3.0.so冲突

    protobuf与libqgtk3.0.so的冲突(运行时冲突) 经过测试, 从Qt5.9.9到5.12.8都存在GTK3.0的protobuf与其它版本的protobuf存在冲突. 即Qt5.12. ...

  4. protobuf和socket通信简单实例

    protobuf和socket通信简单实例   protobuf是 Google 公司内部的混合语言数据标准,可以用来定义通信的协议,由于其有序列化和反序列化的操作,减小了存储或通信的数据量,从而达到 ...

  5. 64位centos 下编译 hadoop 2.6.0 源码

    64位os下为啥要编译hadoop就不解释了,百度一下就能知道原因,下面是步骤: 前提:编译源码所在的机器,必须能上网,否则建议不要尝试了 一. 下载必要的组件 a) 下载hadoop源码 (当前最新 ...

  6. 【Android Protobuf 序列化】Protobuf 使用 ( protobuf-gradle-plugin 插件简介 | Android Studio 中配置插件 | AS 中编译源文件 )

    文章目录 一.protobuf-gradle-plugin 插件简介 二.Android Studio 中配置 protobuf-gradle-plugin 插件 三.Android Studio 中 ...

  7. Caffe代码导读(1):Protobuf例子

    转载自: Caffe代码导读(1):Protobuf例子 - 卜居 - 博客频道 - CSDN.NET http://blog.csdn.net/kkk584520/article/details/4 ...

  8. NVIDIA DIGITS 5.1-dev学习笔记之安装过程记录:Windows10 x64位系统 、 MicroSoft Caffe Master、CUDA 8.0 、Python 2.7

    今天成功在windows下配置成功了英伟达的DIGITS,记录一下问题解决过程.  环境简介: Windows10_x64 CUDA 8.0 / CUDA 7.5 Python2.7 Microsof ...

  9. Burpsuite中protobuf数据流的解析 - Vincent

    0×00 前言 对于protobuf over-HTTP的数据交互方式Burpsuite不能正确的解析其中的数据结构,需要Burpsuite扩展才能解析,笔者使用mwielgoszewski的burp ...

最新文章

  1. jQuery校验 jQuery Validate 表单验证详解
  2. linux centos yum 报错 [Errno 256] No more mirrors to try 解决方法
  3. 【One by One系列】IdentityServer4(四)授权码流程
  4. 10进制转换16进制补足0_信息技术教师资格必考内容——进制换算(一)
  5. PHP中生成UUID
  6. 【算法刷题1】二叉树的前序遍历
  7. 织梦响应式教育机构官网网站模板
  8. wincc上位机与1200组态步骤_组态上位机WINCC与PLC通讯连接
  9. webpack多个Html,使用webpack构建多页面应用
  10. The connection to adb is down, and a severe error has occured
  11. [LeetCode]题解(python):016-3Sum Closest
  12. Javascript特效:一个不停的表盘
  13. Unity3d C#使用Highlighting System 5.0高光插件的详细使用教学和脚本动态操作
  14. 51单片机C语言延时函数
  15. 律动荆棘皇冠 Crown of Thorns
  16. 管理驾驶舱,老板的数据看板,移动报表,让数据更直观
  17. Keep It Simple and Stupid是什么意思
  18. e^(At)求解方法及其含义–线性微分方程的求解
  19. C++文件服务器项目—FastCGI—4
  20. 【PMP】核对单和核查表的区别

热门文章

  1. 软件测试52讲-测试新技术篇
  2. flask框架_Flask框架的入门:Hello world
  3. d3h 技嘉b365m 黑苹果_黑苹果硬件选购指南主板amp;硬盘amp;WI
  4. mysql主祝福hi_MySql - GROUP BY 和 HAVING关键字
  5. ad09只在一定范围内查找相似对象_重磅!Excel更新了超级查找函数XLOOKUP,可以对VLOOKUP说拜拜了...
  6. Deformable 3D shape registration based on local similarity transforms
  7. 实用typescript_从今天开始,拿起 TypeScript 做一个轮子的制造者
  8. 【Python数据分析】数据预处理2——数据集成
  9. 知识图谱入门 , 知识抽取
  10. 300万知乎用户数据如何大规模爬取?如何做数据分析?