Hive映射MongoDB

生产hadoop集群需要抽取mongodb的数据进行分析。为了快速实施我们需要将hive集成mongodb

软件版本

  cdh5.11.1

  mongodb3.2

步骤

1. 下载jar包,放到hive节点的第三方包/opt/hive-lib/目录下(这个目录通过hive  hive.aux.jars.path属性配置)

http://mvnrepository.com/artifact/org.mongodb.mongo-hadoop/mongo-hadoop-core/2.0.2

http://mvnrepository.com/artifact/org.mongodb.mongo-hadoop/mongo-hadoop-hive/2.0.2

http://mvnrepository.com/artifact/org.mongodb/mongo-java-driver/3.2.1

mongo-hadoop-core-2.0.2.jar

mongo-hadoop-hive-2.0.2.jar

mongo-java-driver-3.2.1.jar

2. 修改文件的访问权限:,chmod 777  /opt/hive-lib/mongo-*

注意:mongo-java-driver jar版本不能低于mongodb组件的版本

3. 重启Hive 完成

 

测试

1. 创建hive外部表

CREATE external TABLE mtest(

         id string,

         name string)

STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler'

WITH SERDEPROPERTIES('mongo.columns.mapping'='{"id":"_id"}')

TBLPROPERTIES('mongo.uri'='mongodb://test:[email protected]:20600/test.test');

 

解释:

如果是内部表,在删除表的时候也会删除mongodb里面的数据。

mongo.columns.mapping:hive表与mongodb字段的映射,字段名完全相同,可以不写,

('mongo.columns.mapping'='{"id":"_id","adam":"Adam","create_time":"createTime"}')

mongo.uri'='mongodb://用户名:密码@IP:端口/库.表

Hive映射MongoDB_第1张图片

mongos> db.test.find()

{ "_id" : ObjectId("5b4d60b7939d71e20f7fde93"), "name" : "Adam" }

此时hdfs文件目录下没有文件

Hive映射MongoDB_第2张图片

加载数到hdfs

 需要通过create table …. as ….把数据放到test_mongodb表

 create table test_mongodb as select * from mtest;

Hive映射MongoDB_第3张图片

你可能感兴趣的:(个人总结)