Mongodb同步数据到hive(二)
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(二)的更多相关文章
- MongoDB之数据库命令操作(二)
现在详细学习一下mongodb的数据库操作. 查询语句 db.xxx(集合name).find() # 查询 db.xxx(集合name).findOne() # 只返回一个 db.xxx(集合nam ...
- MySQL到MongoDB的数据同步方法!
许多公司随着业务发展,单数据库实例已经不能满足业务需要,需要定期进行数据交换,同步到MongoDB, 或其他位置的MySQL,以分散数据库的并发压力. 目前大部分都采用自行开发的方式处理,存在开发成本 ...
- 基于nodejs将mongodb的数据实时同步到elasticsearch
一.前言 因公司需要选用elasticsearch做全文检索,持久化存储选用的是mongodb,但是希望mongodb里面的数据发生改变可以实时同步到elasticsearch上,一开始主要使用ela ...
- 【mongodb系统学习之十二】mongodb修改数据(一)
十二.mongodb修改数据:update 1).修改数据库数据:update:语法 db.collectionName.update({},{},boolean,boolean): 2).updat ...
- logstash-out-mongodb实现elasticsearch到Mongodb的数据同步
本文主要实现将Elasticsearch中的索引数据Index同步到Mongodb中的集合collection中. 0.前提 1)已经安装好源数据库:elasticsearch V2.X; 2)已经安 ...
- MongoDB 初始化数据同步
MongoDB初始化数据同步: 副本集中的成员启动之后,就会检查自身的状态,确定是否可以从某个成员那里进行同步.如果不行的话,尝试从其他成员那里进行完整的数据复制. 这个过程就是初始化同步(initi ...
- 【转】CentOS5.6下配置rsync内网同步数据到外网
[转]CentOS5.6下配置rsync内网同步数据到外网 本文转自:http://www.linuxidc.com/Linux/2012-06/64070.htm 一.需求 卫士那边有一个需求,就是 ...
- zookeeper源码分析三LEADER与FOLLOWER同步数据流程
根据二)中的分析,如果一台zookeeper服务器成为集群中的leader,那么一定是当前所有服务器中保存数据最多的服务器,所以在这台服务器成为leader之后,首先要做的事情就是与集群中的其它服务器 ...
- 将数据导入hive,将数据从hive导出
一:将数据导入hive(六种方式) 1.从本地导入 load data local inpath 'file_path' into table tbname; 用于一般的场景. 2.从hdfs上导入数 ...
随机推荐
- 转载:<context-param>与<init-param>的区别与作用
<context-param>的作用:web.xml的配置中<context-param>配置作用1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web ...
- Gitlab搭建安装及使用中遇到的问题。
一.CentOS7安装gitlab-ce 1.下载及安装rpm软件包. 下载RPM包 curl -LJO https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ ...
- 使用FFMpeg命令行录屏推rtmp流
最近在做局域网内屏幕分享方面的东西,要把录制一台设备的屏幕然后实时推送给内网的一个或多个用户. 做了很多实验,效果还没有达到要求,这里分享一下推rtmp流的实验. 实验使用到的各种工具:FFmpeg. ...
- 移植Max中的控制器到Unity - 前言
一切源自于一个ppt http://pan.baidu.com/s/1kT8x2V9 看到这个ppt之前,其实自己也想过将Max当中的一些约束移植到游戏中,一方面是那时候能力不足,另一方面还是自己不那 ...
- 【转】4G18的低成本NA玩法
首先是要再次强调一次,4G18的缸径是76MM,冲程是87.5MM.属于典型的长冲程低转发动机! 这种设计的优点是比较适合市区走停的工作状况,省油. 如果要针对改装方案而言因为这种低转时便可输出大扭矩 ...
- jzoj5925
tj:這道題題解有錯 水法ac代碼如下: #include<bits/stdc++.h> using namespace std; typedef long long ll; ll t,n ...
- position:absolute元素 怎样居中
<div style = 'height:20px;position:absolute;z-index:9999;top:0;left:0;right:0;margin:auto;'> & ...
- RabbitMQ Java实例
引入RabbitMQ的jar包 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amq ...
- cas单点登陆系统-casServer搭建
最近工作比较忙,空闲的时间在搞单点登陆系统,自己写了一套SSO在GitHub上,过程走通了.通过这个例子,自己熟悉了流程,而且破天荒的使用了抽象设计模式,并且熟悉了cookies和session的使用 ...
- Python小白学习之路(十三)—【递归调用】
一.递归调用定义 在函数内部,可以调用其他函数. 如果在调用一个函数的过程中直接或间接调用自身本身,则称为递归调用 从某种意义上来说,递归调用可以实现无限循环 二.递归调用的特性 必须有一个明确的结束 ...