前状:
平台目前还没有完善的mongodb数据同步方式,在拉取公司埋点系统countly数据时,起初通过编写MapReduce读取mongodb数据转化成BSONObject写入到HDFS,在hive中创建映射表,使得BSON格式数据可以通过hive sql方式进行查询
通过这种方式存在弊端:
1.执行MapReduce耗时太长,这里一部分是网络原因,还有一部分是起了太多的map 任务,也就是将任务切分的过细,每个map只处理很少的任务,耗费太多资源
2.MongoDB与Hadoop部署在不同的服务器上,服务器的带宽改变了,经常在MapReduce执行的过程中中断,报SocketTimeout错误,增大连接超时参数timeout值得到一些缓解,但还是存在次此问题
改善方式:
在数据拉取过程使用mongodb自有dump方式
mongodump 是MongoDB备份的一种方式,可以dump下整个数据库,也可以指定dump某个collection,dump下来的每个collection 都是BSON文件
执行脚本如下:
mongodump -h $host -u $user -p $password -d $db -c $collection -o $output -q $queryS