从 Hive 访问 Oracle NoSQL
Accessing Oracle NoSQL from Hive
我正在关注 this (pretty old) tutorial 使用 StorageHandler 从 Hive 访问本地 Oracle NoSQL DB。
我已经成功了:
- 在
/home/hadoop/hadoop
下提取 Hadoop 2.7.2
- 在
/home/hadoop/hive
下提取 Hive 1.2.1
设置以下环境变量:
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 &
在 Oracle 数据库中创建了 MOVIE
table
但是,当我 运行 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,但它也不起作用。
有什么线索吗?
这是一个已知问题,与 HIVE-9500 introducing an incompatible change to LazySimpleSerDe public interface 相关。 切换到 Hive 1.0.1 已解决问题。
我正在关注 this (pretty old) tutorial 使用 StorageHandler 从 Hive 访问本地 Oracle NoSQL DB。
我已经成功了:
- 在
/home/hadoop/hadoop
下提取 Hadoop 2.7.2
- 在
/home/hadoop/hive
下提取 Hive 1.2.1
设置以下环境变量:
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 &
在 Oracle 数据库中创建了
MOVIE
table
但是,当我 运行 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,但它也不起作用。
有什么线索吗?
这是一个已知问题,与 HIVE-9500 introducing an incompatible change to LazySimpleSerDe public interface 相关。 切换到 Hive 1.0.1 已解决问题。