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)執行

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM