无法为 hbase 创建配置单元 table

Unable to create hive table for hbase

我是运行hive版本1.1.0,Hbase版本1.0.1,hadoop版本2.7.0。现在对于下面的命令我收到错误

hive> CREATE TABLE hbase_table_1(eid int, ename string, esal double) 
    > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    > WITH SERDEPROPERTIES 
    > ("hbase.columns.mapping" = ":key,cfstr:enm,cfsal:esl")
    > TBLPROPERTIES ("hbase.table.name" = "emp1");
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V

如果我在 HBase 中创建一个 table 并使用外部 table 从 Hive 引用它,那工作正常。

在 hive home 中我创建了一个 auxlib 目录并复制了下面的 jar 文件。

hduser@ubuntu:/usr/lib/hive/auxlib$ ls
commons-beanutils-1.7.0.jar       commons-httpclient-3.0.1.jar       hbase-checkstyle-1.0.1.jar      hbase-protocol-1.0.1.jar
commons-beanutils-core-1.8.0.jar  commons-io-2.4.jar                 hbase-client-1.0.1.jar          hbase-rest-1.0.1.jar
commons-cli-1.2.jar               commons-lang-2.6.jar               hbase-common-1.0.1.jar          hbase-server-1.0.1.jar
commons-codec-1.4.jar             commons-logging-1.1.3.jar          hbase-common-1.0.1-tests.jar    hbase-server-1.0.1-tests.jar
commons-collections-3.2.1.jar     commons-math-2.1.jar               hbase-examples-1.0.1.jar        hbase-shell-1.0.1.jar
commons-compiler-2.7.6.jar        commons-pool-1.5.4.jar             hbase-hadoop2-compat-1.0.1.jar  hbase-testing-util-1.0.1.jar
commons-compress-1.4.1.jar        commons-vfs2-2.0.jar               hbase-hadoop-compat-1.0.1.jar   hbase-thrift-1.0.1.jar
commons-configuration-1.6.jar     guava-14.0.1.jar                   hbase-it-1.0.1.jar              hive-hbase-handler-1.1.0.jar
commons-dbcp-1.4.jar              hbase-annotations-1.0.1.jar        hbase-it-1.0.1-tests.jar        zookeeper-3.4.6.jar
commons-digester-1.8.jar          hbase-annotations-1.0.1-tests.jar  hbase-prefix-tree-1.0.1.jar

以下详细信息在.bashrc 文件中设置

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0/
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
#alias java="`which java` -Dwhatever"

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB=$HADOOP_HOME/share/hadoop/common/lib
export HADOOP_TOOLS_LIB=$HADOOP_HOME/share/hadoop/tools/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export HIVE_HOME="/usr/lib/hive"
export HBASE_HOME="/usr/lib/hbase"
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HBASE_HOME/bin:$HADOOP_COMMON_LIB:$HADOOP_TOOLS_LIB:$PATH

你能指出这里到底出了什么问题吗?

您似乎错过了 hbase.jar

首先检查 hive-site.xml 文件中的 属性 hive.aux.jars.path 并确保指定了 hbase.jarzookeeper.jarhive-hbase-handlerXXXX.jar

之后,进入配置单元shell和运行list jars以确保它们已被加载。您也可以使用命令 add jar [your-jar].jar

手动加载它们(针对当前会话)

此外,如果您不想弄乱配置文件,您可以使用首选的初始化命令在主路径中创建自己的 .hiverc 文件,即:

SET hive.cli.print.header=true;
SET hbase.scan.cacheblock=0;
SET hbase.scan.cache=10000;
SET hbase.client.scanner.cache=10000;
add JAR /usr/lib/hive/lib/zookeeper.jar;
add JAR /usr/lib/hive/lib/hbase.jar;
add JAR /usr/lib/hive/lib/hive-hbase-handler-0.10.0-cdh4.7.1.jar;
...

当前时间,根据HBaseIntegration

Hive 2.x will be compatible with HBase 1.x and higher. (See HIVE-10990 for details.) Consumers wanting to work with HBase 1.x using Hive 1.x will need to compile Hive 1.x stream code themselves.

总之,在Hive2.x发布之前,您需要自己编译Hive1.x流代码!

在将 hbase 版本 0.98.14 与 hive 版本 1.1.0 一起使用后,此问题已得到修复;请访问 了解详情

今天我遇到了同样的问题,并使用新的 pom.xml 配置再次构建 hive-src 请参考并更改 pom.xml 中的这一行 enter code here1.1.2

注意:我使用的是 Hadoop 2.7.1、Hive 1.2.1 和 Hbase 1.1.2