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

参考文章:
Mongo hadoop connector 
https://github.com/mongodb/mongo-hadoop
wiki
https://github.com/mongodb/mongo-hadoop/wiki
ppt
http://www.slideshare.net/mongodb/hadoop-webinar?from_embed_lead_cta=true&tracking_id=167b463f3b941754
教程
http://docs.mongodb.org/ecosystem/tools/hadoop/

部署的步骤就很简单了,总结如下:
1:下载
wget  https://github.com/mongodb/mongo-hadoop/archive/r1.4.0-rc0.tar.gz

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包要去官网上下,下载地址如下:
http://mongodb.github.io/mongo-java-driver/
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,
  weight string,
  status string,
  loc struct,
  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的查询,一定注意数据安全。

你可能感兴趣的:(hadoop)