Интеграция Hbase с Hive: зарегистрировать таблицу Hbase

Я использую Hortonworks Sandbox 2.0, который содержит следующие версии Hbase и Hive

Component       Version
------------------------
Apache Hadoop     2.2.0
Apache Hive      0.12.0
Apache HBase     0.96.0
Apache ZooKeeper  3.4.5

... и я пытаюсь зарегистрировать свою таблицу hbase в улье, используя следующий запрос

CREATE TABLE IF NOT EXISTS Document_Table_Hive (key STRING, author STRING, category STRING) STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’ WITH SERDEPROPERTIES (‘hbase.columns.mapping’ = ‘:key,metadata:author,categories:category’) TBLPROPERTIES (‘hbase.table.name’ = ‘Document’);

Это не работает, я получаю следующее исключение:

2014-03-26 09:14:57,341 ERROR exec.DDLTask (DDLTask.java:execute(435)) – java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
at org.apache.hadoop.hive.hbase.HBaseStorageHandler.setConf(HBaseStorageHandler.java:249)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:73)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)

2014-03-26 09:14:57,368 ERROR ql.Driver (SessionState.java:printError(419)) – FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org/apache/hadoop/hbase/HBaseConfiguration

Я уже создал таблицу Hbase "Документ", а команда description дает следующее описание

‘Document’,
{NAME => ‘categories’,..},
{NAME => ‘comments’,..},
{NAME => ‘metadata’,..}

Я пробовал следующие вещи

  1. добавить hive.aux.jars.path в hive-site.xml

    hive.aux.jars.path
    file:///etc/hbase/conf/hbase-site.xml,file:///usr/lib/hbase/lib/hbase-common-0.96.0.2.0.6.0-76-hadoop2.jar,file:///usr/lib/hive/lib/hive-hbase-handler-0.12.0.2.0.6.0-76.jar,file:///usr/lib/hbase/lib/hbase-client-0.96.0.2.0.6.0-76-hadoop2.jar,file:///usr/lib/zookeeper/zookeeper-3.4.5.2.0.6.0-76.jar
    
  2. добавить банки с помощью команды hive add jar

    add jar /usr/lib/hbase/lib/hbase-common-0.96.0.2.0.6.0-76-hadoop2.jar;
    add jar /usr/lib/hive/lib/hive-hbase-handler-0.12.0.2.0.6.0-76.jar;
    add jar /usr/lib/hbase/lib/hbase-client-0.96.0.2.0.6.0-76-hadoop2.jar;
    add jar /usr/lib/zookeeper/zookeeper-3.4.5.2.0.6.0-76.jar;
    add file /etc/hbase/conf/hbase-site.xml
    
  3. указать hadoop_classpath

    export HADOOP_CLASSPATH=/etc/hbase/conf:/usr/lib/hbase/lib/hbase-common-0.96.0.2.0.6.0-76-hadoop2:/usr/lib/zookeeper/zookeeper-3.4.5.2.0.6.0-76.jar
    

И это все еще не работает!

Как добавить файлы jar в путь к классу кустов, чтобы он нашел класс hbaseConfiguration, или это совсем другая проблема?

1 ответ

Решение

Не нужно копировать целые банки. Просто hbase-*.jar , zookeeper*.jar, hive-hbase-handler*.jar было бы достаточно. По умолчанию все jar, связанные с hadoop, будут добавлены в classoopath hadoop, так как hive внутренне использует команду hadoop для выполнения.

Или же

Вместо того, чтобы копировать hbase jars в библиотеку hive, указав HIVE_AUX_JARS_PATH Переменная окружения в / usr / lib / hbase / lib / в /etc/hive/conf/hive-env.sh также подойдет.

Второй подход более предложен, чем первый

Другие вопросы по тегам