在hbase里面有幾個通俗的名稱會經常出現
1)Hregion = region
2)Hregionserver = regionserver
3)Hmaster = master
4)Hmamstore = memstore
5)Hfile = storeFile
?
1、什么是hbase?
1)它是基于稀疏的、分布式的、持久化的、多維有序映射,它基于行健、列簇、時間戳建立索引
2)構建在hdfs之上的分布式列式鍵值存儲系統,hbase內部管理的文件存儲在hdfs中。
??
2、有什么特點?
1)不介意數據類型,允許動態的、靈活的數據模型,并不限制存儲數據的種類。因此他可以自如的存儲結構化和半結構化的數據。
2)它不要sql語音,不強調數據之間的關系
3)它不允許跨行的事物,可以在一行的某一列存儲一個整數,而在另一行的同一列存儲一個字符串
4)它被設計在一個服務器集群上運行,而不是單臺服務器。這就意味著是一種強大的、可擴展的數據使用方式。
?
3、列式存儲
列式存儲的基礎:對于特定的查詢,不是所有的值都是必須的。
1)以列為單位聚合數據,然后將列值順序的存入磁盤
2)數據類型一致,數據特征相似,更利于壓縮
3)大量降低系統I/O
?
?
4、HBASE特性
1)容量巨大:單表可以有百億行,百萬列
2)面向列
3)稀疏性:空值不占用存儲空間
4)擴展性:由hdfs決定,熱擴展
5)高可用性:WAL和Replication機制;hdfs;zookeeper
6)共性能:LSM數據結構;Rowkey有序排列
7)無模式
8)數據多版本
9)數據類型單一
10)TTL
?
5、client
1)包含訪問hbase的接口,并維護cache來加快對hbase的訪問
2)通過rpc機制和master,region server通信
?
6、zookeeper
1)保證任何時候,集群中只有一個master
2)存儲所有region的尋址入口
3)實時監控region server的上下線信息。并通知給master
4)存儲hbase元數據信息
5)hbase中可以啟動多個Hmaster,通過zookeeper的master election機制保證總有一個master運行
?
7、HMaster主要負責:table、region管理工作
1)管理用戶對table的增刪改查
2)管理regionserver的負載均衡,跳轉region分布
3)在region分裂后,負責新region的分配
4)在regionserver死機后,負責失效regionserver上的region遷移
?
(由于master只維護表和region的元數據,而不參與表數據IO的過程,master下線僅導致所有元數據的修改被凍結(無法創建刪除表,無法修改表的schema,無法進行region的負載均衡,無法處理region上下線,無法進行region的合并,唯一例外的是region的split可以正常進行,因為只有region server參與),表的數據讀寫還可以正常進行。
因此master下線短時間內對整個hbase集群沒有影響。)
?
8、regionserver:主要負責響應用戶I/O請求,向hdfs文件系統中讀寫數據
1)管理了一系列Hregion對象,每個Hregion對應了table中的region
2)Hregion由多個Hstore組成,每個Hstore對應了table中的一個column Family的存儲
每個column Family其實就是一個集中的存儲單位,簡稱Hstore
3)regionserver維護region,處理對這些region的IO請求
4)regionserver負責切分在運行過程中變得過大的region
5)regionserver提供行級鎖
?
注:
1)Hregionserver:Hregion:Hstore = Column Family
2)Hstore:
- memStore:用戶首先先寫入MemStore。(flush操作)
- StoreFile:Hfile(compact合并,split操作)
3)hbase只有增加數據,所有更新和刪除都是在compact過程中進行的。
4)用戶寫操作只要寫入內存就可以立即返回,保證I/O高性能
5)同一臺rs上的所有region共享相同的Hlog Files
6)每個update(或者說edit)都會被寫到log,當通知客戶端成功后,rs把數據再加載到內存中。
?
9、region是什么?
1)region按大小分割的,每個表開始只有一個region,隨著數據增多,region不斷增大,當增大到一個閥值的時候,region就會等分兩個新的region,只會就會越來越多。
2)本質上是以行鍵排序的連續存儲的區間
3)region最佳大小:1GB~2GB
4)regionserver:10~1000個region
5)不同的region分布到不同regionserver上
6)每個Hregion保存某段連續的數據,從開始主鍵(startRow)到結束主鍵(endRow),通過Hregion從Hadoop的分布式文件系統上數據
?
region雖然是分布存儲的最小單位,但并不是存儲的最小單位
1)一個region由一個或者多個store組成,每個store保存一個 columns family
2)每個store又由一個memstore和0個至多個storeFile組成
3)memstore存儲在內存中,storeFile存儲在hdfs上
?
?
10、Hstore是什么?
Hstore:Hstore存儲是Hbase存儲的核心,由memstore和storeFile組成。
1)Hmemcache:內存中的緩存,保存著最近更新的數據,如果Hmemcache沒有數據,將從hstores獲取磁盤上的數據,每個列簇會有一個hstore集合,每個集合包含多個Hstorefiles文件(b+數結構)
2)Hregion定期調用flushcache()緩存里的內容寫入到文件中,每次調用產生一個新的文件Hstorefile文件,從一個hstore或數據會訪問所有的Hstotefile,很耗時,hstore.compact可以完成小文件到達文件的合并
?
11、Hlog是什么?
磁盤上的操作記錄文件,記錄這所有的更新操作,數據寫入Hlog后,commit()調用才會返回給客戶端。
數據的更新操作最先被記錄在Hmemcache和Hlog中
?
12、Row key
行鍵,table的主鍵,Table中的記錄按照Row key排序。類型為Byte array
1)不宜過長
2)分布均勻
?
13、Column Family
列族,table水平方向有一個或者多個Column Family組成,一個Column Family中可以由任意多個Column組成
?
14、Cloumn
列 格式為:familyName:columnName
列名稱是編碼在cell中的
不同的cell可以擁有不同的列
?
15、Version Number
版本號。默認值是時間戳。類型為long
?
16、Value(Cell)
具體的值。類型為Byte array
?