0 问题描述

在我在hive命令行中执行
add jar /opt/module/hive/data/myudf.jar;
create temporary function my_len as "MyStringLength";
这两条语句后,报了下面的错误

FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.FunctionTask. 
MyStringLength has been compiled by a more recent version of the Java Runtime (class file version 
55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

阅读报错信息可知重点在this version of the Java Runtime only recognizes class file versions up to 52.0。顾名思义的解决方法是将jar包里面的jdk版本降为8,否则不能在虚拟机配置的java环境中运行。

1 问题深入

jdk版本降为8的问题,只需在pom.xml里面加上下面的这段代码即可解决

<build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.7</version>
                    <configuration>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

但是问题并没有随之解决,在我改变jdk为8,并重新打包上传,执行下面两条语句后
add jar /opt/module/hive/data/myudf.jar;
create temporary function my_len as "MyStringLength";
却仍然报了同样的错误。

2 问题解决

所以想到了也许我们不仅应该将 jar 包添加到 hive 的classpath,还应该把过去添加的错误jar包给删去。幸运的是,当思考方向正确的时候,解决问题也变得易如反掌。
仅需如下一句,先删后加,OK的大门就向我们打开。

delete jar /opt/module/data/myudf.jar;

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐