MongoDB数据导入Hive
Posted Shall潇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB数据导入Hive相关的知识,希望对你有一定的参考价值。
将 MongoDB数据导入hive的时候出现如下报错
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. com/mongodb/util/JSON
解决方法:看第一条
一、添加 jar 包 (很重要)
【注意:大部分报错就是 jar包的问题,不是包导错了,就是版本不对】
解决方法:
将如下三个jar 包添加到 hive/lib 目录下
mongo-hadoop-hive-2.0.2.jar
mongo-java-driver-3.2.1.jar
mongo-hadoop-core-2.0.2.jar
或者自己添加依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.mongodb.mongo-hadoop</groupId>
<artifactId>mongo-hadoop-core</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.mongodb.mongo-hadoop</groupId>
<artifactId>mongo-hadoop-hive</artifactId>
<version>2.0.2</version>
</dependency>
二、MongoDB数据准备
collection:train
由于设置了 test 的数据库只给 user1 访问,所以在Hive 中配置
三、Hive配置
创建库:create database events
设置临时变量代表 events:set hivevar:db=events;
设置动态分区非严格模式:set hive.exec.dynamic.partition.mode=nonstrict;
设置允许动态分区:set hive.exec.dynamic.partition=true;
关闭自动mapjoin:set hive.auto.convert.join=false;
创建外部表
create external table ${db}.mg_train(
user_id string,event_id string,invited string,
time_stamp string,interested string
)
stored by 'com.mongodb.hadoop.hive.MongoStorageHandler'
with serdeproperties('mongo.columns.mapping'='{"user_id":"user","event_id":"event",
"invited":"invited","time_stamp":"timestamp","interested":"interested"}')
tblproperties ('mongo.uri'='mongodb://user1:root@192.168.XXX.100:27017/test.train');
【注意:tblproperties中 user1 是test库对应的用户,root 是user 1 的密码,train 是Colletion】
创建内部表
create table mg_table_train stored as orc as select * from mg_train;
以上是关于MongoDB数据导入Hive的主要内容,如果未能解决你的问题,请参考以下文章