Как указать дополнительные jar-файлы для задания mr, запускаемого из запросов hive jdbc?

1

Я пытаюсь запросить таблицу hive через jdbc, которая использует формат хранения avro, но я получаю ошибку класса, не найденную в задаче mr, порожденной запросом. Странно то, что я могу запустить запрос из оболочки hive без исключения.

Я могу запустить запрос, который не порождает задания сокращения карты (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
Теги:
hadoop
hive
jdbc
avro

2 ответа

1

Вероятно, hive.aux.jars.path: расположение hive.aux.jars.path плагина, которые содержат реализации пользовательских функций и седов. CLI может выбрать другое значение конфигурации из вашего JDBC hiverserver/hiverservre2. Попробуйте запустить set hive.aux.jars.path; в двух средах и сравнить результаты. Например. здесь Денни добавляет все avro JARs к hive.aux.jars.path в hive-site.xml.

  • 0
    Вспомогательные файлы jar настраиваются и выбираются при выполнении запросов кустов через оболочку кустов или рабочие процессы oozie, проблема возникает только при выполнении запроса jdbc, который включает в себя задачу map / сокращения.
  • 0
    У меня была та же проблема при выполнении запроса Hive из командной строки hive. Решение Remus выше + перезапуск консоли улья решило это.
0

Решение состоит в том, чтобы выполнить следующее sql stmt для каждого созданного нового соединения.

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

Путь /hive-ext является локальным для сервера кустов, т.е. на том же компьютере, на котором запущен сервер улья

Не забудьте изменить свой оператор, чтобы он соответствовал имени вашего файла с avro-mapred jar

Ещё вопросы

Сообщество Overcoder
Наверх
Меню