天天看點

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

數棧是雲原生—站式資料中台PaaS,我們在github和gitee上有一個有趣的開源項目:FlinkX,FlinkX是一個基于Flink的批流統一的資料同步工具,既可以采集靜态的資料,也可以采集實時變化的資料,是全域、異構、批流一體的資料同步引擎。大家喜歡的話請給我們點個star!star!star!

github開源項目:https://github.com/DTStack/flinkx

gitee開源項目:https://gitee.com/dtstack_dev_0/flinkx

「表格存儲」是 NoSQL 的資料存儲服務,是基于雲計算技術建構的一個分布式結構化和半結構化資料的存儲和管理服務。

表格存儲的資料模型以「二維表」為中心。

表有行和列的概念,但是與傳統資料庫不一樣,表格存儲的表是稀疏的

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

每一行可以有不同的列,可以動态增加或者減少屬性列,建表時不需要為表的屬性列定義嚴格的 schema。

OTS的資料遷移可以使用「DataX」完成全量資料遷移。但由于部分資料表的資料量較大,無法在指定的時間視窗内完成全量遷移,且目前DataX隻能針對主鍵值進行範圍查詢,暫不支援按照屬性列範圍抽取資料。

是以可以按如下兩種方式實作全量+增量的資料遷移:

分區鍵包含範圍資訊(如時間資訊、自增ID),則以指定range為切分點,分批次遷移。

分區鍵不包含範圍資訊,則可以采用在應用側雙寫的模式将資料分批次遷移,寫入目标環境同一張業務表。利用OTS的主鍵唯一性,選擇對重複資料執行覆寫原有行的政策來保證資料唯一性。

總而言之,言而總之,我們不生産資料,此刻,我們是大資料的搬運工。

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

接下來呢,本文就以應用側調整為雙寫模式為例,詳細說明OTS資料遷移、校驗過程。

其中OTS資料遷移流程具體如下圖所示:

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

OTS資料遷移之準備工作

預遷移階段:雙寫模式中的大表全量遷移

正式遷移階段:雙寫模式中的增量表全量遷移、其餘小表的全量遷移

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

1、 準備工作

為保證新老環境的資料一緻性,需要在開始資料遷移前,對目标環境的OTS資料表進行資料清空操作,Delete操作是通過DataX工具直接删除表内資料,無需重建立表。

具體操作如下:

1) 配置DataX任務

在使用DataX執行資料清空前,需配置對應資料表使用DataX執行Delete任務所需的json檔案。在清空資料的配置中,reader與writer均配置目标端的連接配接資訊,且資料寫入模式配置DeleteRow即可,具體内容如下:

2 )執行datax任務

登入datax所在ECS後,進入datax所在路徑

在對應的工具機分别執行del_pre.sh腳本,即可開始目标環境對應表的資料清空,具體指令如下:

del_pre.sh腳本内容如下:

2、 資料遷移

在不停服務的情況下把源環境内資料量較大的資料表全部遷移到目标環境内對應的資料表。

1)配置DataX任務

在DataX對資料表配置相應的json檔案,遷移配置的具體内容如下:

需注意,由于OTS本身是NoSQL系統,在遷移資料的配置中,必須配置所有的屬性列,否則會缺失對應屬性列的值。

2) 執行datax任務

在對應的工具機分别執行pre_transfer.sh腳本,即可開始專有域OTS到專有雲OTS的資料遷移,具體指令如下:

pre_transfer.sh腳本内容如下:

呐,此時,萬事俱備,資料隻待遷移!

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

在遷移之前,讓我們最後再對焦一下資料遷移的目标:

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

下面,進入正式遷移階段!

1、OTS資料靜默

OTS的資料靜默主要是通過觀察對應表的資料是否存在變化來判斷,校驗方式主要包括行數統計、内容統計。

1)行數統計

因OTS本身不提供count接口,是以采用在hive建立OTS外部表的方式,讀取OTS資料并計算對應資料表的行數,具體操作如下:

建立外部表

啟動hive,建立上述資料表對應的外部表;為提高統計效率,外部表可以隻讀取OTS的主鍵列,建表語句示例如下:

進入腳本所在路徑

登入Hadoop叢集master所在ECS,進入hive所在目錄

執行行數統計

執行pre_all_count.sh腳本,即可開始源環境内OTS對應表的行數統計

pre_all_count.sh腳本内容如下:

連續執行兩次行數統計,若兩次統計結果一緻則說明資料已經靜默,資料寫入以停止。

2)内容統計

由于部分資料表分區鍵對應的值比較單一,導緻資料全部存儲在同一個分區。若采用hive統計行數會耗時太久,是以對于這個表使用datax将OTS資料導入oss的方式進行内容統計,具體操作如下:

登入上述表格對應的ECS,進入datax所在路徑;

執行内容校驗

a、執行check_table.sh腳本,即可将源環境内OTS資料表導出到OSS;

check_table.sh腳本内容如下:

b、擷取OSS object的ETAG值,寫入對應檔案table_check01.rs

連續執行兩次内容統計,對比兩次導出object的ETAG值,若結果一緻則說明資料已經靜默,資料寫入以停止。

2、OTS資料遷移

1)準備工作

為保證遷移後新老環境資料一緻,防止目标環境因測試産生遺留髒資料,在進行資料遷移前,需要将目标環境的OTS的其餘全量表進行資料清空。

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

「資料清空方式」主要有Drop、Delete,兩者的差別如下:

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

a、Drop表操作

登入OTS圖形化用戶端所在工具機,使用如下資訊連接配接指定OTS執行個體,并進行對應表的drop操作;

确認删除後,再在用戶端重新建立對應的資料。

b、 Delete表操作

Delete操作是通過DataX工具直接删除表内資料,無需重建立表。DataX所需的配置檔案參考2.1.1所示。

在對應的工具機分别執行delete腳本,即可開始目标環境OTS的對應表的資料清空,具體指令如下:

del_table_01.sh腳本内容如下:

2)資料遷移

在源環境停止服務的情況下把雙寫模式中的增量表全量遷移以及其餘小表全部遷移到目标環境内對應的資料表。

a、配置DataX任務

在DataX對上述資料表配置相應的json檔案,遷移配置的具體内容參考2.2.1,在遷移資料的配置中,需要列全所有的屬性列。

b、執行DataX任務

登入DataX所在ECS後,進入DataX所在路徑

在對應的工具機分别執行transfer.sh腳本,即可開始專有域OTS到專有雲OTS的資料遷移,具體指令如下:

transfer.sh腳本内容如下:

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

3、OTS資料校驗

新老環境OTS的資料校驗方式均包括行數統計、内容統計,具體如下:

1)源環境資料統計

源環境OTS資料表的資料量統計依據資料靜默期間最後一次的統計結果即可。

2)目标環境資料統計

a、行數統計

因OTS本身不提供count接口,且目标環境ODPS支援建立OTS外部表,是以采用在ODPS建立OTS外部表的方式,讀取OTS資料并計算對應資料表的行數,具體操作如下:

登入odpscmd,建立上述資料表對應的外部表;

登入odpscmd工具所在ECS,進入odps所在路徑;

執行newots_count.sh腳本,即可進行目标環境内OTS對應表的行數統計;

newots_count.sh腳本内容如下:

b、 内容統計

由于源環境的部分資料表采用内容統計的方式進行資料校驗,為了友善對比資料是否一緻,是以目标環境也采用内容統計的方式,具體操作參考3.1.2。

數棧技術分享:OTS資料遷移——我們不生産資料,我們是大資料的搬運工

繼續閱讀