MapReduce任务报错:Unrecognized Hadoop major version number: 3.0.0-cdh6.2.1

问题描述:

       之前写了一个读取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.(HiveConf.java:354)

at org.apache.hadoop.hive.ql.io.RCFile$Reader.(RCFile.java:1350)

at org.apache.hadoop.hive.ql.io.RCFile$Reader.(RCFile.java:1343)

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版本信息

MapReduce任务报错:Unrecognized Hadoop major version number: 3.0.0-cdh6.2.1_第1张图片

 

MapReduce任务报错:Unrecognized Hadoop major version number: 3.0.0-cdh6.2.1_第2张图片

 

从而知道cdh的版本为cdh6.2.1。

 

基于此我们去修改项目的pom文件:

MapReduce读取RCFile的相关依赖如下:

    org.apache.hive

    hive-serde

    1.1.0

    org.apache.hive

    hive-exec

    1.1.0

   

       

            org.apache.avro

            avro

       

   

   

        org.apache.hive.hcatalog

        hive-hcatalog-core

        3.0.0

       

           

                org.apache.avro

                avro

           

       

   

 

如何找到相对应的cdh版本呢?

百度了下:

参考:https://blog.csdn.net/weixin_40803329/article/details/80846062

 

目前maven仓库中没有支持cdh的相关依赖。cloudera自己建立了一个相关的仓库。要想利用maven添加相关依赖,则必须单独添加cloudera仓库。

...

 

cloudera

https://repository.cloudera.com/artifactory/cloudera-repos/

true

false

 

打开https://repository.cloudera.com/artifactory/cloudera-repos/这个repo网址,可以看到我们需要用的版本:

https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hive/hcatalog/hive-hcatalog-core/

MapReduce任务报错:Unrecognized Hadoop major version number: 3.0.0-cdh6.2.1_第3张图片

https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hive/hive-exec/

https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hive/hive-serde/

MapReduce任务报错:Unrecognized Hadoop major version number: 3.0.0-cdh6.2.1_第4张图片

 

调整后的pom文件如下:

    org.apache.hive

    hive-serde

    2.1.1-cdh6.2.1

    org.apache.hive

    hive-exec

    2.1.1-cdh6.2.1

   

       

            org.apache.avro

            avro

       

   

    org.apache.hive.hcatalog

    hive-hcatalog-core

    2.1.1-cdh6.2.1

   

       

            org.apache.avro

            avro

       

   

   

 

重新mvn install 打包后,在cdh环境可以正常运行(^-^)

 

你可能感兴趣的:(Hadoop)