基於現在接觸的ETL工具(datax和kettle)做個小總結


現階段需要做數據庫同步工作,目前調研了兩個工具datax和kettle

目前雖然環境使用的是kettle+jenkins調度平台方案,但是多多少少會有一些不太令人滿意的地方,但應該算是滿足大部分需求了,先暫時這樣實現

 

這兩者各有優缺點,基本的就不總結了。現在說說一些關鍵點:

基本方面:

1.datax適合做數據同步工作;kettle適合數據清洗,轉換工作

目前成型的可視化界面,datax推薦datax web,kettle后期維護用的界面推薦jenkins/kettle-manager簡單

2.datax對於數據庫壓力比較小,全量讀取速度優於kettle

3.對於一些方案的可行性,小數據量的選擇全量對比,10w數據量大概3s完成插入更新全量抽取過程,還是比較快的。小數據量的情況下差別不大

4.目前生產可行方案可以選擇datax+datax web/kettle

5.具體一些方案https://blog.csdn.net/inthat/article/details/84146346(雖然是datax的,但是kettle也適用)

6.日志方案是對於大量數據的最優選擇,mysql用maxwell抓取日志或者上邊提供的方案,oracle用ogg,sqlserver目前不清楚需要再找

7.保證kettle后期穩定的情況下用windows自帶的定時任務或者Linux中用crontab,不過后續的jenkins完全能勝任

8.部署kettle到服務器上有可能提示少包的問題(具體部署步驟https://www.jianshu.com/p/fa398f104e5d   或者   https://www.cnblogs.com/yangp/p/11410137.html)

貼上鏈接:wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/EPEL:/el7/RHEL_7/x86_64/webkitgtk-2.4.9-1.el7.x86_64.rpm

yum install webkitgtk-2.4.9-1.el7.x86_64.rpm

或者后續的包可以對應下載http://rpmfind.net/linux/rpm2html/search.php?query=libwebkitgtk-1.0.so.0%28%29%2864bit%29&submit=Search+...&system=&arch=

9.docker部署mysql

https://blog.csdn.net/weixin_40693633/article/details/84074459

10.部署jenkins

 https://blog.csdn.net/qq_35868412/article/details/89475386(這里比較詳細)

進行配置文件配置,

在 etc/sysconfig/jenkins里 改端口

 https://blog.csdn.net/u013232219/article/details/104370953

#修改jenkins鏡像文件

cd ~/.jenkins/updates

 sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

 

一些小坑:mysql 8.0驅動jar包方面更換,導致不能用,需要注意驅動

#所有命令找不到
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

#刷新環境變量:

source /etc/profile

#給腳本賦予權限:

chmod +x ./data-integration/*.sh

datax用的python版本要注意,2.6+版本和3.0+版本有語法差別(記得是括號問題)

centos 7可以通過添加打印機方式避免開機總是黑屏

部署kettle和jenkins會存在一些坑

 

 

#書寫sh腳本時候

 

 在腳本里面添加

source /etc/profile即可

 

11.關於調度平台問題,目前如果想要放入docker容器里面然后再放入集群中有難度,使用某個服務上xxl-job調度,carte.sh方法還得提供個ip地址,或者xml文件,目前沒想到怎么實現,目前可能方法可能是用docker庫里的kettle鏡像,自己生成一個,或者自己通過源碼

生成一個docker file文件,打包完成后再進行部署

12.目前8.0版本和8.2版本有差異,生成的鏡像文件再運行job文件可能存在問題,而docker庫里面的8.3版本可以運行8.2版本

13.如果是從接口獲取數據的方式,並且接口調用頻率有限制

 

 

 可以通過這種方式(中間加個等待時間)然后獲取的也是系統時間和時間戳存放的時間中間數據量,這樣可以變化的獲取頁數和對應的所有數據,針對接口返回404情況,可以獲取唯一標識存放到臨時表里,然后再遍歷這個唯一標識去做二次請求,這樣

 

如果實時更細數據量不多的情況下,其實可以用先從臨時表里獲取對應的404對應的唯一標識,然后先看看原數據里面有沒有,如果沒有的話則會進入插入更新,雖然這個組件很慢,但是對於已經在前邊進行排除了,只是進行更新對比,所以實質上數據量並不大
進行全量比對方式也是可行的(目前方法只是針對目前做的東西,通用的其實還是日志的效果好,但是難度大一些,需要再研究)

重點是這幾個轉換方案太蠢了,步驟過多影響速度,還好現在用時間戳,並行所有job只用37-45s左右,但是數據量一大就有問題了不適合做現在或者以后的最佳方案,所以只做思路參考

 

14.其實清洗最優方案還是通過python去處理,或者使用data-web的方式,那個是在git上有源碼,並且結合的正好是xxl-job調度平台,可以使用這個調度平台+整合數據的方案

 

 15.自動獲取字典項:https://www.cnblogs.com/majinju/p/5002626.html

 

16.關於部署到阿里雲服務器的上的問題,一定一定要添加    安全組,不然會報錯,並且CONVERT_TO_NULL是可以使用。 並且有兩個方向,一個入一個出

 

 

2021.1.30更新

17.今天重新部署生產環境,發現有防火牆問題需要更改

https://www.cnblogs.com/ming369/p/10403397.html

/var/lib/jenkins路徑下的 hudson.model.UpdateCenter.xml文件更改成

 

 

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirror.xmission.com/jenkins/updates/update-center.json</url>
  </site>
</sites>

后續繼續補充


免責聲明!

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



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