首页 > 其他分享 >hadoop和hive的兼容问题

hadoop和hive的兼容问题

时间:2023-09-24 18:56:36浏览次数:42  
标签:RetryInvocationHandler java 兼容问题 hadoop hive MRAppMaster apache org

本人之前搭建的集群是hadoop3.3.5+hive3.1.3版本,后来发现这两个版本不兼容,虽然官方文档里面说hive3.1.3版本兼容hadoop3.x.y版本,但是当我在使用hive

执行插入语句时发现一直报同一个错误

java.lang.ClassCastException: org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$GetFileInfoRequestProto cannot be cast to com.google.protobuf.Message at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:247) at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:132) at com.sun.proxy.$Proxy9.getFileInfo(Unknown Source) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:966) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:433) at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod(RetryInvocationHandler.java:166) at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invoke(RetryInvocationHandler.java:158) at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:96) at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:362) at com.sun.proxy.$Proxy10.getFileInfo(Unknown Source) at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1739) at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1753) at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1750) at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1765) at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1829) at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.serviceInit(MRAppMaster.java:317) at org.apache.hadoop.service.AbstractService.init(AbstractService.java:164) at org.apache.hadoop.mapreduce.v2.app.MRAppMaster$6.run(MRAppMaster.java:1760) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1899) at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.initAndStartAppMaster(MRAppMaster.java:1757) at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.main(MRAppMaster.java:1691)

经过查询资料得知,是hive语句转变为mapreduce程序的过程中,序列化出现的问题

网上资料说是hadoop和hive的jar包产生了冲突,之后我尝试删去hive的protobuf包换为hadoop的protobuf-java-2.5.0.jar,但是无济于事,依然是这个错误

之后我把hadoop里面相关的源代码下载下来,依照报错的提示找到了那个类和出差的代码块,之后我顺着错误找下去,之后我发现一个奇怪的问题那就是错误中提示使用了ProtobufRpcEngine类

但是我通过反编译的源码得到了两个类,其中一个为ProtobufRpcEngine2,而ProtobufRpcEngine被划了一条线,显然已经被废弃了,但是错误显示依然调用了ProtobufRpcEngine而不是ProtobufRpcEngine2,我猜测这可能就是问题的原因
没办法,之后我又尝试了hive3.1.2和hive4.0.0版本,但是都不太行,最后我决定把hadoop集群更换掉,将hadoop3.3.5替换为hadoop3.2.4版本
https://mirrors.aliyun.com/apache/hadoop/core/hadoop-3.2.4/?spm=a2c6h.25603864.0.0.17133820noW0iz

同时需要更改两个环境配置分别为/etv/profile和~/.bashrc ,前者为我的本地环境,后者为ssh远程连接时读取到的环境,一开始我忘记改变后者,导致一直显示为原来的环境变量
将原来的配置文件复制到新的hadoop集群中,这样就可以了
目前测试hadoop3.3.2+hive3.1.3+hbase2.5.5+zookeeper3.7.1没有问题,值得注意的是zookeeper3.7.1和spark3.3.2不兼容,这使得spark3.3.2无法搭建高可用集群

说实话,大数据生态圈的兼容性真的需要加强,还是建议不要使用新版本,不然就会被不适配问题折磨

经过调试,成功使用了hive插入语句

标签:RetryInvocationHandler,java,兼容问题,hadoop,hive,MRAppMaster,apache,org
From: https://www.cnblogs.com/liyiyang/p/17726416.html

相关文章

  • HIVE增量同步方案2
    SELECTstudent_temp.id,coalesce(student_temp.age,student.age)asage,student_temp.name,coalesce(student_temp.dt,student.dt)asdtFROMstudent_tempFULLOUTERJOINstudentONstudent_temp.id=student.id;———————......
  • Could not open client transport with JDBC Uri: jdbc:hive2://node1:10000: java.n
    今天发现连接beeline是时候连接不上,不应该啊昨晚还可以的qaq  破案了,我启动了metastore之后忘记去启动hiveserver2hiveserver2都没启动能连上就怪了 一定一定要记得启动顺序!!!hadoop+metastore+hiveserver2+beeline ......
  • 使用sqoop export命令将hive数据导入mysql
    描述一下因为我前两天的测试里面,用的是另外一种方法,所以今天想要尝试一下sqoopexport的方法,这个方法我之前也试过,但是一直报错,但是!我又来啦!!!相关步骤自己设置一个数量不多的csv文件:然后按照之前的步骤:上传,导入数据库:然后在mysql里面同时创建一个与hive数据库中结构一致......
  • hive的一些操作(防忘)
    createdatabasetest_1;创建数据库 dropdatabasetest_1; 删除数据库 showdatabases;查看数据库 ......
  • 关于Hadoop和hive启动关闭的一些命令
    Hadoop启动/关闭:start-all.sh/stop-all.sh HDFS:start-dfs.sh/stop-dfs.sh YARN:start-yarn.sh/stop-yarn.shhive启动metastore服务:前台启动/export/server/apache-3.1.2-bin/bin/hive--servicemetastore 后台启动nohup/export/server/apache-hive-3.1.2-bin/bin/hi......
  • Hive的使用以及如何利用echarts实现可视化在前端页面展示(四)---连接idea使用echarts
    说来惭愧,我的javaweb烂得一批,其他步骤我还是很顺利地,这个最简单的,我遇到了一系列问题。只能说,有时候失败也是一种成功吧这一步其实就是正常的jdbc,没什么可说明的,但是关于使用echarts我还是遇到了一些困难,如果有高手能指正一二,感激不尽echarts获取前端数据要使用Ajax,我不会这个语......
  • Hadoop是什么? Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并
    Hadoop是什么?Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并行处理任务,支持大规模数据存储和处理。Hadoop的核心组件包括分布式文件系统HDFS和分布式计算框架MapReduce,它们使得Hadoop可以在廉价的硬件上并行地处理大量数据。Hadoop还包括很多相关的项目和子......
  • Hive的使用以及如何利用echarts实现可视化在前端页面展示(三)---hive数据利用sqoop导
    1、安装sqoop我的版本jdk1.8hadoop3.1.3sqoop1.4.6基本上就安装这个版本都没问题,如果是执行连接数据库命令时报错:java.lang.NoClassDefFoundError;报错,在lib下再放一个commons-lang-2.6.jar即可,sqoop安装:Indexof/dist/sqoop(apache.org)commons-lang-2.6.jar下载:commo......
  • Hive的使用以及如何利用echarts实现可视化在前端页面展示(二)---hive部分的实现
    1、利用远程连接器上传csv文件2、进入hive创建表结构:创建一个Hive表的SQL语句:这个表名为 "sales",包含了五个列:day_id、sale_nbr、buy_nbr、cnt 和 round。此表的数据格式为逗号分隔的文本文件,每一行都用逗号分隔字段。createtablesales(day_idstring,sale_nbrstring,b......
  • Hive
    Hive简介Hive是一种大数据处理工具,使用类SQL的HiveQL语言实现数据查询,它底层封装了Hadoop,所有Hive的数据都存储在Hadoop兼容的HDFS中。更官方的描述:Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模......