码迷,mamicode.com
首页 > 数据库 > 详细

关于使用 MongoDB Connector for Hadoop 的经验和教训

时间:2015-06-27 09:52:19      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:mongo   hadoop   分布式文件系统   hive   etl   

教程

部署的步骤就很简单了,总结如下:
1:下载

2:编译
解压之后按照文档说明编译
./gradlew jar
编译成功之后,我们需要找到三个jar包,在core/build/libshive/build/libs下面有两个jar包如下:
mongo-hadoop-core-1.4-rc0.jar
mongo-hadoop-hive-1.4-rc0.jar
还有一个jar包要去官网上下,下载地址如下:
mongo-java-driver-2.13.2.jar
 
3:部署和配置
将三个jar包分别拷贝到你的这几个位置下
每个节点的:
$HADOOP_HOME/share/hadoop/mapreduce
$HADOOP_HOME/lib
$HIVE_HOME/lib
在hive-site.xml上得hive.aux.jars.path配置上追加你 mongo-hadoop-hive-1.4-rc0.jar 文件

4:建表语句如下:
create table test
(
  id string,
  title string,
  desc string,
  uid string,
  cid string,
  attach struct<atype:string,itemid:string,bizid:string>,
  weight string,
  status string,
  loc struct<type:string,coordinates:string>,
  created string,
  modified string
)
stored by ‘com.mongodb.hadoop.hive.MongoStorageHandler‘
with serdeproperties(‘mongo.columns.mapping‘=‘{"id":"_id","title":"title","desc":"desc","uid":"uid","cid":"cid","attach.atype":"attach.atype","attach.itemid":"attach.itemid","attach
.bizid":"attach.bizid","weight":"weight","status":"status","loc.type":"loc.type","loc.coordinates":"loc.coordinates","created":"created","modified":"modified"}‘)
tblproperties(‘mongo.uri‘=‘mongodb://your_mongo_ip:27017/database_name.collection_name‘);

注意mapping里面,需要将mongo里面BSON的字段和Hive表的字段对应起来。

5:HUE
  如果你使用hue,那么请同步更新它的hive-site.xml文件,并且重启HiveMetaStore和HiveServer2这两个进程。
然后重启HUE。现在就可以在HUE中查询Mongdb的表了。

6:特别注意
  建好表之后,如果你连接的是生产环节的主库,而你又想修改这个表,请不要直接drop Hive中的MongoDB表。我曾经因为建表的时候,填写的路径是主库。在drop了Hive的mongo表之后,mongoDB中的表也被drop了。
  mongo-hadoop-connector在hive中建立的表,实际上是将mongo的数据,映射到了hive的表里,从而可以使用hive的sql来进行查询,但是实际上数据还是在mongodb中。所以如果要删除表,请将jar文件移除以断开连接之后,再删除hive表,否则会将mongo里面的数据直接删除了。
  当然运维没有做好mongodb权限管理也是一个因素。

结论:
公司的生产环境是hadoop2.5.1+spark1.4+hive0.13.1,而mongo-hadoop-core-1.4-rc0.jar对这套环境,基本上可以很好的支持(仅仅测试过一些简单的SQL语句)。
安全起见:
(1)使用这个插件的时候,请连接mongo的从库。
(2)删除hive里的mongo表的时候,请删除hive-site.xml里的jar包配置,在断开hive表对mongo的连接之后,再小心操作!如果不断开,直接drop,那么mongo里的表数据也会被drop。最重要的是,你们的运维要提前做好mongoDB的权限配置,给只读权限,以防止误操作。
(3)综合来讲,只要配置好后,这个插件可以很好的节省了ETL的工作,使得hive可以直接在mongo之上执行hivesql的查询,一定注意数据安全。

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于使用 MongoDB Connector for Hadoop 的经验和教训

标签:mongo   hadoop   分布式文件系统   hive   etl   

原文地址:http://blog.csdn.net/djy572568633/article/details/46654857

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!