Hbase特點(diǎn):
海量存儲:適合PB級別的海量數(shù)據(jù)昼接,,hbase有良好的擴(kuò)展性
列式存儲:根據(jù)列族來存儲數(shù)據(jù)的
極易擴(kuò)展:
高并發(fā):
稀疏存儲:數(shù)據(jù)為空的情況下不占用存儲空間
Hbase架構(gòu)圖:
Hbase通過zk來做master的高可用疮方,regionServer的監(jiān)控、元數(shù)據(jù)的入口以及集群配置的維護(hù),通過zk來保證只有一個(gè)master在運(yùn)行朽缴,通過競爭機(jī)制產(chǎn)生master沧侥;zk來監(jiān)控regionserver狀態(tài)可霎,regionserver有異常的時(shí)候,通過回調(diào)的形式通知master regionserver上下線的信息宴杀;通過zk存儲元數(shù)據(jù)的同一入口地址啥纸;
Hmaster:為regionserver分配region;維護(hù)整個(gè)集群的負(fù)載均衡婴氮;維護(hù)集群的元數(shù)據(jù)信息斯棒;發(fā)現(xiàn)失效的region盾致,將失效的region分配到正常的regionserver上;regionserver失效時(shí)荣暮,協(xié)調(diào)對應(yīng)Hlog的拆分庭惜。HregionServer:處理用戶的讀寫請求,是真正執(zhí)行讀寫的節(jié)點(diǎn)穗酥,包括:管理master為其分配的region护赊;處理來自客戶端的讀寫請求;負(fù)責(zé)和底層HDFS的交互砾跃,存儲數(shù)據(jù)到HDFS骏啰;負(fù)責(zé)region變大以后的拆分;負(fù)責(zé)Storefile的合并工作抽高;
Hlog:編輯日志判耕,通過Hlog回滾
Region:相當(dāng)于表(一個(gè)或者多個(gè)表),region可以進(jìn)行切分的翘骂,數(shù)據(jù)量較大時(shí)壁熄,會將region進(jìn)行切分(實(shí)現(xiàn)負(fù)載均衡),會有多個(gè)region碳竟,
Store:相當(dāng)于列族草丧,一個(gè)region中可以有多個(gè)列族,列不能拋開列族單獨(dú)存在
Store file:在磁盤中存儲的文件莹桅,以Hfile的存儲格式存儲昌执,以Hfile存在HDFS上,
Rowkey的設(shè)計(jì)原則:
Rowkey的長度可以是任意的字符串诈泼,最大長度是64Kb,在實(shí)際中一般為10-100個(gè)字節(jié)懂拾,一般來說越短越好,hbase會將部分?jǐn)?shù)據(jù)加載到內(nèi)存中厂汗,rowkey過長委粉,內(nèi)存的有效利用率會下降
Rowkey散列原則:目的是使數(shù)據(jù)均衡分布,各個(gè)regionserver負(fù)載均衡
Rowkey唯一原則:保證唯一性娶桦,rowkey是按照字典順序排序存儲的
Hbase數(shù)據(jù)結(jié)構(gòu):
Rowkey:用來檢索記錄的主鍵贾节,訪問hbase tabe 中的行有三種方式:單個(gè)rk訪問;掃描rk的range(正則)衷畦;全表掃描栗涂;
Column Family:列族,是表的一部分祈争,必須在使用表之前定義斤程,列名都以列族為前綴。
Cell:相當(dāng)于一個(gè)單元格,又行鍵忿墅,列名扁藕,版本唯一確定。Cell中的數(shù)據(jù)是沒有類型的疚脐,全部以字節(jié)碼的形式存儲亿柑,
Timestamp:版本通過時(shí)間戳來索引,時(shí)間戳的類型是64位整型棍弄,每個(gè)cell中望薄,不同版本的數(shù)據(jù)按照時(shí)間倒序排序,時(shí)間戳可以由用戶顯示的賦值呼畸,也可以取當(dāng)前系統(tǒng)時(shí)間
Hbase讀數(shù)據(jù)流程:
Hbase寫數(shù)據(jù)流程:(不需要與磁盤交互痕支,所以快)
數(shù)據(jù)Flush過程:
當(dāng)MenStore數(shù)據(jù)達(dá)到閾值(默認(rèn)是128M,老版本64M)蛮原,將數(shù)據(jù)刷到磁盤卧须,將內(nèi)存中的數(shù)據(jù)刪除,同時(shí)刪除Hlog中的歷史數(shù)據(jù)瞬痘;
并將數(shù)據(jù)存儲到HDFS中故慈;
在Hlog中做標(biāo)記板熊;
【注 刷寫的觸發(fā)條件】
Regionserver超過堆內(nèi)存的40%會執(zhí)行刷寫框全;
Menstore中時(shí)間超過一個(gè)小時(shí);
Region的內(nèi)存超過128M的時(shí)候觸發(fā)干签,由master觸發(fā)津辩,由regionserver執(zhí)行
數(shù)據(jù)合并過程:
【注****合并觸發(fā)條件】
Hfile默認(rèn)7天合并一次;
Flush為hfile時(shí)容劳,超過3個(gè)hfile就會對這些文件進(jìn)行合并
Hive VS hbase:
Hive:是基于hadoop的一個(gè)數(shù)倉工具喘沿,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為數(shù)據(jù)庫表,并提供簡單的SQL查詢竭贩;hive本身不存儲和計(jì)算數(shù)據(jù)蚜印,完全依賴于HDFS和MR,hive用HDFS存儲留量,用MR進(jìn)行計(jì)算窄赋,hive是將SQL轉(zhuǎn)換成map-reduce程序;
Hbase:是hadoop的數(shù)據(jù)庫楼熄,是物理表忆绰,是一個(gè)菲關(guān)系型數(shù)據(jù)庫
聯(lián)系:
Hbase主要解決的是實(shí)時(shí)數(shù)據(jù)查詢問題,hive主要解決數(shù)據(jù)的處理和計(jì)算可岂,
在大數(shù)據(jù)架構(gòu)中错敢,hive和hbase是協(xié)作的關(guān)系,通過hive對原始數(shù)據(jù)的清洗缕粹,處理和計(jì)算稚茅,hive處理后的數(shù)據(jù)可存入hbase中纸淮,數(shù)據(jù)從hbase中檢索;
Hbase VS MySQL:
關(guān)系型數(shù)據(jù)庫:
優(yōu)點(diǎn):數(shù)據(jù)之間有關(guān)系亚享,進(jìn)行增刪改查很方便萎馅;
有事務(wù)操作,保證數(shù)據(jù)的完整性和一致性虹蒋;
缺點(diǎn):無法對海量數(shù)據(jù)進(jìn)行處理糜芳,適合一般量級的數(shù)據(jù);
Hbase:
優(yōu)點(diǎn):列是可以動態(tài)增加的魄衅,cell沒有數(shù)據(jù)時(shí)峭竣,是不占存儲空間的
Hbase自動進(jìn)行切分?jǐn)?shù)據(jù),能夠?qū)崿F(xiàn)負(fù)載均衡
缺點(diǎn):不能支持條件查詢晃虫,只能按照rowkey查詢
數(shù)據(jù)類型:hbase中只有字節(jié)碼類型皆撩,所有的類型都由用戶自己進(jìn)行處理,關(guān)系型數(shù)據(jù)庫中是有不同的數(shù)據(jù)類型的
數(shù)據(jù)操作:hbase只有簡單的增刪改查操作哲银,表與表之間是分離的扛吞,關(guān)系型數(shù)據(jù)庫有各種各樣的連接操作和函數(shù)處理
存儲模式:hbase是基于列族存儲的,存儲的數(shù)據(jù)量較大荆责,關(guān)系型數(shù)據(jù)庫是基于表格結(jié)構(gòu)和行模式存儲的滥比;
可伸展性:hbase是一個(gè)分布式數(shù)據(jù)庫,很容易擴(kuò)展存儲空間做院,而且容錯(cuò)性比較高
Hbase優(yōu)化:
高可用:hmaster負(fù)責(zé)監(jiān)控regionserver的生命周期盲泛,實(shí)現(xiàn)負(fù)載均衡,如果Hmaster掛掉了键耕,配置高可用 hmaster節(jié)點(diǎn)寺滚,所以這種不健康的狀態(tài)不會持續(xù)很長時(shí)間;
預(yù)分區(qū):提前將分區(qū)大致規(guī)劃好
Rowkey設(shè)計(jì):設(shè)計(jì)的目的是讓數(shù)據(jù)均勻的分布于region中屈雄,一定程度上防止數(shù)據(jù)傾斜村视,可以hash取值,
內(nèi)存優(yōu)化:提高堆內(nèi)存空間
為什么會有列族:
一行有若干列組成,若干列又構(gòu)成一個(gè)列族(column family)酒奶,這不僅有助于構(gòu)建數(shù)據(jù)的語義邊界或者局部邊界蚁孔,還有助于給他們設(shè)置某些特性(如壓縮),或者指示他們存貯在內(nèi)存中讥蟆,一個(gè)列族的所有列存貯在同一個(gè)底層的存儲文件中勒虾,這個(gè)存儲文件叫做HFile。?