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.<clinit>(HiveConf.java:354)

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

at org.apache.hadoop.hive.ql.io.RCFile$Reader.<init>(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版本信息

 

 

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

 

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

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

<dependency>

    <groupId>org.apache.hive</groupId>

    <artifactId>hive-serde</artifactId>

    <version>1.1.0</version>

</dependency>

<dependency>

    <groupId>org.apache.hive</groupId>

    <artifactId>hive-exec</artifactId>

    <version>1.1.0</version>

    <exclusions>

        <exclusion>

            <groupId>org.apache.avro</groupId>

            <artifactId>avro</artifactId>

        </exclusion>

    </exclusions>

</dependency>

    <dependency>

        <groupId>org.apache.hive.hcatalog</groupId>

        <artifactId>hive-hcatalog-core</artifactId>

        <version>3.0.0</version>

        <exclusions>

            <exclusion>

                <groupId>org.apache.avro</groupId>

                <artifactId>avro</artifactId>

            </exclusion>

        </exclusions>

<!--        <scope>test</scope>-->

    </dependency>

 

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

百度了下:

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

 

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

<project>

...

  <repositories>

<repository>

<id>cloudera</id>

<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>

<releases>

<enabled>true</enabled>

</releases>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

</repositories>

</project>

 

打开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文件如下:

<dependency>

    <groupId>org.apache.hive</groupId>

    <artifactId>hive-serde</artifactId>

    <version>2.1.1-cdh6.2.1</version>

</dependency>

<dependency>

    <groupId>org.apache.hive</groupId>

    <artifactId>hive-exec</artifactId>

    <version>2.1.1-cdh6.2.1</version>

    <exclusions>

        <exclusion>

            <groupId>org.apache.avro</groupId>

            <artifactId>avro</artifactId>

        </exclusion>

    </exclusions>

</dependency>

<dependency>

    <groupId>org.apache.hive.hcatalog</groupId>

    <artifactId>hive-hcatalog-core</artifactId>

    <version>2.1.1-cdh6.2.1</version>

    <exclusions>

        <exclusion>

            <groupId>org.apache.avro</groupId>

            <artifactId>avro</artifactId>

        </exclusion>

    </exclusions>

    <!--        <scope>test</scope>-->

</dependency>

 

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

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值