Hadoop 将Hbase与配置单元集成:注册Hbase表

Hadoop 将Hbase与配置单元集成:注册Hbase表,hadoop,hive,hbase,apache-zookeeper,hortonworks-data-platform,Hadoop,Hive,Hbase,Apache Zookeeper,Hortonworks Data Platform,我正在使用Hortonworks沙盒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 Docu

我正在使用Hortonworks沙盒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表“Document”,descripe命令给出了以下描述

‘Document’,
{NAME => ‘categories’,..},
{NAME => ‘comments’,..},
{NAME => ‘metadata’,..}
我试过以下几件事

  • 在hive-site.xml中添加hive.aux.jars.path

    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
    
  • 使用配置单元addjar命令添加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
    
  • 指定hadoop_类路径

    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类,
    还是完全不同的问题?

    无需复制整个罐子。只要
    hbase-*.jar、zookeeper*.jar、hive hbase handler*.jar
    就足够了。默认情况下,所有与hadoop相关的JAR都将添加到hadoop类路径中,因为hive在内部使用hadoop命令来执行

    通过将环境变量指定为/usr/lib/hbase/lib/in/etc/hive/conf/hive-env.sh,而不是将hbase jar复制到配置单元库


    第二种方法比第一种更具建议性

    尝试将hbase common-*.jar复制到hive lib/usr/lib/hive/lib/我确实复制了jar。然后它请求其他jarcp/usr/lib/hbase/lib/*.jar/usr/lib/hive/lib/而不覆盖。现在我得到了2014-03-28 03:03:37506 ERROR exec.DDLTask(DDLTask.java:execute(435))-java.lang.NoClassDefFoundError:org/apache/hadoop/hbase/protobuf/generated/MasterProtos$MasterService$BlockingInterface我需要包含哪个jar?终于可以工作了!也从Hadoop复制了JAR。并将hbase和hadoop conf复制到/etc/Hive/conf/在Hive site.xml中配置第二个选项时是否也能工作?使用*在Hive 1.2.1+TEZ+hadoop 2.6.0中不起作用。我建议给出一个jar列表。