好程序員大數(shù)據(jù)學(xué)習(xí)路線Hbase總結(jié),為什么有hbase
成都創(chuàng)新互聯(lián)公司從2013年開始,先為趙縣等服務(wù)建站,趙縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為趙縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
隨著數(shù)據(jù)的逐漸增大,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫無法滿足對數(shù)據(jù)的查詢和存儲,而hive不是數(shù)據(jù)庫,只是數(shù)據(jù)倉庫,雖然能夠滿足簡單的存儲要求,但是始終無法滿足對非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)的存儲和查詢
?
2hbase是什么
Hbase是阿帕奇旗下的一款開源的,多版本的,可擴(kuò)展的非關(guān)系型數(shù)據(jù)庫。
他是基于谷歌的bigtable的基礎(chǔ)上,建立在hdfs上的一款提供高?可靠性的,高性能的列式存儲,可伸縮,實(shí)時(shí)讀寫的NOSQL的數(shù)據(jù)庫系統(tǒng)
?
3適用場景
?????海量數(shù)據(jù)存儲
?????隨機(jī)實(shí)時(shí)讀寫和管理數(shù)據(jù)
?
4特點(diǎn)
??????列式存儲
??????模式:無模式(不需要use gp1808,就可以直接創(chuàng)建表了,所以導(dǎo)致hbase中的表是不可以重名的)
??????數(shù)據(jù)類型:單一的byte[]
??????多版本(version):每個(gè)值都可以有多個(gè)版本
??????稀疏存儲:如果kv為null,則不占用存儲空間
?
5結(jié)構(gòu)框架
?
Client:
hbase的客戶端,包含訪問的hbase的接口(linux shell ,java api)
?????維護(hù)一些cache(緩存)來加速hbase的速度,比如region的位置信息
?
Zookeeper:
???????監(jiān)控hmaster的狀態(tài),保證有且只有一個(gè)active的hmaster,達(dá)到高可用
???????存儲所有的region的尋址入口,
???????實(shí)時(shí)監(jiān)控hregionserver的狀態(tài),將regionserrver的上下線信息實(shí)時(shí)通知給hmaster
???????存儲hbase的所有表的信息(hbase的元數(shù)據(jù))
?
Hmster(hbase的老大)
?????為regionserver分配region(新建表)
?????負(fù)責(zé)regionserver的負(fù)載均衡
?????負(fù)責(zé)region的重新分配(處理hregionserver異常,hregion裂變)
?????Hdfs上的垃圾文件回收
?????處理schema的更新請求
?
Hregionserver(hbase的小弟) ??
?????維護(hù)老大給他的region(管理本機(jī)上的region)
?????處理client對region的IO請求,并和hdfs交互
?????Regionserver負(fù)責(zé)切分在運(yùn)行過程中變大的region
?
Hregion:
?????Hbase中分布式的存儲和負(fù)載的最小單元,表或者是表的一部分
(在HBase中數(shù)據(jù)按主鍵排序,同時(shí)表按主鍵劃分為多個(gè)Region
Region按大小分割的,隨著數(shù)據(jù)增多,Region不斷增大,當(dāng)增大到一個(gè)閥值的Region就會分成兩個(gè)新的Region)
Region雖然是分布式存儲的最小單元,但并不是存儲的最小單元。每個(gè)Region包含著多個(gè)Store對象。每個(gè)Store包含一個(gè)MemStore或若干StoreFile,StoreFile包含一個(gè)或多個(gè)HFile。MemStore存放在內(nèi)存中,StoreFile存儲在HDFS上。
Hlog;
?????對hbase的操作進(jìn)行記錄,使用wal(Write-Ahead-Log)寫數(shù)據(jù),優(yōu)先寫入log,然后再寫入memstore,以防數(shù)據(jù)丟失時(shí)可以進(jìn)行日志回滾回復(fù)數(shù)據(jù)
Store:
??????相當(dāng)于一個(gè)列簇。
?
Memstore:128M
???????內(nèi)存緩沖區(qū),用于將數(shù)據(jù)批量刷新到hdfs上
?
Hstorefile(hfile)
???????Hbase中的數(shù)據(jù)是以hfile的形式存儲到hdfs上
?????
寫流程:
1client通過zookeeper的調(diào)度,向regionserver發(fā)出寫數(shù)據(jù)請求,在region中寫數(shù)據(jù)
2數(shù)據(jù)被寫入region的memstore,直達(dá)memstore達(dá)到預(yù)設(shè)的閾值(128M)
3memstore中的數(shù)據(jù)被flush成一個(gè)storefile
4隨著storefile文件的不斷增多,當(dāng)其數(shù)量增長到一定閾值的時(shí)候,觸發(fā)了compact合并操作,將多個(gè)storefile合并成一個(gè)storefile,同時(shí)進(jìn)行版本合并和數(shù)據(jù)刪除
5storefiles通過不斷的compact合并操作,逐漸形成越來越大的storefile
6單個(gè)storefile大小超過一定閾值之后,觸發(fā)spilt操作,把當(dāng)前的region切分成2個(gè)新的region,父region會下線,新切出的2個(gè)字region會被hmaster分配到相應(yīng)的regionserver上,使得原先的一個(gè)region的壓力的以分配到2個(gè)region上
?
讀流程:
1client訪問zookeeper,查找root表,獲取meta表的信息
2從meta表中查找,獲取存放的目標(biāo)的region信息,從而找到對應(yīng)的regionserver
3通過regionserver獲取需要查詢的數(shù)據(jù)
4regionserver的內(nèi)存分為memstore和blockcache兩部分,memstore主要用于寫數(shù)據(jù),blockcache主要用于讀數(shù)據(jù),請求先到memstore中查數(shù)據(jù),查不到就在blockcache在查,再查不到就會到storefile上讀,并把讀的結(jié)果放入blockcache
?
尋址過程:client-->Zookeeper-->-ROOT-表-->.META.表-->RegionServer-->Region-->client
Rowkey:行鍵,和MySQL的主鍵一樣,不允許重復(fù),按照字典順序排列
Columnfamily:列簇
Column:列
Timestamp:時(shí)間戳,默認(rèn)顯示最新的時(shí)間戳
Version:版本號,記錄數(shù)據(jù)的版本
Cell:單元格,一個(gè)key?一個(gè)value