、離線數(shù)據(jù)同步
DataX
阿里的Datax是比較優(yōu)秀的產品,基于python,提供各種數(shù)據(jù)村塾的讀寫插件,多線程執(zhí)行,使用起來也很簡單,操作簡單通常只需要兩步;
創(chuàng)建作業(yè)的配置文件(json格式配置reader,writer);
啟動執(zhí)行配置作業(yè)。
非常適合離線數(shù)據(jù),增量數(shù)據(jù)可以使用一些編碼的方式實現(xiàn),
缺點:僅僅針對insert數(shù)據(jù)比較有效,update數(shù)據(jù)就不適合。缺乏對增量更新的內置支持,因為DataX的靈活架構,可以通過shell腳本等方式方便實現(xiàn)增量同步。
參考資料:
github地址:https://github.com/alibaba/DataX
dataX3.0介紹:https://www.jianshu.com/p/65c440f9bce1
datax初體驗:https://www.imooc.com/article/15640
文檔:https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md
Sqoop
Sqoop(發(fā)音:skup)是一款開源的工具,主要用于在Hadoop(Hive)與傳統(tǒng)的數(shù)據(jù)庫(mysql、postgresql…)間進行數(shù)據(jù)的傳遞,可以將一個關系型數(shù)據(jù)庫(例如 : MySQL ,Oracle ,Postgres等)中的數(shù)據(jù)導進到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導進到關系型數(shù)據(jù)庫中。
地址:http://sqoop.apache.org/
Sqoop導入:導入工具從RDBMS到HDFS導入單個表。表中的每一行被視為HDFS的記錄。所有記錄被存儲在文本文件的文本數(shù)據(jù)或者在Avro和序列文件的二進制數(shù)據(jù)。
Sqoop導出:導出工具從HDFS導出一組文件到一個RDBMS。作為輸入到Sqoop文件包含記錄,這被稱為在表中的行。那些被讀取并解析成一組記錄和分隔使用用戶指定的分隔符。
Sqoop支持全量數(shù)據(jù)導入和增量數(shù)據(jù)導入(增量數(shù)據(jù)導入分兩種,一是基于遞增列的增量數(shù)據(jù)導入(Append方式)。二是基于時間列的增量數(shù)據(jù)導入(LastModified方式)),同時可以指定數(shù)據(jù)是否以并發(fā)形式導入。
Kettle
Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,數(shù)據(jù)抽取高效穩(wěn)定。
Kettle的Spoon有豐富的Steps可以組裝開發(fā)出滿足多種復雜應用場景的數(shù)據(jù)集成作業(yè),方便實現(xiàn)全量、增量數(shù)據(jù)同步。缺點是通過定時運行,實時性相對較差。
NiFi
Apache NiFi 是一個易于使用、功能強大而且可靠的數(shù)據(jù)拉取、數(shù)據(jù)處理和分發(fā)系統(tǒng),用于自動化管理系統(tǒng)間的數(shù)據(jù)流。它支持高度可配置的指示圖的數(shù)據(jù)路由、轉換和系統(tǒng)中介邏輯,支持從多種數(shù)據(jù)源動態(tài)拉取數(shù)據(jù)。
NiFi基于Web方式工作,后臺在服務器上進行調度。 用戶可以為數(shù)據(jù)處理定義為一個流程,然后進行處理,后臺具有數(shù)據(jù)處理引擎、任務調度等組件。
幾個核心概念:
Nifi 的設計理念接近于基于流的編程 Flow Based Programming。
FlowFile:表示通過系統(tǒng)移動的每個對象,包含數(shù)據(jù)流的基本屬性
FlowFile Processor(處理器):負責實際對數(shù)據(jù)流執(zhí)行工作
Connection(連接線):負責不同處理器之間的連接,是數(shù)據(jù)的有界緩沖區(qū)
Flow Controller(流量控制器):管理進程使用的線程及其分配
Process Group(過程組):進程組是一組特定的進程及其連接,允許組合其他組件創(chuàng)建新組件
參考資料
Nifi簡介及核心概念整理
官方網站:http://nifi.apache.org/index.html
二、實時數(shù)據(jù)同步
實時同步最靈活的還是用kafka做中間轉發(fā),當數(shù)據(jù)發(fā)生變化時,記錄變化到kafka,需要同步數(shù)據(jù)的程序訂閱消息即可,需要研發(fā)編碼支持。這里說個mysql數(shù)據(jù)庫的同步組件,阿里的canal和otter
canal
https://github.com/alibaba/canal
數(shù)據(jù)抽取簡單的來說,就是將一個表的數(shù)據(jù)提取到另一個表中。有很多的ETL工具可以幫助我們來進行數(shù)據(jù)的抽取和轉換,ETL工具能進行一次性或者定時作業(yè)抽取數(shù)據(jù),不過canal作為阿里巴巴提供的開源的數(shù)據(jù)抽取項目,能夠做到實時抽取,原理就是偽裝成mysql從節(jié)點,讀取mysql的binlog,生成消息,客戶端訂閱這些數(shù)據(jù)變更消息,處理并存儲。下面我們來一起搭建一下canal服務
早期,阿里巴巴B2B公司因為存在杭州和美國雙機房部署,存在跨機房同步的業(yè)務需求。不過早期的數(shù)據(jù)庫同步業(yè)務,主要是基于trigger的方式獲取增量變更,不過從2010年開始,阿里系公司開始逐步的嘗試基于數(shù)據(jù)庫的日志解析,獲取增量變更進行同步,由此衍生出了增量訂閱&消費的業(yè)務,從此開啟了一段新紀元。
ps. 目前內部版本已經支持mysql和oracle部分版本的日志解析,當前的canal開源版本支持5.7及以下的版本(阿里內部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48)
基于日志增量訂閱&消費支持的業(yè)務:
數(shù)據(jù)庫鏡像
數(shù)據(jù)庫實時備份
多級索引 (賣家和買家各自分庫索引)
search build
業(yè)務cache刷新
價格變化等重要業(yè)務消息
otter
https://github.com/alibaba/otter
otter是在canal基礎上又重新實現(xiàn)了可配置的消費者,使用otter的話,剛才說過的消費者就不需要寫了,而otter提供了一個web界面,可以自定義同步任務及map表。非常適合mysql庫之間的同步。
另外:otter已在阿里云推出商業(yè)化版本 數(shù)據(jù)傳輸服務DTS, 開通即用,免去部署維護的昂貴使用成本。DTS針對阿里云RDS、DRDS等產品進行了適配,解決了Binlog日志回收,主備切換、VPC網絡切換等場景下的同步高可用問題。同時,針對RDS進行了針對性的性能優(yōu)化。出于穩(wěn)定性、性能及成本的考慮,強烈推薦阿里云用戶使用DTS產品。
在web服務器中,作為代碼發(fā)布機A,文件同步到服務器B,C,D等集群中,可以忽略某個文件和目錄。
A服務器:內網IP: 192.168.1.2
B服務器:內網IP: 192.168.1.3
A和B的www用戶,或者root用戶免密登錄。
rsync是linux系統(tǒng)下的數(shù)據(jù)鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地復制,或者與其他SSH、rsync主機同步。
inotify是一種強大的、細粒度的、異步的文件系統(tǒng)事件監(jiān)控機制,linux內核從2.6.13起,加入了inotify支持,通過inotify可以監(jiān)控文件系統(tǒng)中添加、刪除,修改、移動等各種細微事件,利用這個內核接口,第三方軟件就可以監(jiān)控文件系統(tǒng)下文件的各種變化情況,而inotify-tools就是這樣的一個第三方軟件。
A和B都做
yum -y install xinetd
yum -y install rsync
chkconfig rsync on
service xinetd restart
systemctl restart xinetd
A上操作:
rsync -av root@192.168.1.3:/rsynctest/1.txt /root
B上操作
rsync -av /rsynctest/2.txt root@192.168.1.2:/root
rsync -av -e "ssh -p 22" /rsynctest/2.txt root@192.168.1.2:/root 【如果ssh的開啟的端口不是22 則用-e指定ssh端口】
只在A上操作即可。
安裝inotify-tools
wget http://js.地址funet8地址.com/centos_software/inotify-tools-3.14.tar.gz
tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
inotifywait -m /root 【查看inotify-tools是否運行正?!?
新開一個終端:
[root@localhost ~]# cd /root
[root@localhost ~]# touch bb.txt
監(jiān)控到
# inotifywait -m /root
Setting up watches.
Watches established.
/root/ OPEN .bash_profile
/root/ ACCESS .bash_profile
/root/ CLOSE_NOWRITE,CLOSE .bash_profile
/root/ OPEN .bashrc
/root/ ACCESS .bashrc
/root/ CLOSE_NOWRITE,CLOSE .bashrc
/root/ CREATE bb.txt
/root/ OPEN bb.txt
/root/ ATTRIB bb.txt
/root/ CLOSE_WRITE,CLOSE bb.txt
test.sh 為要運行網站實時同步腳本 其中定義了要同步的網站的路徑,要同步到的ip地址,哪些后綴名的文件忽略監(jiān)控,同步的用戶名,同步的文件列表,哪些文件不需要同步。
cat test.sh
#!/bin/sh
SRC=/data/wwwroot/web/test/ #代碼發(fā)布服務器目錄
DST=/data/wwwroot/web/test/ #目標服務器目錄
IP="192.168.1.3 192.168.1.4" # 這里可以用hostname,多個主機用空格
USER=www
inotifywait -mrq $SRC -e modify,delete,create,close_write,attrib | while read D E F
do
for i in $IP
do
#排除后綴名和目錄
/usr/bin/rsync -e 'ssh -p 60920' \
-ahqzt --exclude "*.swp" \
--exclude "*.svn" \
--exclude "test/" \
--exclude "runtime/" \
--delete $SRC $USER@$i:$DST
done
done
運行:
html的文件結構大家都是知道的了,總體分為head和body部分
我們要實現(xiàn)變色,在head部分實現(xiàn)格式
<style>
.tablex {border-collapse: collapse;}
.tablex tr {}
.tablex tr td {text-align:center; line-height:30px;}
.tablex tr td:hover { background-color:#f00; color:#fff;}
</style>
然后在body部分,使用table時候,注明class="tablex".這樣的話,就實現(xiàn)了我們所說的效果了。
附上完整代碼:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>測試鼠標移到到表格單元格背景顏色改變的</title>
<style>
.table1 {border-collapse: collapse;}
.table1 tr {}
.table1 tr td {text-align:center; line-height:30px;}
.table1 tr td:hover { background-color:#006030; color:#006030;}
</style>
</head>
<body>
<table class="table1" width="70%" border="1">
<tr>
<td>測試</td>
<td>測試</td>
<td>測試</td>
<td>測試</td>
</tr>
<tr>
<td>測試</td>
<td>測試</td>
<td>測試</td>
<td>測試</td>
</tr>
<tr>
<td>測試</td>
<td>測試</td>
<td>測試</td>
<td>測試</td>
</tr>
<tr>
<td>測試</td>
<td>測試</td>
<td>測試</td>
<td>測試</td>
</tr>
<tr>
<td>測試</td>
<td>測試</td>
<td>測試</td>
<td>測試</td>
</tr>
</table>
</body>
</html>
在任何一個瀏覽器中運行,效果如下
南大盛聯(lián)20年來一直致力于高端IT培訓--打造高級軟件人才實戰(zhàn)培訓專家,學生對我們的認可是我們一直前進的動力;項目團隊全球招聘,特聘來自海外的老師進行任教,采用100%商業(yè)項目進行實戰(zhàn)培訓,線上線下同步進行。
課程全部緊隨市場需求進行設計,并且動態(tài)進行調整;7天免費試聽,0首付開始學習,學完后進行100%推薦就業(yè),不滿意工作崗位2次推薦。
選定一個平臺,認識一群志同道合的朋友,你的未來人生路必定不一樣。
目前已經開設下面這些培訓項目
Java培訓
安卓培訓
JavaWeb培訓
Linux培訓
云服務器布置培訓
HTML5培訓
SEO培訓
視頻剪輯培訓
UI培訓
歡迎您們分享給自己愿意分享的朋友,大家一起來進步;相互轉告,咨詢,學習。
南大盛聯(lián)培訓理念:我懂,我也能讓你懂。
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。