2014-03-12 18 views
1

我想通過使用avro存儲格式的jdbc查詢配置單元表,但是我在查詢生成的mr作業中找到類未找到的錯誤。奇怪的是,我可以在沒有發生異常的情況下運行hive shell中的查詢。如何爲從hive jdbc查詢啓動的mr作業指定其他jar?

我可以運行一個查詢,不產生地圖縮小作業(select * from table limit 10),它工作正常。

2014-03-12 10:23:34,040 WARN [main] org.apache.hadoop.mapred.YarnChild: Exception running child : java.io.IOException: java.lang.reflect.InvocationTargetException 
    at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderCreationException(HiveIOExceptionHandlerChain.java:97) 
    at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderCreationException(HiveIOExceptionHandlerUtil.java:57) 
    at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:344) 
    at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.<init>(HadoopShimsSecure.java:291) 
    at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileInputFormatShim.getRecordReader(HadoopShimsSecure.java:405) 
    at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:560) 
    at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.<init>(MapTask.java:168) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:409) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:165) 
    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:1548) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:160) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.initNextRecordReader(HadoopShimsSecure.java:330) 
    ... 11 more 
Caused by: java.lang.NoClassDefFoundError: org/apache/avro/mapred/FsInput 
    at org.apache.hadoop.hive.ql.io.avro.AvroGenericRecordReader.<init>(AvroGenericRecordReader.java:82) 
    at org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat.getRecordReader(AvroContainerInputFormat.java:51) 
    at org.apache.hadoop.hive.ql.io.CombineHiveRecordReader.<init>(CombineHiveRecordReader.java:65) 
    ... 16 more 
Caused by: java.lang.ClassNotFoundException: org.apache.avro.mapred.FsInput 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 19 more 

回答

1

大概hive.aux.jars.path包含的用戶定義的函數和SERDES實現插件罐子的位置。 CLI可以從JDBC hiverserver/hiverservre2中獲取另一個配置值。嘗試在兩種環境中運行set hive.aux.jars.path;並比較結果。例如。 here Denny將所有avro JAR添加到hive-site.xml中的hive.aux.jars.path。

+0

的的當通過hive外殼程序或oozie工作流程運行hive查詢時,配置並拾取輔助Jar,問題只發生在製作跨越地圖/縮減作業的jdbc查詢時。 – Jeff

+0

從配置單元命令行執行Hive查詢時,我遇到了同樣的問題。上面Remus的解決方案+重新啓動了蜂巢控制檯解決了它。 – Svend

0

解決方案是爲每個創建的新連接執行以下sql stmt。

add jar /hive-ext/avro-mapred-1.7.5-cdh5.0.0-beta-2-hadoop2.jar ; 

路徑/hive-ext是本地的,即在同一臺機器上配置單元的服務器運行蜂巢服務器

一定要改變你的聲明的名稱相匹配的avro-mapred jar文件

相關問題