hadoop - 集成 Hbase 和 Hive : Register Hbase table

标签 hadoop hive hbase apache-zookeeper hortonworks-data-platform

我正在使用包含以下版本的 Hbase 和 Hive 的 Hortonworks Sandbox 2.0

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-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
    
  2. 使用 hive 添加 jar 命令添加 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
    

还是不行!

如何在配置单元类路径中添加 jars,以便它找到 hbaseConfiguration 类, 还是完全不同的问题?

最佳答案

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

或者

不是通过将 HIVE_AUX_JARS_PATH 环境变量指定到/etc/hive/conf/hive-env.sh 中的/usr/lib/hbase/lib/来将 hbase jar 复制到 hive 库也可以。

第二种方法比第一种方法更推荐

关于hadoop - 集成 Hbase 和 Hive : Register Hbase table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22688660/

相关文章:

hadoop - Neo4j Hadoop集成

hadoop - 云端大数据(Azure)

hadoop - 如何从源构建Hadoop而不会出现错误

hadoop - 我可以直接从配置单元表中提取数据到H2O吗?

sql - Hive Optimizer 在优化 View 查询时是否考虑 View 定义?

hadoop - Apache hive : How to convert string to timestamp?

hadoop - Hadoop:连接到服务器时出错,ipc.hbaserpc:60020

hbase - 列族与 Apache Phoenix

hadoop - 在 Pig 中按两列聚合数据分组

hadoop - Apache Spark : Which data storage and data format to choose