1

我使用Hortonworks沙盒2.0包含的HBase和蜂巢與蜂巢整合HBASE:註冊HBase的表

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的表「文件」和describe命令提供了以下描述

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

我曾嘗試下面的東西

  1. 在蜂巢添加hive.aux.jars.path -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. 添加使用蜂巢添加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 
    

,它仍然是不工作!

如何在蜂巢類路徑中添加罐子,以便它找到hbaseConfiguration類, 或它是一個完全不同的問題?

+0

嘗試複製HBase的,常見的是更多的建議 - *罐子蜂巢的lib/usr/lib目錄/蜂房/ lib中/ – sachin

+0

我沒有複製的罐子。然後它詢問其他罐子 – Afaque

+0

cp /usr/lib/hbase/lib/*.jar/usr/lib/hive/lib/ 沒有覆蓋。 現在我得到 2014-03-28 03:03:37,506錯誤exec.DDLTask(DDLTask.java:execute(435)) - java.lang.NoClassDefFoundError:org/apache/hadoop/hbase/protobuf/generated/MasterProtos $ MasterService $ BlockingInterface 我需要包含哪些jar? – Afaque

回答

2

無需複製整個罐子。只需hbase-*.jar , zookeeper*.jar, hive-hbase-handler*.jar就足夠了。默認情況下,所有與hadoop相關的jar將被添加到hadoop classpath中,因爲hive內部使用hadoop命令來執行。

或者

而不是複製HBase的罐子指定HIVE_AUX_JARS_PATH環境變量設置爲/ usr/lib中/ HBase的/ lib中/在/etc/hive/conf/hive-env.sh也會做蜂巢庫。 。

第二種方法比第

+0

在hive-site.xml中配置時,第二個選項是否也可以工作? – kutschkem

+0

使用*不適用於HIVE 1.2.1 + TEZ + Hadoop 2.6.0。我建議給出一個jar列表來代替。 –