hbase 的基本結構
HBASE 基本結構
一。overview
1. hbase <=> NOSQL
不錯,hbase 就是某種型別的nosql 資料庫,唯一的區別就是他支援海量的資料。
hbase的基本功能:
1) 強一致性的讀寫,而非“最終一致性”(eventually consistent)的資料倉儲。基於此,hbase非常適合高速的統計計數工作。
2)自動sharding ,hbase 是分散式的資料庫,支援資料的自動切分。
3) regionServer 的自動failover
4) 整合hadoop/hdfs ,habase 是構建在hadoop/hdfs 檔案系統上的。
5) 支援mapreduce
6) java client api
7) Thift/Rest api : 支援非java 語言的訪問。
8) 資料塊級cache 及布隆過濾(bloom filter)
9) 整合操作管理系統,提供基於web 及command-line的工具。
2.適用場景:
1) hbase 並非適合所有的場景,首先,你要有足夠的資料,如果只有幾百萬筆記錄,一般的RDBMS 就可以管理了。 hbase 設計是支援數十億記錄級別的資料倉儲
2) hbase 不支援RDBMS的功能,比如表連線,索引,排序等。
3) 確信,你有足夠的硬體系統來支援。hbase 不保證能夠在5個節點一下的叢集中,正確的執行。
3.hbase 與hadoop/hdfs 的區別:
1) hdfs 是一個分散式的檔案系統,他非常適合於儲存大檔案,他僅完成了一般檔案系統的功能,他不支援檔案內部記錄級別的搜尋功能。
2) hbase 是構建在hdfs之上的,並且提供了記錄級別的快速查詢功能。hbase 將資料放在索引過的storefile 中。
二。字典表
hbase 的資料字典: -ROOT- .META 這倆表被hbase shell 的list 命令過濾掉,不顯示,但是他們跟普通的hbase TABLE 是一樣的。
1.ROOT
1) root表記錄了.META. 表的位置 他的結構:
A) Key:
.META. region key(.META.,,1)
B) Values:
info:regioninfo (serialized HRegionInfo instance of .META.)
info:server (server:port of the RegionServer holding .META.)
info:serverstartcode (start-time of RegionServer process holding .META.)
2.META.
1) META. 表 儲存了系統中所有的regions 的資訊,結構:
A) Key:
Region key of the format ([table],[region start key],[region id])
B) Values:
info:regioninfo (serialized HRegionInfo instance for this region)
info:server (server:port of the RegionSever containing this region)
info:serverstartcode (start-time of the RegionSever process containing this region)
2) 當一個region 正在執行split 的時候,會出現另外兩個列 info:splitA 與 info:splitB 這倆列的值也是HRegionInfo 的例項,當split 完畢後,這兩列會被刪除掉。
3) 注意: HRegionInfo: 如果key 為空,指示表的開始與表的結尾,
如果一個region 有空的start key 則這個region 是表的第一個region。 如果region 同事有空的start key 與空的end key ,那麼這個表只有當前一個region。
3.啟動序列:
META. 的位置寫入ROOT META. 跟新server 與startcode 的值。
三。 CLIENT
Hbase 的client HTable 負責查詢resionserver 用來提供基本的操作,透過查詢.META. 以及-ROOT- 字典表來查詢regionsever 。
一旦找到對應的region ,客戶端會直接連去region 對應的resionserver ,同事也會cache 這個結果,之後就不再透過meta. 來讀寫資料,除非這個regionserver死掉,才會從新從meta. 查詢新的regionserver 。
1.連線:
HTable 不是執行緒安全的,不適合多執行緒呼叫。一般建議使用HBaseConfiguration 例項來連線資料庫。
1) 連線池,目前沒有最終的解決方案,有個HTablePool ,但是難於管理。
一般提前建立一個陣列來儲存已經建立的連線:
HConnectionManager.createConnection(Configuration)
2) WriterBuffer 與批次(batch) 方法
如果客戶端的 AutoFlush 被設為off 那麼資料的寫入,會先寫滿writebuffer 然後再重新整理的resionserver。 writebuffer 預設是2MB .
注意: htable.delete(Delete) 方法,不會進入writebuffer 。
關於控制writebuffer 的細粒度的參考 HTable的batch 方法。
3) 對非java 客戶端的支援。
4) 行級鎖, 目前的client 還有行級鎖,以後的版本會去除這塊。
四. 客戶端請求過濾(Client Request Filter)
Get 與Scan 例項,可以配置filter 來過濾,但是Filter 可能會被拒絕因為型別太多了,需要先理解他們的功能。
這一部分,需要對系統程式碼有一定的瞭解,需要比較好的java 知識,先掠過去。
考一段例項程式碼:
FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ONE);
SingleColumnValueFilter filter1 = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes("my value")
);
list.add(filter1);
SingleColumnValueFilter filter2 = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes("my other value")
);
list.add(filter2);
scan.setFilter(list);
2.列值的filter
SingleColumnValueFilter 用來過濾列值(column value) 操作CompareOp.EQuAL 相等 CompareOp.NOT_EQUAL 不相等,CompareOpGREATER 範圍
一段示例程式碼:
SingleColumnValueFilter filter = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes("my value")
);
scan.setFilter(filter);
3.正規表示式支援:
SubstringComparator comp = new SubstringComparator("y val"); // looking for 'my value'
SingleColumnValueFilter filter = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
comp
);
scan.setFilter(filter);
關於filter 這部分,參考 9.4. 節內容。
五. Master
HMaster 是一臺管理伺服器,負責監控所有的regionserver 例項,以及提供修改.META.的介面,在生產環境中,hmaster 一般部署在namenode 上。
1.啟動時行為:
如果執行在多主的環境中,如果主要的master 故障,或則無法與ZOOKEEPer 的聯絡,備機會接替。
2.執行時故障:
如果在叢集執行期間,hmaster下線,因為client 都直接與regionserver 聯絡,所以叢集可以繼續執行一小段時間,但是因為hmaster 控制了核心功能,所以如果master 下線,應儘快重啟master 。
3.介面(Interface)
HMasterInterface 提供 基於metadata的介面
Table (createTable modifyTable removeTable enable。。。。)
ColumnFamily (addColumn modifyColumn removeClolumn)
Region (move assign unassign)
4.程式:
hmaster 執行著幾個後臺程式。
1) LoadBalance 程式 負載負載均衡。
2) CatalogJanitor 檢查並清理.META. 表。
六. RegionServer
regionserver 為region 提供管理服務 在生產部署上,regionserver 執行在datanode 上。
1.介面 提供資料的訪問,以及region 的管理
Data (get put delete next 。。。)
Region (splitRegion compactRegion。。。)
2.程式 regionserver 執行幾個後臺程式。
1) CompactSplitThread
提供split 以及小型 壓縮/整理工作
2) MajorCompactionChecker
提供大型壓縮/整理工作
3)MemStoreFlusher
週期性的重新整理記憶體的資料導磁碟
4) LogRoller
週期性檢查regionserver 的HLOG
3.Coprocessors
因為java 不能多繼承,所以很多複雜性的工作,導致java程式碼的編寫變的很複雜,而hbase 的不同的功能點,都在不同的模組裡,這就導致,一個程式碼同事完成幾個功能時,使編碼工作很複雜,於是參照goole 論文裡的技術,開發了Coprocessors 模組。 詳細資訊參照: https://blogs.apache.org/hbase/entry/coprocessor_introduction
4.Block Cache
1)設計: block cache 是lru CACHE 有3個級別的cache 策略
a) 單次訪問策略: 一個資料塊第一次從hdfs載入cache
b) 多次訪問側路: 一個資料塊在a)策略基礎上,被多次訪問。
c) In-memory策略:
關於cache 策略:
2) USAGE
Block cache 預設對所有的使用者表起作用,也就是所有的資料讀取操作,都會經過block cache 的快取。適合於大多數情況,為了特定的效能提升關閉cache 也是可以的。cache 的設定取決於工作集(WSS working_set_size) 大小。
block cache 的大小的估算公式:
number of region servers * heap size * hfile.block.cache.size * 0.85
預設的block cache的尺寸是heapsize 的25% 幾個例項:
一個region server 預設的heapsize 1g 那麼block cache 大約為217Mb
20個 region serer 預設的heapsize 8g 那麼blocK CACHE 大約為34Gb
100個region server 預設的heapsize 24g block cache 大約1TB
.META. -ROOT- 字典表預設為In-memory 策略。
HFILE 的索引 keys, Bloom filter 也會用到block cache 。
使用原則: 應該瞭解一下自己要訪問的資料集的大小,
對於隨機訪問的,不建議使用block cache ,因為大資料量的隨機訪問,會導致block cache 別佔滿,而後,因為lru策略會導致jvm 更多的垃圾回收,帶來效能損失。
對於MAPPING TABLE : A在mapreduce任務中,因為每個記錄僅被讀取一次,所以沒有必要使用block cache 。
5.WAL (hbase 日誌)
1) 每個regionserver 會把對資料的修改寫進wal 日誌,然後寫memstore 然後才寫到store 物理檔案中。HLOG 是wallog的實現,每個regionserver 一個例項。
2) wal flush 目前沒有文件記載。
3) wal splitting
沒有詳細文件記載
七.Regions
regions 是高可用,與可分散式表的基本元素,每個列族(column family)一個store (對應我們理解上的一個資料檔案)
(HBase table)
Region (Regions for the table)
Store (Store per ColumnFamily for each Region for the table)
MemStore (MemStore for each Store for each Region for the table)
StoreFile (StoreFiles for each Store for each Region for the table)
Block (Blocks within a StoreFile within a Store for each Region for the table)
hbase 在HDFS 上的儲存結構:
/hbase
/ (Tables in the cluster)
一。overview
1. hbase <=> NOSQL
不錯,hbase 就是某種型別的nosql 資料庫,唯一的區別就是他支援海量的資料。
hbase的基本功能:
1) 強一致性的讀寫,而非“最終一致性”(eventually consistent)的資料倉儲。基於此,hbase非常適合高速的統計計數工作。
2)自動sharding ,hbase 是分散式的資料庫,支援資料的自動切分。
3) regionServer 的自動failover
4) 整合hadoop/hdfs ,habase 是構建在hadoop/hdfs 檔案系統上的。
5) 支援mapreduce
6) java client api
7) Thift/Rest api : 支援非java 語言的訪問。
8) 資料塊級cache 及布隆過濾(bloom filter)
9) 整合操作管理系統,提供基於web 及command-line的工具。
2.適用場景:
1) hbase 並非適合所有的場景,首先,你要有足夠的資料,如果只有幾百萬筆記錄,一般的RDBMS 就可以管理了。 hbase 設計是支援數十億記錄級別的資料倉儲
2) hbase 不支援RDBMS的功能,比如表連線,索引,排序等。
3) 確信,你有足夠的硬體系統來支援。hbase 不保證能夠在5個節點一下的叢集中,正確的執行。
3.hbase 與hadoop/hdfs 的區別:
1) hdfs 是一個分散式的檔案系統,他非常適合於儲存大檔案,他僅完成了一般檔案系統的功能,他不支援檔案內部記錄級別的搜尋功能。
2) hbase 是構建在hdfs之上的,並且提供了記錄級別的快速查詢功能。hbase 將資料放在索引過的storefile 中。
二。字典表
hbase 的資料字典: -ROOT- .META 這倆表被hbase shell 的list 命令過濾掉,不顯示,但是他們跟普通的hbase TABLE 是一樣的。
1.ROOT
1) root表記錄了.META. 表的位置 他的結構:
A) Key:
.META. region key(.META.,,1)
B) Values:
info:regioninfo (serialized HRegionInfo instance of .META.)
info:server (server:port of the RegionServer holding .META.)
info:serverstartcode (start-time of RegionServer process holding .META.)
2.META.
1) META. 表 儲存了系統中所有的regions 的資訊,結構:
A) Key:
Region key of the format ([table],[region start key],[region id])
B) Values:
info:regioninfo (serialized HRegionInfo instance for this region)
info:server (server:port of the RegionSever containing this region)
info:serverstartcode (start-time of the RegionSever process containing this region)
2) 當一個region 正在執行split 的時候,會出現另外兩個列 info:splitA 與 info:splitB 這倆列的值也是HRegionInfo 的例項,當split 完畢後,這兩列會被刪除掉。
3) 注意: HRegionInfo: 如果key 為空,指示表的開始與表的結尾,
如果一個region 有空的start key 則這個region 是表的第一個region。 如果region 同事有空的start key 與空的end key ,那麼這個表只有當前一個region。
3.啟動序列:
META. 的位置寫入ROOT META. 跟新server 與startcode 的值。
三。 CLIENT
Hbase 的client HTable 負責查詢resionserver 用來提供基本的操作,透過查詢.META. 以及-ROOT- 字典表來查詢regionsever 。
一旦找到對應的region ,客戶端會直接連去region 對應的resionserver ,同事也會cache 這個結果,之後就不再透過meta. 來讀寫資料,除非這個regionserver死掉,才會從新從meta. 查詢新的regionserver 。
1.連線:
HTable 不是執行緒安全的,不適合多執行緒呼叫。一般建議使用HBaseConfiguration 例項來連線資料庫。
1) 連線池,目前沒有最終的解決方案,有個HTablePool ,但是難於管理。
一般提前建立一個陣列來儲存已經建立的連線:
HConnectionManager.createConnection(Configuration)
2) WriterBuffer 與批次(batch) 方法
如果客戶端的 AutoFlush 被設為off 那麼資料的寫入,會先寫滿writebuffer 然後再重新整理的resionserver。 writebuffer 預設是2MB .
注意: htable.delete(Delete) 方法,不會進入writebuffer 。
關於控制writebuffer 的細粒度的參考 HTable的batch 方法。
3) 對非java 客戶端的支援。
4) 行級鎖, 目前的client 還有行級鎖,以後的版本會去除這塊。
四. 客戶端請求過濾(Client Request Filter)
Get 與Scan 例項,可以配置filter 來過濾,但是Filter 可能會被拒絕因為型別太多了,需要先理解他們的功能。
這一部分,需要對系統程式碼有一定的瞭解,需要比較好的java 知識,先掠過去。
考一段例項程式碼:
FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ONE);
SingleColumnValueFilter filter1 = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes("my value")
);
list.add(filter1);
SingleColumnValueFilter filter2 = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes("my other value")
);
list.add(filter2);
scan.setFilter(list);
2.列值的filter
SingleColumnValueFilter 用來過濾列值(column value) 操作CompareOp.EQuAL 相等 CompareOp.NOT_EQUAL 不相等,CompareOpGREATER 範圍
一段示例程式碼:
SingleColumnValueFilter filter = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes("my value")
);
scan.setFilter(filter);
3.正規表示式支援:
SubstringComparator comp = new SubstringComparator("y val"); // looking for 'my value'
SingleColumnValueFilter filter = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
comp
);
scan.setFilter(filter);
關於filter 這部分,參考 9.4. 節內容。
五. Master
HMaster 是一臺管理伺服器,負責監控所有的regionserver 例項,以及提供修改.META.的介面,在生產環境中,hmaster 一般部署在namenode 上。
1.啟動時行為:
如果執行在多主的環境中,如果主要的master 故障,或則無法與ZOOKEEPer 的聯絡,備機會接替。
2.執行時故障:
如果在叢集執行期間,hmaster下線,因為client 都直接與regionserver 聯絡,所以叢集可以繼續執行一小段時間,但是因為hmaster 控制了核心功能,所以如果master 下線,應儘快重啟master 。
3.介面(Interface)
HMasterInterface 提供 基於metadata的介面
Table (createTable modifyTable removeTable enable。。。。)
ColumnFamily (addColumn modifyColumn removeClolumn)
Region (move assign unassign)
4.程式:
hmaster 執行著幾個後臺程式。
1) LoadBalance 程式 負載負載均衡。
2) CatalogJanitor 檢查並清理.META. 表。
六. RegionServer
regionserver 為region 提供管理服務 在生產部署上,regionserver 執行在datanode 上。
1.介面 提供資料的訪問,以及region 的管理
Data (get put delete next 。。。)
Region (splitRegion compactRegion。。。)
2.程式 regionserver 執行幾個後臺程式。
1) CompactSplitThread
提供split 以及小型 壓縮/整理工作
2) MajorCompactionChecker
提供大型壓縮/整理工作
3)MemStoreFlusher
週期性的重新整理記憶體的資料導磁碟
4) LogRoller
週期性檢查regionserver 的HLOG
3.Coprocessors
因為java 不能多繼承,所以很多複雜性的工作,導致java程式碼的編寫變的很複雜,而hbase 的不同的功能點,都在不同的模組裡,這就導致,一個程式碼同事完成幾個功能時,使編碼工作很複雜,於是參照goole 論文裡的技術,開發了Coprocessors 模組。 詳細資訊參照: https://blogs.apache.org/hbase/entry/coprocessor_introduction
4.Block Cache
1)設計: block cache 是lru CACHE 有3個級別的cache 策略
a) 單次訪問策略: 一個資料塊第一次從hdfs載入cache
b) 多次訪問側路: 一個資料塊在a)策略基礎上,被多次訪問。
c) In-memory策略:
關於cache 策略:
2) USAGE
Block cache 預設對所有的使用者表起作用,也就是所有的資料讀取操作,都會經過block cache 的快取。適合於大多數情況,為了特定的效能提升關閉cache 也是可以的。cache 的設定取決於工作集(WSS working_set_size) 大小。
block cache 的大小的估算公式:
number of region servers * heap size * hfile.block.cache.size * 0.85
預設的block cache的尺寸是heapsize 的25% 幾個例項:
一個region server 預設的heapsize 1g 那麼block cache 大約為217Mb
20個 region serer 預設的heapsize 8g 那麼blocK CACHE 大約為34Gb
100個region server 預設的heapsize 24g block cache 大約1TB
.META. -ROOT- 字典表預設為In-memory 策略。
HFILE 的索引 keys, Bloom filter 也會用到block cache 。
使用原則: 應該瞭解一下自己要訪問的資料集的大小,
對於隨機訪問的,不建議使用block cache ,因為大資料量的隨機訪問,會導致block cache 別佔滿,而後,因為lru策略會導致jvm 更多的垃圾回收,帶來效能損失。
對於MAPPING TABLE : A在mapreduce任務中,因為每個記錄僅被讀取一次,所以沒有必要使用block cache 。
5.WAL (hbase 日誌)
1) 每個regionserver 會把對資料的修改寫進wal 日誌,然後寫memstore 然後才寫到store 物理檔案中。HLOG 是wallog的實現,每個regionserver 一個例項。
2) wal flush 目前沒有文件記載。
3) wal splitting
沒有詳細文件記載
七.Regions
regions 是高可用,與可分散式表的基本元素,每個列族(column family)一個store (對應我們理解上的一個資料檔案)
(HBase table)
Region (Regions for the table)
Store (Store per ColumnFamily for each Region for the table)
MemStore (MemStore for each Store for each Region for the table)
StoreFile (StoreFiles for each Store for each Region for the table)
Block (Blocks within a StoreFile within a Store for each Region for the table)
hbase 在HDFS 上的儲存結構:
/hbase
/
相關文章
- HBase學習之Hbase的邏輯結構和物理結構
- Hbase shell的基本操作
- HBase 基本操作
- 文章的基本結構
- 分散式儲存系統,HBase的基本原理與基本架構分散式架構
- HBase 資料儲存結構
- HBase的基本原理
- HBase基本的資料操作
- HBase的表結構你設計得不對!
- HBase 系統架構及資料結構架構資料結構
- Hbase 系統架構與資料結構架構資料結構
- 智慧卡的基本結構
- HBase 的結構與表的對應關係
- HTML 基本結構HTML
- 基本HTML結構HTML
- ffmpeg基本結構
- Spark的基本結構及SparkSQL元件的基本用法SparkSQL元件
- 一文講清HBase的儲存結構
- HBase 基本入門篇
- hbase shell 基本操作命令
- RecyclerView的基本設計結構View
- caffe的基本資料結構資料結構
- 英語句子的基本結構
- JVM的基本結構和JVM的記憶體結構JVM記憶體
- HBase -ROOT-和.META.表結構
- 3.1 HTML基本結構HTML
- hbase 的架構分析架構
- 七、基本資料結構(樹形結構)資料結構
- Hbase簡介和基本用法
- 資料結構的基本概念資料結構
- 一文講清HBase儲存結構
- 基本資料結構梳理資料結構
- 《HBase 不睡覺》第三章 – HBase 基本操作
- 《HBase 不睡覺》第三章 - HBase 基本操作
- hbase基本概念和hbase shell常用命令用法
- JAVA的基本程式設計結構(下)Java程式設計
- JS中陣列物件的基本結構JS陣列物件
- [Java 基礎]Java 程式的基本結構Java