HBase使用者福利
新使用者9.9元即可使用6個月雲資料庫HBase,更有低至1元包年的入門規格供廣大HBase愛好者學習研究,更多内容
請參考連結概覽
BDS針對開源HBase目前存在的同步遷移痛點,自主研發的一套資料遷移的平台。有關于BDS的基本介紹,可以檢視
《BDS-HBase資料遷移同步的利器》。本文主要介紹目前在阿裡雲上,BDS是如何進行HBase叢集之間的資料遷移和資料的實時同步的。
架構

- BDS采用分布式的架構,由BDSMaster節點生成、排程任務給各個BDSWorker節點
- BDSWorker節點負責具體的任務執行,是無狀态的,友善擴容、更新
- Reader 和 Writer 插件化,支援跨版本,異構資料源的遷移和實時資料同步
曆史資料遷移方案
對于曆史存量資料的遷移,我們是通過拷貝檔案的方式,将資料檔案拷貝到目标叢集,然後統一對檔案進行Bulkload,将資料裝載到目标表中
遷移流程:
- 客戶送出曆史資料遷移的任務
- BDSMaster擷取原表的Region分區情況,針對每一個Region分區生成一個Task,平均下發給各個BDSWorker節點
- BDSWorker節點接收到Task任務之後,會遷移指定Region分區下的HFile檔案,HFile的拷貝走的是位元組流的拷貝,并且能夠自動處理Region的Split、Merge、Compaction等操作導緻HFile檔案的變化,保證檔案遷移過程中的不丢失
- BDSMaster在遷移過程中會對各個BDSWorker上執行的任務進度、詳情進行監控,對于逾時的任務,異常任務進行重試
- 所有的任務都遷移完成之後,BDSMaster會通知目标叢集進行資料的裝載,将資料裝載到目标表中
BDSWorker 當機的處理
BDSMaster通過ZK監聽各個BDSWorker的狀态,當某個BDSWorker當機,BDSMaster會将當機BDSWorker上正在執行的Task,重新下發給其他的BDSWorker,其他BDSWorker接收到重試的Task,會從中斷的地方開始重試,防止重複遷移已經遷移完成的資料
對Region的Split、Merge、Compaction的處理
Region的Split、Merge、Compction會導緻HFile檔案在遷移的過程中不斷的發生的變化
- 某個檔案在遷移的時候被Compaction合并了,檔案就不存在了
- 某個Region在遷移的時候發生了split,Region不存在了
- 遷移的時候HFile是個引用檔案,不包含實際的資料,隻是對源檔案的引用
針對HFile檔案是個引用檔案、HFile檔案被合并了,BDSWorker會自動處理,保證資料的不丢失,針對Region的Split、Merge,BDSMaster會感覺原表的變化,擷取新生成的Region生成新Task,下發給BDSWorker去執行
Bulkload優化
資料檔案拷貝完成,在對資料進行裝載的時候需要對HFile排序、切分和分組,當原表和目标表的分區很不一緻,就會導緻大量的HFile被切分,進而影響bulkload的速度。
是以,我們在拷貝檔案的時候BDS會自動對要分區的檔案進行拆分,在Bulkload的時候就可以直接load各個HFile檔案到對應的Region分區中。
資料本地化率的優化
資料遷移完,RegionServer在讀取檔案資料的時候,可能存在大量的遠端讀(資料不落在本地的DN上,需要通路遠端的DN),會導緻讀RT變高。
BDS在遷移檔案的時候,會盡可能的将資料寫到對應RegionServer所在的DN上。
BDS vs 開源方案
- 在遷移過程中,幾乎不會和叢集的HBase互動,隻和叢集的HDFS進行互動,盡可能的避免了對線上業務的影響
- 檔案的遷移走的是檔案位元組流的拷貝,是以比通常API層的資料遷移通常能節省50%以上的流量
- 遷移不需要修改源叢集目标的配置,也不需要在叢集上做什麼操作,不占用HBase叢集的存儲、計算、記憶體等資源
- 資料遷移考慮本地化率,可以保證遷移完之後目标叢集有更好的讀rt
- 遷移的檔案根據目标表的分區情況自動拆分,大大提高了大表資料裝載的速度
- 有完善的failover機制,支援異常任務重試,斷點續傳
- BDSWorker無狀态,更新、擴容非常容易,便于運維
- 支援配置的熱更新,可以設定每個BDSWorker啟動的線程數以及每個線程遷移的速度
實時資料同步方案
- BDSMaster會不停掃描源叢集HDFS上的日志
- 針對新生成的log會生成對應的Task,下發給各個BDSWorker
- BDSWorker針對每個Task,會建立TaskTunnel,TaskTunnel 包含 Reader、Queue、Writer,Reader 負責讀取 log并将讀取的log資料丢到queue中,writer異步消費queue中的資料發往目标叢集
支援跨版本、異構資料源的實時資料同步
TaskTunnel中的Reader和Writer我們采用的是插件化的方式,針對不同的源端和目标端,我們使用對應版本的Reader和Writer,BDS不僅支援跨版本HBase的同步,甚至支援異構資料源的資料同步
抗熱點
對于原生的HBase Replication來說,寫熱點的RegionServer會生成更多的日志,同步壓力也會更大,往往會導緻這台RegionServer的資料同步不過來。遇到熱點的問題,你可以用一些運維的方式去解決。比如從熱點伺服器移走Region,降低吞吐與負載,但熱點并不保證是恒定的,可能會跳躍在各個伺服器。
對于BDS,由BDSMaster統一擷取源叢集的日志,然後平均配置設定給各個BDSWorker,是以每個BDSWorker處理的日志數量基本是相同的。即使源叢集RegionServer存在寫熱點,但熱點RegionServer的日志也能被平攤到各個BDSWorker去執行,進而避免因熱點導緻的同步延遲。
同步積壓
HBase Replication
對于HBase Replication來說,同步邏輯是內建在RegionServer中的,是以資料的同步和RegionServer本身的讀寫互相影響,又因為HBase服務于用戶端的線程數,要遠遠大于Replication的線程數。面對高負載的寫場景資料複制基本很難消化龐大的寫吞吐,就會導緻同步積壓。面對資料的同步積壓,通過開大線程數量不一定能解決問題,因為RegionServer此時的負載可能已經很高了。也不太容易通過橫向擴充節點來解決同步積壓的問題,因為擴充節點我需要擴充RegionServer節點以及DataNode節點,隻能在業務低峰期的時候慢慢的消費。
BDS
對于BDS來說,BDS采用讀寫異步的方式,可以通過以下幾種方式來解決同步積壓的問題
- 增加BDSWorker節點,來提高整個遷移服務的吞吐
- 動态配置每個BDSWorker處理日志的線程數,來提升單個節點日志處理的并發度
- 動态配置每個TaskTunnel的Writer數量,進而提升單個日志的處理吞吐
同步監控
對于同步的監控,我們定義
同步延遲 = 資料被同步到目标叢集的時間t2 - 資料被寫入到源叢集的時間t1
≈ 讀延遲 + 讀耗時 + 在隊列等待耗時 + 寫耗時
讀延遲:表示資料被寫入HDFS上的HLog到我們從讀取的HDFS上讀到這條資料的時間間隔
讀耗時:從檔案中讀取一批資料的耗時
隊列等待時間:資料被讀出來添加到隊列中的等待時間
寫耗時:資料被寫入到目标叢集的耗時
我們需要監控這幾項名額,就能比較友善的定位同步過程中的問題
當寫耗時增大,我們可以定位目标叢集可能存在了一些問題或者網絡存在問題
當隊列等待的耗時較大,說明寫入速度趕不上讀取的速度,我們可以通過适當增加寫線程數量,來提高寫速度
讀耗時變大,我們就能定位讀取HLog存在一些問題,可能是網絡延遲變大
讀延遲不斷變大,我們就可以定位BDS同步吞吐不夠,同步不過來了,需要添加節點,調整同步并發
BDS vs HBase Replication
- 功能性
- 支援跨版本的同步
- 支援雙向同步、環狀同步
- 穩定性
- 抗熱點,同步的任務平均配置設定到各個BDSWorker節點
- 對業務影響更小
- 獨立于HBase,不受RegionServer讀寫影響
- 同步過程基本不會通路源HBase叢集,隻讀取源HDFS上的日志
- 可以控制同步的線程數和節點的并發數
- 更加完善的failover機制
- 易運維
- BDSWorker stateless,便于擴充、系統更新
- 完善的監控、報警機制
- 監控同步時延,上下遊流量,讀寫耗時等名額
- 任務失敗,延遲過大報警
- 性能
- 可以通過擴充節點數量來提升遷移同步的速度
- 支援動态配置線程數
- 讀寫異步
總結
BDS已經在阿裡雲上線了,友善雲上的客戶在自建HBase、EMR HBase、Apsara HBase叢集之間的無縫遷移,叢集的升配,主備容災,能夠支援PB級别資料量的叢集搬站。
雲上有遷移需求的客戶,可以檢視
《BDS服務介紹》,或者聯系側田
HBase技術交流
歡迎加群進一步交流溝通: