问题描述:
之前写了一个读取RCFile的MapReduce任务,现在放到测试集群上报错了
错误信息:
Error: java.lang.IllegalArgumentException: Unrecognized Hadoop major version number: 3.0.0-cdh6.2.1
at org.apache.hadoop.hive.shims.ShimLoader.getMajorVersion(ShimLoader.java:169)
at org.apache.hadoop.hive.shims.ShimLoader.loadShims(ShimLoader.java:134)
at org.apache.hadoop.hive.shims.ShimLoader.getHadoopShims(ShimLoader.java:95)
at org.apache.hadoop.hive.conf.HiveConf$ConfVars.
at org.apache.hadoop.hive.ql.io.RCFile$Reader.
at org.apache.hadoop.hive.ql.io.RCFile$Reader.
at com.dmp.task.process.format.RCFileRecordReader.initialize(RCFileRecordReader.java:63)
at org.apache.hadoop.mapreduce.lib.input.DelegatingRecordReader.initialize(DelegatingRecordReader.java:84)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:560)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:798)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
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:1875)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)
问题分析:
Hadoop是一个开源产品,基于Hadoop的商业版本有几个CDH,HDP,MapR。我开发的时候是基于开源的Hadoop。而实际测试的时候使用的是CDH版本,导致Hadoop和Hive相关maven依赖不一致,所以报错。
由于我们经常开发和测试的环境Hadoop的版本可能不一样,我们可以通过pom文件来管理Hadoop和hive的不同商业版本。
这里讲下CDH的包的pom.xml依赖配置:
首先看下,hadoop和hive版本信息
从而知道cdh的版本为cdh6.2.1。
基于此我们去修改项目的pom文件:
MapReduce读取RCFile的相关依赖如下:
如何找到相对应的cdh版本呢?
百度了下:
参考:https://blog.csdn.net/weixin_40803329/article/details/80846062
目前maven仓库中没有支持cdh的相关依赖。cloudera自己建立了一个相关的仓库。要想利用maven添加相关依赖,则必须单独添加cloudera仓库。
...
打开https://repository.cloudera.com/artifactory/cloudera-repos/这个repo网址,可以看到我们需要用的版本:
https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hive/hcatalog/hive-hcatalog-core/
https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hive/hive-exec/
https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hive/hive-serde/
调整后的pom文件如下:
重新mvn install 打包后,在cdh环境可以正常运行(^-^)