業務背景
公司上大數據,要把sqlserver裏的業務數據實時同步到大數據平臺上。幾天調研後選擇StreamSet作爲ETL工具。技術選型的理由主要有幾點:
- sqlserver的坑太深,網上找了很多工具對sqlserver的支持力度都不是很大(微軟全家桶的要哭了~)
- 自己開發ETL程序耗時太長,同時配套的ETL metrics工具也需要配備,勞民傷財。感覺有時間開發不如把精力放在業務數據研究和指標計算上。
- sqlserver支持兩種實時同步機制:CDC和Change Tracking,CDC使用起來比較重 果斷放棄。
streamset安裝
我用的是CDH6.2版本集成化了StreamSet,方便管理。
- streamset下載地址:https://archives.streamsets.com/index.html
- 配置本地yum源
將下載的三劍客文件放在一個新建文件夾中,並移動到/var/www/html 目錄中,做離線包的下載地址,用瀏覽器訪問如下,表示成功
- 配置CSD
將STREAMSETS-3.1.4.0.jar拷貝到/opt/cloudera/csd,並更改權限,然後重啓cloudera-scm-server服務,沒有csd文件夾就自己新建一個。
4.下載分發激活Parcel包
傳送門:https://cloud.tencent.com/developer/article/1078852
sqlserver之Change Tracking
sqlserver上開啓Change Tracking,這裏要做到表級別Change Tracking
- 開啓庫級別Change Tracking
ALTER DATABASE 數據庫名 SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS,AUTO_CLEANUP = ON)
- 開啓表級別Change Tracking
ALTER TABLE [dbo].[Department] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON)
Streamset之sqlserver配置
- 右上角點擊All Stages找到SQLxxx
- 配置分析
StreamSet之Hive配置
配置Hive要使用HiveMeData和HiveMeStore兩個插件
重要參數詳解:
- Database Expression:Hive數據庫選擇,不寫則是默認庫
- Partition Configuration:設置Hive分區的參數,這裏可以設置成多級分區,只要選擇“+”就行,其中Partition Value Expression是獲取分區號數據的表達式,可以自己生成也可以根據表字段裏的數據定義分區。因爲我們數據原因,我這裏表達式寫的很蛋疼~有關表達式的寫法建議大家直接去擼下官網(PS:Streamset的官網文檔還是很不錯的,個人感覺比flink強多了!!)。
官網functions傳送門:https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Expression_Language/Functions.html#concept_lhz_pyp_1r
StreamSet之HDFS配置
重要參數詳解:
File System URI:hdfs的URI連接
Configuration Files Directory:hdfs的config文件位置,需要加載core-site.xml
Files Prefix:生成hdfs的文件前綴,建議大家改一下,不然生成的文件名巨長~
Files Suffix:生成hdfs的文件後綴,爲用了txt格式,記住不用加點
Directory in Header:打鉤後會直接落盤到hive的/user/hive/warehouse/中,如果不打鉤,則可以自定義落盤路徑
Compression Codec :選擇壓縮算法
Use Roll Attribute :回滾機制
StreamSet之踩坑實戰
處理數據同步過程中避免不了加減字段,清洗數據等問題,業務越複雜的OLTP架構中數據遷移越是麻煩,在學習使用StreamSet中,建議大家先去擼清楚官網。我自己在學習使用中總結兩個方面感覺很有必要:
- 函數表達式,這裏的坑很多,要想使用數據,調用數據都要通過表達式來完成
- Field開頭的插件大多是對數據做處理加工的,大家使用前一定要對Field開頭的插件挨個看一遍。我自己就使用了Field Type Converter(字段值類型轉換)、Expression Evaluator(表達式執行器)
專注大數據生態、Spark/Flink、Java/Scala仔
架構未滿、Coding至上、一直在路上