0

我正在按照这个(相当老的)教程使用 StorageHandler 从 Hive 访问本地 Oracle NoSQL DB。

我已经成功:

  • 提取 Hadoop 2.7.2 下/home/hadoop/hadoop
  • 提取 Hive 1.2.1 下/home/hadoop/hive
  • 设置以下环境变量:

    export HADOOP_HOME=/home/hadoop/hadoop
    export HADOOP_COMMON_HOME=$HADOOP_HOME
    export HADOOP_HDFS_HOME=$HADOOP_HOME
    export HADOOP_MAPRED_HOME=$HADOOP_HOME
    export HADOOP_YARN_HOME=$HADOOP_HOME
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export KVHOME=/home/hadoop/kv
    export KVROOT=/tmp/kv-metadata
    export HIVE_HOME=/home/hadoop/hive/
    export HIVE_AUX_JARS_PATH=$KVHOME/lib/kvclient.jar
    export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HIVE_HOME/bin
    
  • 运行 Oracle NoSQL 数据库:

    java -jar $KVHOME/lib/kvstore.jar kvlite -root $KVROOT -host localhost &
    
  • MOVIE在 Oracle DB 中创建表

但是,当我运行hive并输入

hive> CREATE EXTERNAL TABLE IF NOT EXISTS MOVIE( id INT, original_title 
STRING,    overview STRING, poster_path STRING, release_date STRING, 
vote_count INT,       runtime INT, popularity DOUBLE, genres STRING) 
STORED BY 'oracle.kv.hadoop.hive.table.TableStorageHandler' 
TBLPROPERTIES  ( "oracle.kv.kvstore"="kvstore",      
"oracle.kv.hosts"="localhost:5000", 
"oracle.kv.hadoop.hosts"="localhost",        
"oracle.kv.tableName"="MOVIE");

我收到以下错误:

FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.exec.DDLTask.
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.initSerdeParams
(Lorg/apache/hadoop/conf/Configuration;Ljava/util/Properties;Ljava    
/lang/String;)Lorg/apache/hadoop/hive/serde2    
/lazy/LazySimpleSerDe$SerDeParameters;

显然,这似乎是与 SerDe 组件相关的错误。

我也尝试过使用 Hive 2.0,但它也不起作用。

有什么线索吗?

4

1 回答 1

0

这是一个已知问题,与HIVE-9500 对 LazySimpleSerDe public interface 引入不兼容的更改有关切换到 Hive 1.0.1解决了这个问题。

于 2016-03-23T09:25:17.587 回答