hbase hmaster一会就没了_浅析HBase
一、HBase簡介
1、Apache HBase?是Hadoop數(shù)據(jù)庫,是一個分布式,可擴展的大數(shù)據(jù)存儲。
2、當您需要對大數(shù)據(jù)進行隨機,實時讀/寫訪問時,請使用Apache HBase?。 該項目的目標是托管非常大的表( 數(shù)十億的行*百萬的列 ) 在商品硬件集群上。 Apache HBase是一個開源的,分布式的,版本化的非關(guān)系數(shù)據(jù)庫
3、利用Hadoop HDS 作為其文件存儲系統(tǒng),利用Hadoop MapReduce來處理HBASE中的海量數(shù)據(jù),利用ZOOKEEPER作為其分布式協(xié)同服務
4、主要用來存儲非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)
二、HBASE數(shù)據(jù)模型
1、Rowkey
rowkey類似于關(guān)系型數(shù)據(jù)庫的主鍵,是一行記錄的唯一標識。
rowkey是按照字典序自動排序的
rowkey只能存儲64K的字節(jié)數(shù)據(jù)
2、Column Family列族 (CF)
HBase表中的每個列都歸屬于某個列族,列族必須作為表模式(schema)定義的一部分預先給出。如 create ‘test’, ‘course’;
列名以列族作為前綴,每個“列族”都可以有多個列成員(column);如course:math, course:english, 新的列族成員(列)可以隨后按需、動態(tài)加入;
權(quán)限控制、存儲以及調(diào)優(yōu)都是在列族層面進行的;
HBase把同一列族里面的數(shù)據(jù)存儲在同一目錄下,由幾個文件保存。
3、Timestamp時間戳
在HBase一份數(shù)據(jù)有多個版本,根據(jù)唯一的時間戳來區(qū)分每個版本之間的差異,不同版本的數(shù)據(jù)按照時間倒序排序,最新的數(shù)據(jù)版本排在最前面。
時間戳的類型是64位整形
時間戳可以在數(shù)據(jù)寫入時由HBase自動賦值也可以人員手動指定
4、cell單元格
cell單元格是由行和列的交叉坐標決定的
cell單元格是由版本的
cell單元格中的內(nèi)容: 由{row key, column( =<family> +<qualifier>), version} 唯一確定的單元
cell中存儲的數(shù)據(jù)是沒有類型的,全部由字節(jié)數(shù)組組成,也就是說HBASE中的數(shù)據(jù)是沒有類型的,全都是字節(jié)數(shù)組
三、HBase的預寫日志(WAL)
因為HBase是實時讀寫的數(shù)據(jù)庫,所以我們在操作數(shù)據(jù)的時候,會把數(shù)據(jù)先放在內(nèi)存中,當內(nèi)存中的數(shù)據(jù)達到一定量的時候才會落盤。但數(shù)據(jù)放在內(nèi)存中是有一定的風險的,比如掉電之后,內(nèi)存中的數(shù)據(jù)就會丟失。為了防止這種情況,HBase中加入了WAL(write ahead log)預寫日志機制,每個數(shù)據(jù)的寫入操作(PUT/DELETE)執(zhí)行前,必須先通過WAL記賬。先將數(shù)據(jù)寫入Hlog文件,如果寫入失敗,則寫入操作失敗。Hlog位于RegionServer中,每個RegionServer維護一個Hlog。
WAL的作用是災難恢復,一旦服務器崩潰,或者數(shù)據(jù)被誤刪,則通過log日志重放,可以恢復事故數(shù)據(jù)。
WAL如此重要,所以默認是開啟的
四。HBase架構(gòu)
HBase架構(gòu)的角色:
1、client
包含HBase的接口并維護cache來加快對hbase的訪問
2、zookeeper
保證任何時候,集群中只有一個活躍的HMaster
存儲所有的Region的尋址入口
實時監(jiān)控所有HRegionServer的上下線消息,并通知HMaster
3、HMaster
HMaster是沒有單點故障的,因為集群中可以有多個HMaster,但是通過zookeeper的分布式協(xié)同服務保障有且只有一個活躍的HMaster對外提供服務。
HMaster負責為RegionServer分配region。
負責RegionServer的負載均衡。
發(fā)現(xiàn)失效的RegionServer并重新分配其上的region。
管理用戶對table的增刪改操作。
4、HRegionServer
RegionServer維護Region,處理對這些Region的I/O請求。
RegionServer負責切分在運行過程中逐漸變得過大的region。
HRegionServer中的組件
1、region
HBase自動把表水平劃分成多個區(qū)域(region),每個region會保存一個表里面某段連續(xù)的數(shù)據(jù)。也就是說一個大表被切成很多小份,每個小份是一個region。
每個表一開始只有一個region,隨著數(shù)據(jù)的不斷插入,region不斷增大。當region增大到某個閾值的時候,region就會等分為兩個新的region(裂變)。
當table中的行不斷增多,就會有越來越多的region。這樣,一張完整的表就被 保存在多個RegionServer上。
region是HBase中分布式存儲和負載均衡的最小單元。最小單元就表示不同的region可以分布在不同的HRegionServer上。
2、store
一個region有多個store組成,每個store對應一個CF(列族)。
store中包含位于內(nèi)存中的memstore和位于磁盤的storefile。
3、memstore與storefile
每當進行寫操作時,寫操作會先進入memstore,當memstore中的數(shù)據(jù)到達某個閾值,HRegionServer會啟動flashcache進程將數(shù)據(jù)寫到storefile,每次寫入形成一個單獨的storefile。
當storefile文件數(shù)量達到一定閾值后,系統(tǒng)會進行合并,在合并過程中會進行版本合并和刪除工作,形成各大的storefile。
當一個region所有的storefile的大小和數(shù)量達到一定的閾值后,會把當前的region分割為兩個,并有HMaster分配到不同的RegionServer服務器,實現(xiàn)負載均衡。
storefile以Hfile的格式存儲在HDFS上。
客戶端檢索數(shù)據(jù),先到memstore中找,找不到再到blockcache,再找不到去storefile
五、HBase的讀寫流程(0.98以后版本)
寫請求
客戶端在進行寫請求的時候。首先會訪問zookeeper,因為zookeeper中存儲著HBase元數(shù)據(jù)(meta)所在節(jié)點的信息(HBase的元數(shù)據(jù)在某個RegionServer中存儲,但是存儲元數(shù)據(jù)的RegionServer的信息保存在zookeeper中)。客戶端拿到元數(shù)據(jù)所在節(jié)點后訪問相應節(jié)點的RegionServer拿到元數(shù)據(jù)。最后根據(jù)元數(shù)據(jù)找到要操作的region。但是,找到region后不是先往memstore中寫。而是要先寫入WAL(預寫日志)的hlog中(寫入hlog成功后,會有一個異步側(cè)線程sync(),這個線程會實時檢測hlog中有沒有數(shù)據(jù),如果有,直接落盤),只有往hlog中寫入成功了,才能接著往memstore中寫。
當memstore中的數(shù)據(jù)到達某個閾值,HRegionServer會啟動flashcache進程將數(shù)據(jù)寫到storefile,每次寫入形成一個單獨的storefile。
當storefile文件數(shù)量達到一定閾值后,系統(tǒng)會進行合并,在合并的時候會對數(shù)據(jù)排序,同時在合并過程中會進行版本合并和刪除工作,形成各大的storefile。
合并的方式有兩種,分別是minor和major。minor默認是3~10個storefile進行合并。major則是將當前目錄下的所有的storefile合并。注意:在文件合并的時候是不提供服務的。
因為minor是3~10個文件進行合并,所以占用資源少,速度快。所以我們一般使用minor。而major因為熟讀慢,所以我們一般不用,用也是手動進行。
當一個region所有的storefile的大小和數(shù)量達到一定的閾值后,會把當前的region分割為兩個,并有HMaster分配到不同的RegionServer服務器,實現(xiàn)負載均衡。
讀請求
客戶端在進行讀請求的時候。尋找region的過程幾乎與寫請求相同。首先在zookeeper中找元數(shù)據(jù)在哪個RegionServer中存儲,然后找到RegionServer拿到元數(shù)據(jù),然后根據(jù)元數(shù)據(jù)找相應的region。
在region中尋找數(shù)據(jù)的過程如下:首先,會在region的memstore中尋找,如果被查找的記錄是剛剛通過寫請求寫入的,還沒被寫入storefile,那么查找成功。如果沒有找到,則到blockcache(讀緩存)中找,找到返回。找不到會繼續(xù)深入到storefile中查找,注意:如果是在storefile中找到的,并不會立即返回,而是要先將數(shù)據(jù)寫入blockcache中(方便下次查找),寫入成功后返回數(shù)據(jù)。
但是,這樣存在一個問題,那就是隨著讀請求的增多,blockcache會不斷變大。為了防止這種情況,系統(tǒng)采用最近最少使用算法(LRU)來維護blockcache。
blockcache位于RegionServer中,一個RegionServer維護一個blockcache。
總結(jié)
以上是生活随笔為你收集整理的hbase hmaster一会就没了_浅析HBase的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考:论文写作
- 下一篇: 超微服务器电源短接启动图解_教你一招,让