ошибка при выполнении запроса выбора в улье

Я использую hadoop 1.1.2, hbase 0.94.8 и hive 0.14. Я пытаюсь создать таблицу в hbase с помощью куста и загрузить в нее данные позже, вставив перезапись.

на данный момент мне удалось создать таблицу:

CREATE TABLE hbase_table_emp(id int, name string, role string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:name,cf1:role")
TBLPROPERTIES ("hbase.table.name" = "emp");

и загрузить данные в другую таблицу, которую я перезапишу в таблицу hbase:

hive> create table testemp(id int, name string, role string) row format delimited fields terminated by '\t';
hive> load data local inpath '/home/user/sample.txt' into table testemp;

но когда я пытаюсь select * from testemp; убедиться, что данные были успешно загружены, я получаю эту ошибку:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.mapred.JobConf.unset(Ljava/lang/String;)V
    at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushFilters(HiveInputFormat.java:432)
    at org.apache.hadoop.hive.ql.exec.FetchTask.initialize(FetchTask.java:76)
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:443)
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:303)
    at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1067)
    at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1129)
    at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1004)
    at org.apache.hadoop.hive.ql.Driver.run(Driver.java:994)
    at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:247)
    at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:199)
    at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:410)
    at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:783)
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
    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:622)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

может кто-нибудь помочь мне, пожалуйста! благодарю вас


person Yosser Abdellatif Goupil    schedule 21.01.2015    source источник
comment
Изменили ли вы версии пакетов Hadoop с момента последней компиляции Hive?   -  person rchang    schedule 21.01.2015
comment
я ничего не менял   -  person Yosser Abdellatif Goupil    schedule 21.01.2015
comment
Итак, ничего конкретного, но, несмотря на примечания к выпуску 0.14, похоже, есть по крайней мере неофициальные доказательства того, что Hive 0.14 пока не на 100% совместим с Hadoop 1.1.2 (см. stackoverflow.com/questions/27842004/). Я никогда не пытался работать с Hive с Hadoop 1.x самостоятельно.   -  person rchang    schedule 21.01.2015
comment
Я перешел на hive 0.13 и ничего не работает. Я получаю эту ошибку, даже когда пытаюсь визуализировать таблицы («показать таблицы»;) :(   -  person Yosser Abdellatif Goupil    schedule 21.01.2015
comment
К сожалению, это может быть проблема, специфичная для Hadoop 1.x, с которой у меня нет личного опыта. Я предполагаю, что он может работать с Hadoop 1.x, но, возможно, не во всех обстоятельствах.   -  person rchang    schedule 21.01.2015
comment
это может быть проблема совместимости версий или проблема с конфигурацией, которую я просто не могу понять: /   -  person Yosser Abdellatif Goupil    schedule 21.01.2015


Ответы (1)


К сожалению, я считаю, что вам придется обновить Hadoop как минимум до 1.2.0.

Похоже, что Hive пытается получить доступ к методу unset класса org.apache.hadoop.mapred.JobConf. Глядя на документацию API для этого класса в Hadoop 1.1.2 вы можете видеть, что этот метод не существует.

Первый выпуск из серии 1.x, в котором реализован этот метод, — 1.2.0 (см. документация по API для того же класса). Обратите внимание, что метод на самом деле наследуется от класса org.apache.hadoop.conf.Configuration.

person rchang    schedule 21.01.2015
comment
большое спасибо, это работает для меня, это была проблема совместимости версий :) - person Yosser Abdellatif Goupil; 23.01.2015
comment
@YosrAbdellatif Я рад, что все получилось. Конечно, это была тонкая проблема, которую нужно было отследить, поскольку в документации упоминается совместимость с Hadoop 1.xy. Я думаю, х ›= 2. :) - person rchang; 23.01.2015
comment
@ rchang теперь я получаю еще одну ошибку при выполнении вставки перезаписывающей таблицы hbase_table_emp select * from testemp; Я получаю эту ошибку: [[[[[ java.lang.NoClassDefFoundError: org/cliffc/high_scale_lib/Counter]]]]] снова проблема с совместимостью? - person Yosser Abdellatif Goupil; 23.01.2015
comment
@YosrAbdellatif Вы собирали HBase локально с помощью Maven? Отсутствующий класс, кажется, из com.github.stephenc.high-scale-lib, который указан как зависимость в файле pom.xml HBase. Я бы порекомендовал проверить каталог вашей библиотеки, чтобы увидеть, присутствует ли high-scale-lib-x.x.x.jar (где x.x.x — номер версии). - person rchang; 23.01.2015
comment
@ rchang yes high-scale-lib-1.1.1.jar существует в /hbase/lib, и я просто запускаю эти запросы в оболочке улья, какое отношение к этому имеет maven? - person Yosser Abdellatif Goupil; 23.01.2015
comment
@YosrAbdellatif Я подозревал, что файл jar high-scale-lib, возможно, отсутствует - если HBase был собран локально (в отличие, например, от установки только как часть дистрибутива CDH/HDP), возможно, что транзитивные зависимости могут быть пропущены. Поскольку вы убедились, что он существует, другое немедленное предостережение, которое приходит мне на ум, заключается в том, чтобы убедиться, что путь к классам среды выполнения Hive включает библиотеки HBase. Интеграция Hive/HBase обсуждается в этом сообщении в блоге (может быть, это поможет вам?): hortonworks.com/blog/hbase-via-hive-part-1 - person rchang; 23.01.2015
comment
Я не использую дистрибутив Hadoop, я просто установил каждый из них отдельно и попытался выполнить запросы, используя куст, и я не устанавливал HIVE_AUX_JARS_PATH. Я просто скопировал несколько jar-файлов из hbase/lib в hive/lib, вот и все! я должен установить его? - person Yosser Abdellatif Goupil; 26.01.2015