2014-09-30 101 views
0

我們在簡單的「create」和「alter」語句中使用oozie工作流,在Hive Action中使用「RCFILE」文件格式創建語句。Oozie中的Hive動作間歇性失敗 - CDH 5.1 - Oozie 4.0.0

我們面臨的挑戰是這個Hive操作有時會成功執行,有時會失敗......我們無法解決這個問題。

對「serde」引發「NoSuchMethodError」異常。

Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.HiveMain], main() threw exception, org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory.getPrimitiveTypeInfo(Ljava/lang/String;)Lorg/apache/hadoop/hive/serde2/typeinfo/TypeInfo; 
java.lang.NoSuchMethodError: org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory.getPrimitiveTypeInfo(Ljava/lang/String;)Lorg/apache/hadoop/hive/serde2/typeinfo/TypeInfo; 
    at org.apache.hadoop.hive.ql.exec.FunctionRegistry.registerNumericType(FunctionRegistry.java:630) 
    at org.apache.hadoop.hive.ql.exec.FunctionRegistry.<clinit>(FunctionRegistry.java:636) 
    at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:208) 
    at org.apache.hadoop.hive.cli.CliSessionState.<init>(CliSessionState.java:78) 
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:645) 
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:623) 
    at org.apache.oozie.action.hadoop.HiveMain.runHive(HiveMain.java:318) 
    at org.apache.oozie.action.hadoop.HiveMain.run(HiveMain.java:279) 
    at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:38) 
    at org.apache.oozie.action.hadoop.HiveMain.main(HiveMain.java:66) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:226) 
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:430) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1554) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162) 

有人可以幫我解決這個問題嗎?

+0

檢查您使用的serde jar是否在ozzie sharelib路徑中可用 – 2014-10-01 04:41:28

回答

0

我有同樣的問題。這是在不同的背景下,但我相信潛在的問題是一樣的。 org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory.getPrimitiveTypeInfo(String)方法的返回類型被縮小爲PrimitiveTypeInfo,Hive 0.13TypeInfo,prior versions of Hive,這打破了Java二進制兼容性。

看起來org.apache.hadoop.hive.ql.exec.FunctionRegistry是用0.13版本的hive-serde-x.x.x.jar編譯的,但是執行類路徑包含一個來自較新的hive-serde-0.13.x.jar的版本。

解決的辦法是確保hive-serde-n.n.n.jar和hive-exec-n.n.n.jar(或者你的案例中的org.apache.hadoop.hive.ql.exec.FunctionRegistry來自哪裏)在類路徑上具有一致的版本。