【问题标题】:How do you specify additional jars for the mr job launched from hive jdbc queries?如何为从 hive jdbc 查询启动的 mr 作业指定额外的 jar?
【发布时间】:2014-03-12 15:23:08
【问题描述】:

我正在尝试通过使用 avro 存储格式的 jdbc 查询 hive 表,但在查询产生的 mr 作业中出现类未找到错误。奇怪的是,我可以从 hive shell 运行查询而不会发生异常。

我可以运行一个不会产生 map reduce 作业的查询 (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

【问题讨论】:

    标签: java hadoop jdbc hive avro


    【解决方案1】:

    可能是hive.aux.jars.path包含用户定义函数和 serdes 实现的插件 jar 的位置。 CLI 可以从 JDBC hiverserver/hiverservre2 中获取另一个配置值。尝试在两个环境中运行set hive.aux.jars.path; 并比较结果。例如。 hereDenny 将所有 avro JAR 添加到 hive-site.xml 中的 hive.aux.jars.path 中。

    【讨论】:

    • 辅助 jars 在通过 hive shell 或 oozie 工作流运行 hive 查询时被配置和拾取,问题仅在生成一个 map/reduce 作业的 jdbc 查询时发生。
    • 我在从 hive 命令行执行 Hive 查询时遇到了同样的问题。上面Remus的解决方案+重启hive控制台解决了。
    【解决方案2】:

    解决方法是对每一个新创建的连接执行下面的sql stmt。

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

    /hive-ext 路径是 hive 服务器的本地路径,即在运行 hive 服务器的同一台机器上

    请务必更改您的语句以匹配您的 avro-mapred jar 文件的名称

    【讨论】:

      猜你喜欢
      • 2018-01-16
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      相关资源
      最近更新 更多