无法为hbase创建hive表

时间:2015-05-08 14:52:43

标签: hadoop hive hbase integration

我正在运行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中创建一个表并使用外部表从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

你能不能在这里说明这里有什么问题。

4 个答案:

答案 0 :(得分:0)

您似乎错过了hbase.jar

首先检查您的hive-site.xml文件中的hive.aux.jars.path属性,并确保hbase.jarzookeeper.jar&指定了hive-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;
...

答案 1 :(得分:0)

目前,根据HBaseIntegration

  

Hive 2.x 与HBase 1.x及更高版本兼容。 (看到   HIVE-10990了解详情。)消费者希望使用HBase 1.x   使用Hive 1.x将需要自己编译Hive 1.x流代码。

简而言之,在Hive 2.x发布之前,您需要自己编译Hive 1.x流代码!

答案 2 :(得分:0)

使用hbase版本0.98.14与hive版本1.1.0后,此问题得到修复;请访问http://stackoverflow.com/questions/32701905/unable-to-load-data-in-hbase-table-‌​‌​from-hive了解详情

答案 3 :(得分:0)

到目前为止,我遇到了同样的问题,并使用新的pom.xml配置再次构建hive-src 请在 pom.xml 中查看并更改此行  enter code here 1.1.2

注意:我使用Hadoop 2.7.1,Hive 1.2.1和Hbase 1.1.2