1

我已经使用源安装了配置单元并运行了 ant 包。

根据cwiki.apache.org文档,我还添加了PATHvar 即$HIVE_HOME$PATH但从基本目录(bin/hive 或 hive)运行命令

它给出以下错误。我添加了补丁(HIVE-3606.1.patch)来解决它,但它仍然无法正常工作。

添加补丁的命令:

hive-0.10.0-bin]$ patch -p0 < ~/Downloads/HIVE-3606.1.patch

要运行 Hive:

hive-0.10.0-bin]$ bin/hive

Exception in thread "main" java.lang.NoSuchFieldError: ALLOW_UNQUOTED_CONTROL_CHARS
    at org.apache.hadoop.hive.ql.udf.generic.GenericUDTFJSONTuple.<clinit>(GenericUDTFJSONTuple.java:59)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:113)
    at org.apache.hadoop.hive.ql.exec.FunctionRegistry.registerGenericUDTF(FunctionRegistry.java:545)
    at org.apache.hadoop.hive.ql.exec.FunctionRegistry.registerGenericUDTF(FunctionRegistry.java:539)
    at org.apache.hadoop.hive.ql.exec.FunctionRegistry.<clinit>(FunctionRegistry.java:472)
    at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:202)
    at org.apache.hadoop.hive.cli.CliSessionState.<init>(CliSessionState.java:86)
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:635)
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:613)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

有人可以在这里帮忙吗?

4

2 回答 2

4

这很可能是因为您的 Hadoop 使用了与 Hive 不同(旧)版本的 Jackson 库。作为一种快速的解决方法,您可以替换jackson-core-asl-X-X-X.jarjackson-mapper-asl-X.X.X.jar使用$HADOOP_HOME/lib较新的$HIVE_HOME/lib

于 2013-06-20T13:16:26.740 回答
1

这是因为您使用的是旧版本的 Hadoop。

如果您有 Hadoop,最好使用以下命令自己编译源代码以用于旧版本的 Hadoop:

$ svn co http://svn.apache.org/repos/asf/hive/trunk hive
$ cd hive
$ mvn clean install -Phadoop-2,dist

检查此链接以获取更多信息:https ://cwiki.apache.org/confluence/display/Hive/GettingStarted

然后,更改 $HADOOP_HOME/lib 中的 jackson* 文件名并为它们添加一个 .old 后缀(最好不要删除它们,因为我们将来可能需要它们):

$ mv jackson-core-asl-1.0.1.jar  jackson-core-asl-1.0.1.jar.old
$ mv jackson-mapper-asl-1.0.1.jar jackson-mapper-asl-1.0.1.jar.old

您可以在 Hive 的打包文件夹周围的某处找到新的 jackson 编译文件,我的位于:

packaging/target/apache-hive-0.14.0-SNAPSHOT-bin/apache-hive-0.14.0-SNAPSHOT/bin/hcatalog/share/webhcat/svr/lib

如果找不到,没关系。在您的配置单元目录中使用以下命令。

$ find ./ -iname "*jackson*"

它将向您显示它可以找到的所有 jackson* 文件。然后转到包含它们的特定文件夹并将它们全部复制到 $HADOOP_HOME/lib (目前我们可能只需要“jackson-core-*”,但我们复制所有以供将来使用):

$ cp jackson* $HADOOP_HOME/lib

询问您是否有更多查询。

于 2014-03-31T07:18:28.687 回答