IT技(ji)術互動交流(liu)平台(tai)

乐猫彩票官网

來源︰IT165收集  發布日期︰2020-02-24 14:16:05

HBase工作(zuo)原理學習

 

乐猫彩票官网

HBase是一(yi)個高可(ke)靠(kao)性(xing)、高性(xing)能(neng)、面(mian)向列、可(ke)伸縮的(de)分(fen)布式存(cun)儲系統chang) Base技(ji)術可(ke)在廉價(jia)PC Server上搭建大規(gui)模結構化的(de)存(cun)儲集群。HBase的(de)na)勘biao)是存(cun)儲並處理大型(xing)數(shu)據,具體來說(shuo)是僅需使用普通的(de)硬(ying)件(jian)配置,就能(neng)夠處理由成(cheng)千上萬的(de)行(xing)和列所組(zu)成(cheng)的(de)大型(xing)數(shu)據。

與MapReduce的(de)離線(xian)批處理計(ji)算框架不同,HBase是一(yi)個可(ke)以隨機訪問的(de)存(cun)儲和tu)jian)索數(shu)據平台(tai),彌(mi)補了(liao)HDFS不能(neng)隨機訪問數(shu)據的(de)缺陷,適合(he)實時(shi)性(xing)要求不是非(fei)常(chang)高的(de)業務場景。HBase存(cun)儲的(de)都是Byte數(shu)組(zu),它不介意數(shu)據類(lei)型(xing),允許動態、靈(ling)活的(de)數(shu)據模型(xing)。

 

上圖(tu)描述(shu)了(liao)Hadoop 2.0生態系統中(zhong)的(de)各層結構。其中(zhong)HBase位于結構化存(cun)儲層,HDFS為HBase提(ti)供了(liao)高可(ke)靠(kao)性(xing)的(de)底層存(cun)儲支持, MapReduce為HBase提(ti)供了(liao)高性(xing)能(neng)的(de)批處理能(neng)力(li),Zookeeper為HBase提(ti)供了(liao)穩(wen)定服務和failover機制,Pig和Hive為HBase提(ti)供了(liao)進(jin)行(xing)數(shu)據統計(ji)處理的(de)高層語言支持,Sqoop則為HBase提(ti)供了(liao)便捷的(de)RDBMS數(shu)據導入功能(neng),使業務數(shu)據從傳統數(shu)據庫向HBase遷移(yi)變的(de)非(fei)常(chang)方便。

乐猫彩票官网

2.1 設計(ji)思(si)路

HBase是一(yi)個分(fen)布式的(de)數(shu)據庫,使用Zookeeper管(guan)理集群,使用HDFS作(zuo)為底層存(cun)儲。在架構層面(mian)上由HMaster(Zookeeper選舉產生的(de)Leader)和多個HRegionServer組(zu)成(cheng),基本架構如(ru)下圖(tu)所示︰

 

在HBase的(de)概念中(zhong),HRegionServer對應集群中(zhong)的(de)一(yi)個節(jie)點,一(yi)個HRegionServer負責管(guan)理多個HRegion,而一(yi)個HRegion代(dai)表一(yi)張(zhang)表的(de)一(yi)部分(fen)數(shu)據。在HBase中(zhong),一(yi)張(zhang)表可(ke)能(neng)會需要很多個HRegion來存(cun)儲數(shu)據,每個HRegion中(zhong)的(de)數(shu)據並不是雜亂無章的(de)。HBase在管(guan)理HRegion的(de)時(shi)候會給每個HRegion定義(yi)一(yi)個Rowkey的(de)範(fan)圍(wei),落在特(te)定範(fan)圍(wei)內的(de)數(shu)據將交給特(te)定的(de)Region,從而將負載分(fen)攤到多個節(jie)點,這樣就充分(fen)利用了(liao)分(fen)布式的(de)優(you)點和特(te)性(xing)。另(ling)外,HBase會自動調節(jie)Region所處的(de)位置,如(ru)果一(yi)個HRegionServer過熱,即大量的(de)請(qing)求落在這個HRegionServer管(guan)理的(de)HRegion上,HBase就會把HRegion移(yi)動到相(xiang)對空zhang)械de)其它節(jie)點,依次保證集群環境(jing)被充分(fen)利用。

2.2 基本架構

HBase由HMaster和HRegionServer組(zu)成(cheng),同樣遵(zun)從主從服務器架構。HBase將邏輯上的(de)表劃分(fen)成(cheng)多個數(shu)據塊即HRegion,存(cun)儲在HRegionServer中(zhong)。HMaster負責管(guan)理所有的(de)HRegionServer,它本身並不存(cun)儲任何數(shu)據,而只(zhi)是存(cun)儲數(shu)據到HRegionServer的(de)映(ying)射關(guan)系(元數(shu)據)。集群中(zhong)的(de)所有節(jie)點通過Zookeeper進(jin)行(xing)協調,並處理HBase運行(xing)期間可(ke)能(neng)遇到的(de)各種問題。HBase的(de)基本架構如(ru)下圖(tu)所示︰

 

Client︰使用HBase的(de)RPC機制與HMaster和HRegionServer進(jin)行(xing)xing)ㄐ牛 ti)交請(qing)求和獲取結果。對于管(guan)理類(lei)操作(zuo),Client與HMaster進(jin)行(xing)RPC;對于數(shu)據讀寫類(lei)操作(zuo),Client與HRegionServer進(jin)行(xing)RPC。

Zookeeper︰通過將集群各節(jie)點狀態信息注冊到Zookeeper中(zhong),使得HMaster可(ke)隨時(shi)感(gan)知各個HRegionServer的(de)健康狀態,而且也能(neng)避(bi)免(mian)HMaster的(de)單(dan)點問題。

HMaster︰管(guan)理所有的(de)HRegionServer,告訴其需要維護哪(na)些HRegion,並監控所有HRegionServer的(de)運行(xing)狀態。當一(yi)個新(xin)的(de)HRegionServer登錄到HMaster時(shi),HMaster會告訴它等待分(fen)配數(shu)據;而當某個HRegion死機時(shi),HMaster會把它負責的(de)所有HRegion標(biao)記為未分(fen)配,然後再(zai)把它們分(fen)配到其他(ta)HRegionServer中(zhong)。HMaster沒有單(dan)點問題,HBase可(ke)以啟動多個HMaster,通過Zookeeper的(de)選舉機制保證集群中(zhong)總有一(yi)個HMaster運行(xing),從而提(ti)高了(liao)si) 旱de)可(ke)用性(xing)。

HRegion︰當表的(de)大小超(chao)過預設值的(de)時(shi)候,HBase會自動將表劃分(fen)為不同的(de)區域,每個區域包含表中(zhong)所有xing)械de)一(yi)個子(zi)集。對用戶來說(shuo),每個表是一(yi)堆(dui)數(shu)據的(de)集合(he),靠(kao)主鍵(RowKey)來區分(fen)。從物理上來說(shuo),一(yi)張(zhang)表被拆(chai)分(fen)成(cheng)了(liao)多塊,每一(yi)塊就是一(yi)個HRegion。我們用表名+開始/結束(shu)主鍵,來區分(fen)每一(yi)個HRegion,一(yi)個HRegion會保存(cun)一(yi)個表中(zhong)某段連續的(de)數(shu)據,一(yi)張(zhang)完(wan)整的(de)表數(shu)據是保存(cun)在多個HRegion中(zhong)的(de)。

HRegionServer︰HBase中(zhong)的(de)所有數(shu)據從底層來說(shuo)一(yi)般都是保存(cun)在HDFS中(zhong)的(de),用戶通過一(yi)系列HRegionServer獲取這些數(shu)據。集群一(yi)個節(jie)點上一(yi)般只(zhi)運行(xing)一(yi)個HRegionServer,且每一(yi)個區段的(de)HRegion只(zhi)huan)岊灰yi)個HRegionServer維護。HRegionServer主要負責響應用戶I/O請(qing)求,向HDFS文件(jian)系統讀寫數(shu)據,是HBase中(zhong)最(zui)核心的(de)na)?欏RegionServer內部管(guan)理了(liao)一(yi)系列HRegion對象,每個HRegion對應了(liao)邏輯表中(zhong)的(de)一(yi)個連續數(shu)據段。HRegion由多個HStore組(zu)成(cheng),每個HStore對應了(liao)邏輯表中(zhong)的(de)一(yi)個列族的(de)存(cun)儲,可(ke)以看出每個列族其實就是一(yi)個集中(zhong)的(de)存(cun)儲單(dan)元。因(yin)此,為了(liao)提(ti)高操作(zuo)效率,最(zui)好將具備(bei)共同I/O特(te)性(xing)的(de)列放在一(yi)個列族中(zhong)。

HStore︰它是HBase存(cun)儲的(de)核心,由MemStore和StoreFiles兩(liang)部分(fen)組(zu)成(cheng)。MemStore是內存(cun)緩沖(chong)區,用戶寫入的(de)數(shu)據首先會放入MemStore,當MemStore滿了(liao)以後會Flush成(cheng)一(yi)個StoreFile(底層實現是HFile),當StoreFile的(de)文件(jian)數(shu)量增(zeng)長(chang)到一(yi)定閾值後,會觸(chu)發Compact合(he)並操作(zuo),將多個StoreFiles合(he)並成(cheng)一(yi)個StoreFile,合(he)並過程中(zhong)會進(jin)行(xing)版本合(he)並和數(shu)據刪jing)僮zuo)。因(yin)此,可(ke)以看出HBase其實只(zhi)有xing)zeng)加you)shu)據,所有的(de)更新(xin)和刪jing)僮zuo)都是在後續的(de)Compact過程中(zhong)進(jin)行(xing)的(de),這樣使得用戶的(de)寫操作(zuo)只(zhi)要進(jin)入內存(cun)就可(ke)以立即返回,保證了(liao)HBaseI/O的(de)高性(xing)能(neng)。當StoreFiles Compact後,會逐步形成(cheng)越來越大的(de)StoreFile,當單(dan)個StoreFile大小超(chao)過一(yi)定閾值後,會觸(chu)發Split操作(zuo),同時(shi)把當前(qian)的(de)HRegion Split成(cheng)2個HRegion,父HRegion會下線(xian),新(xin)分(fen)出的(de)2個子(zi)HRegion會被HMaster分(fen)配到相(xiang)應的(de)HRegionServer,使得原先1個HRegion的(de)負載壓力(li)分(fen)流(liu)到2個HRegion上。

HLog︰每個HRegionServer中(zhong)都有一(yi)個HLog對象,它是一(yi)個實現了(liao)Write Ahead Log的(de)預寫日志類(lei)。在每次用戶操作(zuo)將數(shu)據寫入MemStore的(de)時(shi)候,也會寫一(yi)份(fen)數(shu)據到HLog文件(jian)中(zhong),HLog文件(jian)會定期滾動刷新(xin),並刪jing)傻de)文件(jian)(已持久化到StoreFile中(zhong)的(de)數(shu)據)。當HMaster通過Zookeeper感(gan)知到某個HRegionServer意外終(zhong)止時(shi),HMaster首先會處理遺留的(de) HLog文件(jian),將其中(zhong)不同HRegion的(de)HLog數(shu)據進(jin)行(xing)拆(chai)分(fen),分(fen)別放到相(xiang)應HRegion的(de)na)柯枷攏 緩笤zai)將失效的(de)HRegion重新(xin)分(fen)配,領取到這些HRegion的(de)HRegionServer在加載 HRegion的(de)過程中(zhong),會發現有歷史HLog需要處理,因(yin)此會Replay HLog中(zhong)的(de)數(shu)據到MemStore中(zhong),然後Flush到StoreFiles,完(wan)成(cheng)數(shu)據恢復。

2.3 ROOT表和META表

HBase的(de)所有HRegion元數(shu)據被存(cun)儲在.META.表中(zhong),隨著HRegion的(de)增(zeng)多,.META.表中(zhong)的(de)數(shu)據也會增(zeng)大,並分(fen)裂成(cheng)多個新(xin)的(de)HRegion。為了(liao)定位.META.表中(zhong)各個HRegion的(de)位置,把.META.表中(zhong)所有HRegion的(de)元數(shu)據保存(cun)在-ROOT-表中(zhong),最(zui)後由Zookeeper記錄-ROOT-表的(de)位置信息。所有客戶端訪問用戶數(shu)據前(qian),需要首先訪問Zookeeper獲得-ROOT-的(de)位置,然後訪問-ROOT-表獲得.META.表的(de)位置,最(zui)後根據.META.表中(zhong)的(de)信息確fan)ㄓ沒 shu)據存(cun)放的(de)位置,如(ru)下圖(tu)所示。

 

-ROOT-表永遠不huan)岊環fen)割,它只(zhi)有一(yi)個HRegion,這樣可(ke)以保證最(zui)多只(zhi)需要三次跳轉就可(ke)以定位任意一(yi)個HRegion。為了(liao)si)涌旆夢仕俁du),.META.表的(de)所有HRegion全部保存(cun)在內存(cun)中(zhong)。客戶端會將查詢(xun)過的(de)位置信息緩存(cun)起來,且yi)捍cun)不huan)嶂鞫  ?Hru)果客戶端根據緩存(cun)信息還訪問不到數(shu)據,則詢(xun)問相(xiang)關(guan).META.表的(de)Region服務器,試圖(tu)獲取數(shu)據的(de)位置,如(ru)果還是失敗(bai),則詢(xun)問-ROOT-表相(xiang)關(guan)的(de).META.表在哪(na)里。最(zui)後,如(ru)果前(qian)面(mian)的(de)信息全部失效,則通過ZooKeeper重新(xin)定位HRegion的(de)信息。所以如(ru)果客戶端上的(de)緩存(cun)全部是失效,則需要進(jin)行(xing)6次網(wang)絡來回,才能(neng)定位到正確的(de)HRegion。

乐猫彩票官网

HBase是一(yi)個類(lei)似于BigTable的(de)分(fen)布式數(shu)據庫,它是一(yi)個稀疏的(de)長(chang)期存(cun)儲的(de)(存(cun)在HDFS上)、多維度(du)的(de)、排序的(de)映(ying)射表。這張(zhang)表的(de)索引(yin)是行(xing)關(guan)鍵字、列關(guan)鍵字和時(shi)間戳(chuo)。HBase的(de)數(shu)據都是字符串,沒有類(lei)型(xing)。

 

可(ke)以將一(yi)個表想象成(cheng)一(yi)個大的(de)映(ying)射關(guan)系,通過行(xing)鍵、行(xing)鍵+時(shi)間戳(chuo)或行(xing)鍵+列(列族︰列xing)奘畏  涂ke)以定位特(te)定數(shu)據。由于HBase是稀疏存(cun)儲數(shu)據的(de),所以某些列可(ke)以是空白的(de)。上表給出了(liao)com.cnn.www網(wang)站的(de)數(shu)據存(cun)放邏輯視圖(tu),表中(zhong)僅有一(yi)行(xing)數(shu)據,行(xing)的(de)唯一(yi)標(biao)識為“com.cnn.www”,對這行(xing)數(shu)據的(de)每一(yi)次邏輯修改都有一(yi)個時(shi)間戳(chuo)關(guan)聯(lian)對應。表中(zhong)共有四列︰contents:html、anchor:cnnsi.com、anchor:my.look.ca、mime:type,每一(yi)列以前(qian)綴的(de)方式給出其所屬的(de)列族。

行(xing)鍵(RowKey)是數(shu)據行(xing)在表中(zhong)的(de)唯一(yi)標(biao)識,並作(zuo)為檢(jian)索記錄的(de)主鍵。在HBase中(zhong)訪問shi)碇zhong)的(de)行(xing)只(zhi)有三種方式︰通過某個行(xing)鍵訪問、給定行(xing)鍵的(de)範(fan)圍(wei)訪問、全表掃描。行(xing)鍵可(ke)以是任意字符串(最(zui)大長(chang)度(du)64KB)並按(an)照字典序進(jin)行(xing)存(cun)儲。對于那些經常(chang)一(yi)起讀取的(de)行(xing),需要對鍵值精心設計(ji),以便它們能(neng)放在一(yi)起存(cun)儲。

4 HBase讀寫chuo) /h3>

 

上圖(tu)是HRegionServer數(shu)據存(cun)儲關(guan)系圖(tu)。上文提(ti)到,HBase使用MemStore和StoreFile存(cun)儲對表的(de)更新(xin)。數(shu)據在更新(xin)時(shi)首先寫入HLog和MemStore。MemStore中(zhong)的(de)數(shu)據是排序的(de),當MemStore累計(ji)到一(yi)定閾值時(shi),就會創建一(yi)個新(xin)的(de)MemStore,並且將老的(de)MemStore添加到Flush隊列,由單(dan)獨的(de)線(xian)程Flush到磁盤上,成(cheng)為一(yi)個StoreFile。與此同時(shi),系統會在Zookeeper中(zhong)記錄一(yi)個CheckPoint,表示這個時(shi)刻之前(qian)的(de)數(shu)據變更已經持久化了(liao)。當系統出現意外時(shi),可(ke)能(neng)導致MemStore中(zhong)的(de)數(shu)據丟失,此時(shi)使用HLog來恢復CheckPoint之後的(de)數(shu)據。

StoreFile是只(zhi)讀的(de),一(yi)旦創建後就不可(ke)以再(zai)修改。因(yin)此Hbase的(de)更新(xin)其實是不斷(duan)追加的(de)操作(zuo)。當一(yi)個Store中(zhong)的(de)StoreFile達到一(yi)定閾值後,就會進(jin)行(xing)一(yi)次合(he)並操作(zuo),將對同一(yi)個key的(de)修改合(he)並到一(yi)起,形成(cheng)一(yi)個大的(de)StoreFile。當StoreFile的(de)大小達到一(yi)定閾值後,又zhi)岫StoreFile進(jin)行(xing)切分(fen)操作(zuo),等分(fen)為兩(liang)個StoreFile。

4.1 寫操作(zuo)流(liu)程

步驟1︰Client通過Zookeeper的(de)調度(du),向HRegionServer發出寫數(shu)據請(qing)求,在HRegion中(zhong)寫數(shu)據。

步驟2︰數(shu)據被寫入HRegion的(de)MemStore,直到MemStore達到預設閾值。

步驟3︰MemStore中(zhong)的(de)數(shu)據被Flush成(cheng)一(yi)個StoreFile。

步驟4︰隨著StoreFile文件(jian)的(de)不斷(duan)增(zeng)多,當其數(shu)量增(zeng)長(chang)到一(yi)定閾值後,觸(chu)發Compact合(he)並操作(zuo),將多個StoreFile合(he)並成(cheng)一(yi)個StoreFile,同時(shi)進(jin)行(xing)版本合(he)並和數(shu)據刪jing)/p>

步驟5︰StoreFiles通過不斷(duan)的(de)Compact合(he)並操作(zuo),逐步形成(cheng)越來越大的(de)StoreFile。

步驟6︰單(dan)個StoreFile大小超(chao)過一(yi)定閾值後,觸(chu)發Split操作(zuo),把當前(qian)HRegion Split成(cheng)2個新(xin)的(de)HRegion。父HRegion會下線(xian),新(xin)Split出的(de)2個子(zi)HRegion會被HMaster分(fen)配到相(xiang)應的(de)HRegionServer 上,使得原先1個HRegion的(de)壓力(li)得以分(fen)流(liu)到2個HRegion上。

4.2 讀操作(zuo)流(liu)程

步驟1︰client訪問Zookeeper,查找-ROOT-表,獲取.META.表信息。

步驟2︰從.META.表查找,獲取存(cun)放目標(biao)數(shu)據的(de)HRegion信息,從而找到對應的(de)HRegionServer。

步驟3︰通過HRegionServer獲取需要查找的(de)數(shu)據。

步驟4︰HRegionserver的(de)na)詿cun)分(fen)為MemStore和BlockCache兩(liang)部分(fen),MemStore主要用于寫數(shu)據,BlockCache主要用于讀數(shu)據。讀請(qing)求先到MemStore中(zhong)查數(shu)據,查不到就到BlockCache中(zhong)查,再(zai)查不到就會到StoreFile上讀,並把讀的(de)結果放入BlockCache。

 

乐猫彩票官网

 

半結構化或非(fei)結構化數(shu)據︰對于數(shu)據結構字段不夠確fan) 蛟勇椅拚攏 苣尋an)一(yi)個概念去(qu)進(jin)行(xing)抽取的(de)數(shu)據適合(he)用HBase。如(ru)隨著業務發展需要存(cun)儲更多的(de)字段時(shi),RDBMS需要停(ting)機維護更改表結構,而HBase支持動態增(zeng)加。

記錄非(fei)常(chang)稀疏︰RDBMS的(de)行(xing)有多少列是固定的(de),為空的(de)列浪費了(liao)存(cun)儲空間。而HBase為空的(de)列不huan)岊淮cun)儲,這樣既節(jie)省了(liao)空間又提(ti)高了(liao)讀性(xing)能(neng)。

多版本數(shu)據︰根據RowKey和列標(biao)識符定位到的(de)Value可(ke)以有任意數(shu)量的(de)版本值(時(shi)間戳(chuo)不同),因(yin)此對于需要存(cun)儲變動歷史記錄的(de)數(shu)據,用HBase將非(fei)常(chang)方便。

超(chao)大數(shu)據量︰當數(shu)據量越來越大,RDBMS數(shu)據庫撐不住了(liao),就出現了(liao)讀寫分(fen)離策(ce)略,通過一(yi)個Master專門負責寫操作(zuo),多個Slave負責讀操作(zuo),服務器成(cheng)本倍增(zeng)。隨著壓力(li)增(zeng)加,Master撐不住了(liao),這時(shi)就要分(fen)庫了(liao),把關(guan)聯(lian)不大的(de)數(shu)據分(fen)開部署,一(yi)些join查詢(xun)不能(neng)用了(liao),需要借(jie)助中(zhong)間層。隨著數(shu)據量的(de)進(jin)一(yi)步增(zeng)加,一(yi)個表的(de)記錄越來越大,查詢(xun)就變得很慢,于是又得搞(gao)分(fen)表,比如(ru)按(an)ID取模分(fen)成(cheng)多個表以減少單(dan)個表的(de)記錄數(shu)。經歷過這些事的(de)人都知道過程是多麼的(de)折騰。采用HBase就tu)虻dan)了(liao),只(zhi)需要在集群中(zhong)加入新(xin)的(de)節(jie)點即可(ke),HBase會自動水平切分(fen)擴展,跟Hadoop的(de)無縫集成(cheng)保障(zhang)了(liao)數(shu)據的(de)可(ke)靠(kao)性(xing)(HDFS)和海量數(shu)據分(fen)析的(de)高性(xing)能(neng)(MapReduce)。

乐猫彩票官网

 

HBase中(zhong)Table和Region的(de)關(guan)系,有xing)├lei)似HDFS中(zhong)File和Block的(de)關(guan)系。由于HBase提(ti)供了(liao)配套的(de)與MapReduce進(jin)行(xing)交huan)?de)API如(ru)TableInputFormat和TableOutputFormat,可(ke)以將HBase的(de)數(shu)據表直接(jie)作(zuo)為Hadoop MapReduce的(de)輸(shu)入和輸(shu)出,從而方便了(liao)MapReduce應用程序的(de)開發,基本不需要關(guan)注HBase系統自身的(de)處理細節(jie)。


乐猫彩票官网

    Tag標(biao)簽︰HBase工作(zuo)理學習  
    • 乐猫彩票官网

    About IT165 - 廣告服務 - 隱私聲明(ming) - 版權申明(ming) - 免(mian)責條(tiao)款 - 網(wang)站地圖(tu) - 網(wang)友投稿(gao) - 聯(lian)系方式
    本站內容來自于互聯(lian)網(wang),僅供用于網(wang)絡技(ji)術學習,學習中(zhong)請(qing)遵(zun)循相(xiang)關(guan)法律(lv)法規(gui)
    乐猫彩票官网 | 下一页