面對海量數據存儲,如何保證HBase集羣的高效以及穩定

內容來源:2018 年 09 月 15 日,平安科技數據平臺部大數據高級工程師鄧傑在「中國HBase技術社區第五屆MeetUp ——HBase應用與發展」進行《HBase應用與實踐》的演講分享。IT 大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。數據庫

閱讀字數:3315 | 9分鐘閱讀緩存

觀看嘉賓完整演講視頻及PPT,請點擊: t.cn/E23igdc

摘要

本次演講首先給你們介紹一下平安科技使用HBase的現狀,以及給用戶解決了哪些問題,而後是如何保證HBase集羣的高效以及它的穩定的。負載均衡

平安科技HBase的使用現狀

咱們這邊HBase的使用現狀,能夠從如下兩個方面來說,第一個是HBase的集羣規模以及數據量。第二個是它的應用場景。HBase集羣方面如今是由300多臺物理機組成,數據量大概有兩個P兩個pb左右。tcp

解決了用戶哪些問題

HBase的應用上,用戶可能首先要面臨的是海量數據的存儲問題,而後是對性能和可靠性的關注。最後一個多是數據的遷移問題。性能

從用戶層面來說,他們在使用傳統數據庫的時候,因爲沒法預估業務應用場景,形成沒法判斷接下來會面臨多大的數據量。因此咱們建議用戶將數據接入到HBase集羣裏面,HBase是支持在線擴容的,即便後續使用的過程當中,某段時間數據出現爆炸式增加,咱們也能夠經過HBase進行橫向擴容來知足需求。大數據

在使用傳統的DB時候,其實在維護和擴展方面都會遇到不少問題,而若是遷移到HBase上,進行擴容和維護就會很方便的。優化

客戶端優化

性能和高可用問題也是用戶關注的重點,性能方面主要在於應用程序對HBase集羣的調用。線程

先講下客戶端優化的方案,上圖列出了幾個常見的優化點,首先第一個是基於應用層面的scan操做,此時客戶端向HBase的請求後,數據並非一次性所有返回,而是經過屢次的RPC請求交互獲得數據。在這方面若是請求的數據量很大,能夠經過去調整一下參數來減小RPC的交互,從而下降耗時。orm

另外一個優化點是在get方面的,在HBase既能夠一次性get整個數據,也能夠進行批量的get操做。咱們通常建議批量的使用get,其原理主要是爲了去減小用戶RPC的交互次數。cdn

接下來是列簇及列的優化。HBase中相同的列簇數據是存在一個目錄的,不一樣列簇數據分開進行存儲。在有多個列簇的狀況下進行檢索,若是隻是用key檢索,而沒有指定列簇,索引是要獨立去檢索的。這種狀況相比指定列簇檢索,效率是比較低的,也就是列簇越多影響就會越大。

第四個是禁止緩存,咱們在寫數據的時候,若是客戶端忽然加載了大量的數據,而沒有禁止緩存,可能就會把熱數據會擠壓出去。

擠壓出去的後果會致使其餘業務檢索HBase的時候,須要到HDFS裏面去從新的去加載,這就形成了延時。

服務端層面優化

這裏服務端層面也列舉了幾種比較常見的優化手段。首先是均衡的優化,在HBase中均衡操做有兩種方式,一種是經過balance_switch,它後面會跟一個參數,若是是true的話,就開啓自動均衡。若是指定爲false的話,就關閉當前的自動均衡。

另外一種是使用balancer,這種方式可能須要去手動的執行,好比HBase節點掛了以後重啓了,其中間隔的時間內Region又不均衡。還有一種狀況是擴容新的HBase節點後,Region沒有均衡。此時若是開啓balance_switch沒有效果,就要經過手動的方式,強制的讓它均衡。

第二個優化是在Blockce,在緩存命中率不高的時候,能夠開啓對外內存,而後來提升它的命中率,同時該操做對GC也是有好處的。

第三個是Compaction的操做,它能夠保證的數據的本地性惟一。在實際的應用的場景下,咱們會避免自動執行Compaction操做,由於自動執行可能會影響集羣的IO,從而對用戶的應用讀寫產生影響。因此咱們須要改成手動的定義執行。在週末或者訪問量不是的時候,執行Compaction操做。

執行Compaction操做的時候,有兩個屬性是能夠優化的。因爲默認狀況下,線程數是1,所以在數據量很大的時候,耗時會長一些 。咱們能夠根據集羣的規模,或者集羣應用的影響度,來適當的調整參數,以提升Compaction執行的速度。

另一個優化點多是用戶比較關心的可靠性。由於HBase是高可用的集羣,能夠作主備切換,因此不用擔憂單點問題。master掛了以後,能夠當即切換到BackUpMaster,而後BackUpMaster會將角色狀態切換成可用並對外提供服務。

數據遷移

數據遷移有幾種狀況。一種是HBase集羣之間的遷移,一種是將Hive數據遷移到HBase。

首先分析第一種狀況,兩個集羣之間遷移的話,因爲它們的數據格式是同樣,因此能夠直接使用distcp的方式來進行遷移。這裏由於要用到mapreduce,因此要指定隊列名。

遷移過程中須要注意如下四項。

  1. 開啓YARN,distcp使用Mapreduce來傳輸數據,所以遷移以前須要確保集羣資源可用。

  2. 防火牆,兩個HBase集羣之間端口要能正常訪問telnet,例如NN、DN的端口。

  3. 使用HBase Hbck修復元數據信息

上圖爲跨集羣遷移的一個案例,產生這種問題的緣由是HDFS中的文件沒有關閉,處於寫狀態,而每次distcp時會校驗文件長度,若是文件處於關閉狀態,就會出現這種異常。

對於這種狀況,咱們能夠先檢測文件的狀態,而後關閉該文件,從新進行數據遷移。 在關閉的時候可能會出現異常致使關閉失敗,對此能夠重複執行關閉操做直到成功,

將Hive的數據遷移到HBase有兩種方案,第一種方案不須要寫代碼,直接在集羣A中生成HFile文件,而後使用distcp將HFile文件遷移到集羣B,最後使用HBase的BulkLoad的方式將數據導入到HBase表。

另外一種比較高級的方式,使用API接口,直接經過BulkLoad的方式進行數據遷移,以應用程序的形式來實現數據遷移。

如何保證HBase集羣的高效及穩定

要保證HBase集羣的高效和穩定,監控系統和修復機制是必不可少的,在實質上還有一些特殊的處理。

首先來看一下監控系統。只要將HBase的所有指標都採集到,就至關因而掌握了整個HBase集羣的健康狀態。咱們能夠經過regionserver提供的相應解碼接口對HBase節點上的指標進行採集,而後將核心的指標繪製出來。

關於修復機制這塊,須要監控系統和修復系統聯合起來,由監控系統發現問題並反饋問題,而後再由修復系統去自動修復,例如集羣進程可用性、存在性、負載均衡修復等。

最後還有一些特殊處理,HBase裏遇到比較多的就是永久RIT的問題,通常狀況下,RIT都是瞬時的,可是有些狀況會讓其進入永久RIT狀態,所帶來的不良後果就是管理員沒法干預Region均衡操做,從而影響集羣的負載均衡。

對於如何解決這種問題,咱們先來看個案例。在該案例中合併Region操做時,發現RIT一直顯示MERGING NEW狀態,查看HBase JIRA發現這是觸發了HBASE-17682的BUG,須要打補丁進行修復。

咱們來分析這種狀況產生的緣由,首先客戶端發起合併請求的命令,而後由master組織一個RegionServer上面的兩個region進行去合併,在合併操做以前,它會生成一個初始化的MERGING NEW的狀態,並存在master的內存裏面。

這樣咱們就清楚了,當前的master有MERGING NEW狀態,而BackUpMaster裏沒有該狀態,直接進行主備切換就能夠解決問題。

以上爲今天的分享內容,謝謝你們!

編者:IT大咖說,轉載請標明版權和出處

相關文章
相關標籤/搜索