hadoop - 无法为 hbase 创建配置单元表

标签 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

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

最佳答案

您似乎缺少 hbase.jar

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

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

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

此外,如果您不想弄乱配置文件,您可以使用首选的初始化命令在主路径中创建自己的 .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;
...

关于hadoop - 无法为 hbase 创建配置单元表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126794/

相关文章:

hadoop - 文件复制到 DataNodes 时 Hadoop HDFS 中的数据流管道

java - 从WordCount hadoop示例中调用HelloWorld JNI函数,给出错误java.lang.UnsatisfiedLinkError

java - 如何将 .txt 文件转换为 Hadoop 的序列文件格式

hadoop - 为JSON数据创建配置单元表

hadoop - 什么是 ElasticSearch-Hadoop (es-hadoop) 及其相对于 HBase 的实时 Web 应用程序优势?

hadoop - ParseException第6:5行无法识别joinSource中 '(' 'SELECT' 'system'附近的输入

java - 线程异常 "main"java.lang.UnsatisfiedLinkError : org. apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z

hadoop - 确认重写查询

java - 导出快照无法加载

file - 如何将Hbase数据复制到本地文件系统(外接硬盘)