阿里HBase的數據管道設施實踐與演進
來自專欄 我是程序員
摘要:第九屆中國資料庫技術大會,阿里巴巴技術專家孟慶義對阿里HBase的數據管道設施實踐與演進進行了講解。主要從數據導入場景、 HBase Bulkload功能、HImporter系統、數據導出場景、HExporter系統這些部分進行了講述。
直播視頻請點擊PPT下載請點擊精彩視頻整理:數據導入場景
生意參謀
生意參謀是一種為商家服務,幫助商家進行決策和運營的數據產品。如在淘寶或天貓上開一家店,生意參謀會提供店裡每天進入的流量、轉化率、客戶的畫像和同行業進行對比這些數據屬於什麼位置。商家可以根據流量分析、活動分析和行業分析去進行決策。可以根據平時日誌、點擊量和訪問量,資料庫把數據通過實時的流處理寫入HBase。有一部分寫到離線系統里,定期做一些清洗和計算再寫入HBase,然後供業務去查詢 HBase。
螞蟻風控
在螞蟻上任何一筆交易支付都會調用風控,風控主要是去看這次交易是否屬於同一個設備,是否是經常交易的地點,以及交易的店鋪信息。它必須在100ms—200ms把風險做完,風控是根據長期的歷史信息、近期歷史的信息和實時的信息三個方向做綜合考量。用戶的輸入會實時的寫入HBase,同時這個實時的信息增量也會導入到離線系統裡面,離線系統會定期的對數據進行計算,計算的數據結果會作為歷史或近期歷史再寫回HBase,一個支付可能會調百十次的風控,而且需要在百毫秒內進行返回。
數據導入需要解決的問題
2013年剛剛開始做數據導入的時候面臨的更多的是功能需求性的問題,現在需要考慮的是導入的周期性調度、異構數據源多、導入效率高和多集群下的數據一致性的問題。前兩個問題更適合由平台化去解決,HBase的數據導入更關注的是導入效率和多集群下的數據的一致性。
什麼是Bulkload?Bulkload有什麼功能?
Bulkload使用的是一種新的結構LSM Tree進行寫入更新,其結構如上圖所示。使用Application code 進行數據寫入,數據會被寫入到MemStore,MemStore在HBase里是一個跳錶,可以把它看成一個有序的列表,並不斷往裡面插入數據。當數據達到一定量時就會啟動flush對數據進行編碼和壓縮,並寫成HFile。HFile是由索引塊和數據塊組成的文件結構,其特點是只讀性,生成HFile之後就不可改了。當用戶進行讀取數據的時候,就會從三個HFile和一個MemStore進行查找進行讀取。這個結構的優化就是就把隨機的寫變成了有序的寫。Bulkload就可以把上千上萬條數據在毫秒內加入到HBase里。所以Bulkload的優勢如下:
- 高吞吐
- 不需要WAL
- 避免small compaction
- 支持離線構建
Bulkload的導入結構如上圖所示,數據來源於數倉,首先根據HBase的分區規則對數據進行分區和排序。然後會生成Partition Data,需要寫一個HBase插進去。同步中心就會調動一個作業,作業內部會有很多的tasks,每個task獨立的執行把文件讀出,寫到HDFS上,形成一個HFile文件。當把所有文件寫完,同步中心就會調Bulkload指令到HBase,把所有的HFile一次性的load進去。
以前採用的是多集群導入的方法,但是多集群導入有很多缺點如下:
- 很難保證多個任務同時完成,導致一定時間窗口內數據不一致
- 調度後的運行環境不一致
- 網路延遲不一致
- 失敗重試集群部署對業務不透明的缺點:
- 需要配置多個任務
- 集群遷移需要重新配置任務
為了保證數據的一致性,採用了邏輯集群導入法。
- 多任務模式:需要重複配置,是不透明的,很難保證一致性,分區排序需要執行兩次,編碼壓縮兩次。
- 邏輯集群模式:配置一次,遷移無感知,在一致性上達到毫秒級,分區排序是執行一次,但分區數量變多,編碼壓縮一次。隨著業務做得越來越大,這種導入就會遇到新的線上問題,如擴展性、資源利用率、研發效率、監控等。
什麼是HImporter系統?
HImporter是用於輔助數據同步的中間層,他會把所有HFile的構建,載入邏輯下沉到HImporter層。
HImporter所處的位置如上圖所示。
HImporter的優勢
- 分散式水平擴展,同一個作業的不同任務可以調度到HImporter的不同worker節點
- 提高資源利用率,將壓縮等CPU密集操作下降到HImporter
- 快速迭代,HImporter的運維和迭代與同步中心獨立
- 獨立監控,HImporter可按照自己的需求實現監控
HImporter 功能迭代
功能迭代主要包括表屬性感知、保證本地化率、支持輕量計算和安全隔離。其中表屬性感知就是感知特性,並保證特徵不會變,主要包括、混合存儲、新壓縮編碼、表級別副本數;保證本地化率是將Hfile寫入到分區所在伺服器,保證本地化率和存儲特性,對一些rt敏感的業務效果明顯;支持輕量計算就是支持MD5,字元串拼接等函數;安全隔離是避免對外暴露HDFS地址、支持Task級別重試。
數據導出場景
菜鳥聯盟
菜鳥聯盟的場景如上圖所示。一個物流詳情會傳到HBase,HBase會傳到數據倉庫,數據倉會產生報表,然後去訓練路由演算法。
淘寶客服
淘寶客服的一個退款應用場景如上圖。這是一個逆向鏈接,把退款、糾紛、退款物流、退款費用等實時的寫入到HBase里,HBase會實時的寫入queue里,blink流系統會消費queue產生一些數據會返回到HBase,blink輸出會支撐智能服務、客戶監控等。
增量數據導出需要解決的問題
增量數據導出需要解決的問題主要是離線數據的T+1處理特點、吞吐量 、實時性、主備流量切換等。
早期的方案是會周期性的從HDFS里把所有的日誌羅列出來,然後對日誌進行排序會產生一個有序的時間流。取work里同步時間最短的作為最終的同步時間。這種方案具有對NN節點造成很大壓力、無法應對主備切換、日誌熱點處理能力低等問題。HExporter系統
HExporter1.0如上圖所示,HExporter1.0優勢主要有主備流量切換不影響數據導出,能夠識別數據來源,過濾非原始數據;獨立的同步時間流,能夠保障數據按有序時間分區Dump到數據倉庫;復用HBase replication框架,能夠降低開發工作量,復用HBase的監控,運維體系。
HExporter1.0 優化主要包括以下五點:
- 減少拓撲網路中的數據發送,備庫避免向Exporter發送重複數據;
- 遠程輔助消化器,空閑的機器幫助消化熱點;
- 避免發送小包,HExporter在接收到小包後,等待一段時間再處理;
- 同步通道配置隔離,實時消費鏈路和離線消費鏈路可以採用不同的配置;
- 數據發送前壓縮。
HExporter1.0的問題是業務寫入流量產生高峰,離線出現同步延遲;HBase升級速度慢。然後我們就有了以下解決思路,離線同步的資源可以和在線資源隔離,利用離線大池子可以削峰填谷;Exporter的worker是無狀態的,如果把所有邏輯都放在Exporter,那麼升級、擴容會簡單快速。然後就產生了HExporter2.0。
總結
ALiHBase數據通道的導入和導出都是添加了中間層,中間層的核心價值易擴展、可靠性高、迭代快和穩定。因為採用分散式水平擴展更易擴展;採用自主識別主備切換,封裝對HBase訪問更可靠;採用架構解耦,快速迭代使迭代速度更快;因為無狀態,節點對等所以更加穩定。
孟慶義:花名天引,阿里巴巴技術專家,專註在大數據領域,擁有多年分散式、高並發、大規模系統的研發與實踐經驗,先後參與HBase、Phoenix、Lindorm等產品的內核引擎研發,目前負責阿里上萬節點的HBase As a Service的發展與落地。
數十款阿里雲產品限時折扣中,趕快點擊這裡,領券開始雲上實踐吧
本文作者:雲跡九州
原文鏈接
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
本文為雲棲社區原創內容,未經允許不得轉載。
推薦閱讀:
※HBaseCon&灣區見聞及感想
※HBase 架構腦圖
※Hbase架構與原理
※從百萬級別數據的分析角度,Mysql,Mongodb,Hbase如何選擇?
※HBase讀性能怎麼樣?