2013-01-17 66 views
1

我已經使用源代碼安裝了配置單元並運行ant程序包。bin/hive給錯誤提供問題

按照cwiki.apache.org文檔,我加PATH變種也即$HIVE_HOME$PATH但是從基目錄運行命令(BIN /蜂巢或蜂房)

它提供以下錯誤。 我已經加入了補丁(HIVE-3606.1.patch)來解決,但它仍然不工作。

命令添加補丁:

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

運行蜂巢:

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

這是最有可能是因爲你的Hadoop使用傑克遜庫比蜂巢的不同(舊的)版本。作爲一個快速的解決方法,你可以在$HIVE_HOME/lib

1

其在$HADOOP_HOME/lib與較新的替代jackson-core-asl-X-X-X.jarjackson-mapper-asl-X.X.X.jar因爲你是老版本的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和添加一個後綴名爲.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 

你可以找到新的傑克遜編譯後的文件某處大約蜂巢包裝的文件夾,我的是:

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

如果你不能找到它,它的確定。在您的配置單元目錄中使用以下命令。

$ find ./ -iname "*jackson*" 

它會顯示它可以找到的所有傑克遜*文件。然後進入到包含他們特定的文件夾和全部複製到$ HADOOP_HOME/lib目錄(目前,我們可能只需要「傑克遜 - 核心 - *」,但我們都備將來使用):

$ cp jackson* $HADOOP_HOME/lib 

詢問你是否有更多的問題。