Mongodb同步数据到hive(二)

1、            概述

上一篇文章主要介绍了mongodb-based,通过直连mongodb的方式进行数据映射来进行数据查询,但是那种方式会对线上的数据库产生影响,所以今天介绍第二种方式—BSON-based,即使用mongoexport将所需要的表导出到本地文件,文件个是默认为bson。然后将导出的bson文件put到HDFS文件系统里面,最后在hive里面创建相应的表来使用hive sql进行查询。

2、            导出bson文件

使用mongodump命令,导出所需要的collection或字段。常用的命令如下:

1#/data/mongodb/bin/mongodump  -uhqms -phqms123 -h 10.10.111.192:27017  --collection users --db saturn -o /data/mongodata/

 

!-u :指定用户,用于备份的用户必须对数据库有读的权限。
!-p: 指定用户密码
!-h:指定数据库服务器ip和端口,例如:ip:port
!-d: 指定数据库名称
!--collection: 指定要备份的collection的名称 
!-o:指定输出路径

3)如果mongodb与hadoop和hive是分开部署的,那么需要在hadoop服务器上部署一个mongodb,此服务不用运行,只是为了使用mongoexport命令copy数据。

3、            将文件导入到HDFS

1)首先需要在HDFS里面创建相应的目录,用来存储相应的表文件。

2)注意,每个表需要对应创建一个目录

3)命令如下(我已经将hadoop的bin加到环境变量里面了):

#hdfs  dfs  -mkdir  /myjob

#hdfs  dfs  -mkdir  /myjob/job1

!!注意,hdfs的目录必须一级一级的创建,不能一次创建多级。

#将文件传入到HDFS

#hdfs  dfs  -put  /data/job1  /myjob/job1

@/data/job1 为本地路径,即导出的mongodb的文件的路径

@/myjob/job1 为HDFS的路径

4)查看已经上传到HDFS的文件

#hdfs  dfs  -ls  /myjob/job1

5)修改权限

#hdfs  dfs  -chmod 777  /myjob/job1

6)获取hdfs里面的文件

#hdfs  dfs  –get  /myjob/job1  /data/job1

7)删除文件

#hdfs  dfs  -rm  /myjob/job1

删除目录

#hdfs  dfs  -rm  -r /myjob

Myjob目录需要为空,如果要强制删除非空目录,需要加上-f。

4、            hive里面创建表

#hive

hive>create table if not exists ${table_name}

(

Id string,

Userid string,

.

.

.

comment ‘描述’

row  format serd  ‘com.mongodb.hadoop.hive.BSONSerDe’
with serdeproperties('mongo.columns.mapping'='{hive字段与mongo字段的映射关系}')
stored as inputformat 'com.mongodb.hadoop.mapred.BSONFileInputFormat'
outputformat 'com.mongodb.hadoop.hive.output.HiveBSONFileOutputFormat'
location ‘HDFS的目录’
 
#location指示的是bson文件所在的HDFS目录,即/myjob/job1.
 
5、为了方便使用,将导出mongodb到本地,并将文件导入到HDFS里面。做了一个脚本。
#cat hdfs.sh

#!/bin/bash
#此脚本用于将mongodb里面的collection到处为BSON文件,并将文件上传到HDFS里面

#定义要导出的表名
list="
merchants
martproducts
products
coupons
couponlogs
reviews
orderoplogs
orders
"
#判断文件是否存在,存在则删除
for i in $list
do
if [ -e /data/mongodata/$i ];then
rm -rf /data/mongodata/$i
sleep 5s
fi
done

#从mongodb导出数据到本地
for a in $list
do
nohup /data/mongodb/bin/mongodump  -uhqms -phqms123 -h 10.10.111.192:27017  --collection $a --db saturn -o /data/mongodata/$a >>/data/nohup.out 2>&1 &
sleep 1m
done

#将HDFS里面的文件删除
for b in $list
do
nohup /data/hadoop-2.7.3/bin/hdfs  dfs -rm /$b/*.bson >>/data/nohuprm.out 2>&1 &
done

#将本地的文件导入到HDFS里面
for c in $list
do
cd /data/mongodata/$c/saturn
/data/hadoop-2.7.3/bin/hdfs  dfs -put $c\.bson /$c
sleep 1m
done

 
 
5、将脚本添加计划任务,有两种方式:一种是使用crontab;一种是使用jenkins。
1)使用crontab
#crontab  -e
0 00 * * * /data/hdfs.sh 2>&1 &
 
2)使用jenkins
1、创建一个项目,名称自己定义,


2、创建运行周期


3)执行

												

Mongodb同步数据到hive(二)的更多相关文章

  1. MongoDB之数据库命令操作(二)

    现在详细学习一下mongodb的数据库操作. 查询语句 db.xxx(集合name).find() # 查询 db.xxx(集合name).findOne() # 只返回一个 db.xxx(集合nam ...

  2. MySQL到MongoDB的数据同步方法!

    许多公司随着业务发展,单数据库实例已经不能满足业务需要,需要定期进行数据交换,同步到MongoDB, 或其他位置的MySQL,以分散数据库的并发压力. 目前大部分都采用自行开发的方式处理,存在开发成本 ...

  3. 基于nodejs将mongodb的数据实时同步到elasticsearch

    一.前言 因公司需要选用elasticsearch做全文检索,持久化存储选用的是mongodb,但是希望mongodb里面的数据发生改变可以实时同步到elasticsearch上,一开始主要使用ela ...

  4. 【mongodb系统学习之十二】mongodb修改数据(一)

    十二.mongodb修改数据:update 1).修改数据库数据:update:语法 db.collectionName.update({},{},boolean,boolean): 2).updat ...

  5. logstash-out-mongodb实现elasticsearch到Mongodb的数据同步

    本文主要实现将Elasticsearch中的索引数据Index同步到Mongodb中的集合collection中. 0.前提 1)已经安装好源数据库:elasticsearch V2.X; 2)已经安 ...

  6. MongoDB 初始化数据同步

    MongoDB初始化数据同步: 副本集中的成员启动之后,就会检查自身的状态,确定是否可以从某个成员那里进行同步.如果不行的话,尝试从其他成员那里进行完整的数据复制. 这个过程就是初始化同步(initi ...

  7. 【转】CentOS5.6下配置rsync内网同步数据到外网

    [转]CentOS5.6下配置rsync内网同步数据到外网 本文转自:http://www.linuxidc.com/Linux/2012-06/64070.htm 一.需求 卫士那边有一个需求,就是 ...

  8. zookeeper源码分析三LEADER与FOLLOWER同步数据流程

    根据二)中的分析,如果一台zookeeper服务器成为集群中的leader,那么一定是当前所有服务器中保存数据最多的服务器,所以在这台服务器成为leader之后,首先要做的事情就是与集群中的其它服务器 ...

  9. 将数据导入hive,将数据从hive导出

    一:将数据导入hive(六种方式) 1.从本地导入 load data local inpath 'file_path' into table tbname; 用于一般的场景. 2.从hdfs上导入数 ...

随机推荐

  1. tomcat监听activemq jms配置

    当从webservice接收到信息的时候,消息生产者producer立刻把收到的消息放入到jms里面,消费者cusomer这时要设置一个监听,当生产者发送消息时,只要消息被发出来,消费者就会接收到消息 ...

  2. LinkServer--访问远程数据表三种方式

    在TSQL中访问远程数据库有三种方式:1.OPENROWSET2.OPENDATASOURCE3.LinkServer 在使用openrowset/opendatasource前搜先要启用Ad Hoc ...

  3. c#获取word文件页数、字数

    引用命名空间:using Microsoft.Office.Interop.Word; //启动Word程序 Application myWordApp = new ApplicationClass( ...

  4. 使用FluentScheduler实现定时任务管理

    之前定时任务一直用的Windows服务,前段时间发现FluentScheduler这个框架,他跟Quarz.Net,Hangfire一样都是任务调度框架,但是相对使用而言我觉得FluentSchedu ...

  5. Day5 作业(完成)

    1,有如下变量(tu是个元祖),请实现要求的功能# tu = ("alex", [11, 22, {"k1": 'v1', "k2": [& ...

  6. Java程序员的日常—— Spring Boot单元测试

    关于Spring boot 之前没有用Spring的时候是用的MockMvc,做接口层的测试,原理上就是加载applicationContext.xml文件,然后模拟启动各种mybatis\连接池等等 ...

  7. 【wepy实战】wepy搭建完整项目

    使用小程序框架wepy,搭建完整实战项目.文章将从项目结构.配置.模块等进行逐步分析和学习. 文章适合小程序开发新手以及有经验的小程序developer,不喜勿喷,不吝赐教! 本文为作者原创,转发请标 ...

  8. WPF一步步开发XMPP IM客户端1:入门

    [起因&目标] 因为工作原因接触openfire服务端和spark客户端开发,主要是基于openfire扩展开发了针对企业用途的服务器插件,还开发了各个平台上的客户端(Windows\mac\ ...

  9. 在vue-cli建的vue项目中使用sass

    前面已使用vue-cli新建了一个vue项目,参考  使用命令行创建一个vue项目的全部命令及结果 首先看下新建项目的页面和代码,有部分修改,可忽视,如下图:     然后我们在页面添加sass的代码 ...

  10. POJ 1032

    #include<iostream> using namespace std; int main() { int n; int num; ; int i,j; cin>>num ...