HBase初探
鑑於在HDFS中資料是不能修改的,所以,以此為基礎的hbase的資料也只能永遠insert,就算是刪除資料,也是插入一條帶有刪除標記的新資料。
一,行健
行健是資料行在表裡的唯一標示,並作為檢索記錄的主鍵
訪問表裡的行只有3種方式
1,透過單個行健訪問
2,給定行健的範圍範圍
3,全表掃描
行健可以是最大長度不超過64KB的任意字串。
二,列族與列
列表示為 :,列族在定義表時就必須定義,但是限定符,也就是列名可以後來指定
Hbase在磁碟上按照列族來儲存資料,這種列式資料庫非常適合資料分析的情形
三,時間戳
可系統自動生成,也可使用者指定
Hbase支援兩種資料版本回收方式
1,每個資料單元,只儲存指定個數的最新版本
2,儲存指定時間長度的版本(例如7天)
元素由行健,列族:限定符,時間戳唯一決定
元素以位元組碼形式存放,沒有型別之分
四,Hbase物理模型:
1,Hmaster,總控節點,管理一個或多個regionServer,負責啟動、安裝、把區域分配給註冊的regionServer、恢復regionServer故障。類似於namenode在HDFS中的作用。
2,zookeeper負責排程
3,region與regionServer
表在行方向上按照行健範圍劃分成若干region,每個表最初只有一個region,當記錄數增加到某個閾值時,開始分裂成兩個region
regionServer:負責零個或多個區域的管理以及相應客戶端的讀寫請求,以及區域的劃分,並通知Hmaster有了新的子區域,這樣主控機就可以把父區域設為離線,並用子區域替換父區域。一般一個物理節點跑一個regionServer,但是regionServer可以管理多個region,每個region可以是不同表的region
region包括Hlog日誌和存放資料的store
Hlog:用於災難恢復等,類似於oracle中的日誌。預寫式日誌,記錄所有更新操作先進日誌,資料才會寫入。Hlog存放在HDFS中,因此即使regionServer崩潰,提交日誌仍然可用。
當regionServer不能訪問,通常因為伺服器的znode在zookeeper中過期了,Hmaster會根據區域對死掉的regionServer的提交日誌進行分割。再重新分配後,在開啟並使用死掉的regionServer上區域之前,這些區域會找到剛分割得到的檔案,包括還沒持久化儲存的更新。這些更新會被“重做”是區域恢復到伺服器失敗前夕狀態。
Store:每一個列族一個store(非常關鍵!),這就要求hbase的資料是稀疏的,即資料只集中在某個列族裡面,而不是每個列族都會有值。(假如一行資料多個列族都有值,那麼該行資料會分散在不同的store裡面)
store可以分為memstore(記憶體)、storefile(硬碟)
到達regionServer的寫操作首先會追加到Hlog,然後寫入memstore,當memstore中資料足夠多的時候,regionServer會啟動flashcache程式把資料往storefile中寫,不斷重複,硬碟中就會產生許多小的storefile,每過一段時間,會觸發hbase的一個合併程式,把小的storefile合併成大的storefile,在此過程中,會把刪除的行,以及過期的行過濾掉。
當storefile大小超過一定閾值後,會把當前region分割為兩個,並由Hmaster分配到相應的regionServer,實現負載均衡
客戶端查詢資料時,先在memstore中找,找不到再找storefile
4,hbase與hadoop的關係:
storefile對應Hfile,hfile其實就是hdfs中的檔案,hfile又是分散式的,分散在不同的物理節點裡面。
5,怎麼定位region?
-ROOT-和.META.表
META表記錄每張表使用者表的region資訊,META表可以有多個region
ROOT表記錄META表的region資訊,ROOT表只有一個region
zookeeper中記錄了ROOT表的location
表中的項使用區域名作為建。區域名由由所屬表名、區域起始行、區域的建立時間以及對其整體進行MD5雜湊值組成。
由於表的鍵是排序的,因此,要查詢特定行所在的區域只要在目錄表中找到第一個鍵大於或等於給定行健即可。
區域變化時(分裂、禁用、regionServer崩潰),目力表會進行更新。
每個行操作可能要訪問3次遠端節點,為了節省這些代價,客戶端會快取它們遍歷-ROOT-時獲取的資訊和.META.位置以及使用者空間區域的開始行和結束行。
客戶端在碰到錯誤之前一直會使用快取的項,當錯誤發生時,即區域被移動了,客戶端會再去檢視.META.獲取區域的新位置,如果.META.區域也被移動了,客戶端會再去檢視-ROOT-
一,行健
行健是資料行在表裡的唯一標示,並作為檢索記錄的主鍵
訪問表裡的行只有3種方式
1,透過單個行健訪問
2,給定行健的範圍範圍
3,全表掃描
行健可以是最大長度不超過64KB的任意字串。
二,列族與列
列表示為 :,列族在定義表時就必須定義,但是限定符,也就是列名可以後來指定
Hbase在磁碟上按照列族來儲存資料,這種列式資料庫非常適合資料分析的情形
三,時間戳
可系統自動生成,也可使用者指定
Hbase支援兩種資料版本回收方式
1,每個資料單元,只儲存指定個數的最新版本
2,儲存指定時間長度的版本(例如7天)
元素由行健,列族:限定符,時間戳唯一決定
元素以位元組碼形式存放,沒有型別之分
四,Hbase物理模型:
1,Hmaster,總控節點,管理一個或多個regionServer,負責啟動、安裝、把區域分配給註冊的regionServer、恢復regionServer故障。類似於namenode在HDFS中的作用。
2,zookeeper負責排程
3,region與regionServer
表在行方向上按照行健範圍劃分成若干region,每個表最初只有一個region,當記錄數增加到某個閾值時,開始分裂成兩個region
regionServer:負責零個或多個區域的管理以及相應客戶端的讀寫請求,以及區域的劃分,並通知Hmaster有了新的子區域,這樣主控機就可以把父區域設為離線,並用子區域替換父區域。一般一個物理節點跑一個regionServer,但是regionServer可以管理多個region,每個region可以是不同表的region
region包括Hlog日誌和存放資料的store
Hlog:用於災難恢復等,類似於oracle中的日誌。預寫式日誌,記錄所有更新操作先進日誌,資料才會寫入。Hlog存放在HDFS中,因此即使regionServer崩潰,提交日誌仍然可用。
當regionServer不能訪問,通常因為伺服器的znode在zookeeper中過期了,Hmaster會根據區域對死掉的regionServer的提交日誌進行分割。再重新分配後,在開啟並使用死掉的regionServer上區域之前,這些區域會找到剛分割得到的檔案,包括還沒持久化儲存的更新。這些更新會被“重做”是區域恢復到伺服器失敗前夕狀態。
Store:每一個列族一個store(非常關鍵!),這就要求hbase的資料是稀疏的,即資料只集中在某個列族裡面,而不是每個列族都會有值。(假如一行資料多個列族都有值,那麼該行資料會分散在不同的store裡面)
store可以分為memstore(記憶體)、storefile(硬碟)
到達regionServer的寫操作首先會追加到Hlog,然後寫入memstore,當memstore中資料足夠多的時候,regionServer會啟動flashcache程式把資料往storefile中寫,不斷重複,硬碟中就會產生許多小的storefile,每過一段時間,會觸發hbase的一個合併程式,把小的storefile合併成大的storefile,在此過程中,會把刪除的行,以及過期的行過濾掉。
當storefile大小超過一定閾值後,會把當前region分割為兩個,並由Hmaster分配到相應的regionServer,實現負載均衡
客戶端查詢資料時,先在memstore中找,找不到再找storefile
4,hbase與hadoop的關係:
storefile對應Hfile,hfile其實就是hdfs中的檔案,hfile又是分散式的,分散在不同的物理節點裡面。
5,怎麼定位region?
-ROOT-和.META.表
META表記錄每張表使用者表的region資訊,META表可以有多個region
ROOT表記錄META表的region資訊,ROOT表只有一個region
zookeeper中記錄了ROOT表的location
表中的項使用區域名作為建。區域名由由所屬表名、區域起始行、區域的建立時間以及對其整體進行MD5雜湊值組成。
由於表的鍵是排序的,因此,要查詢特定行所在的區域只要在目錄表中找到第一個鍵大於或等於給定行健即可。
區域變化時(分裂、禁用、regionServer崩潰),目力表會進行更新。
每個行操作可能要訪問3次遠端節點,為了節省這些代價,客戶端會快取它們遍歷-ROOT-時獲取的資訊和.META.位置以及使用者空間區域的開始行和結束行。
客戶端在碰到錯誤之前一直會使用快取的項,當錯誤發生時,即區域被移動了,客戶端會再去檢視.META.獲取區域的新位置,如果.META.區域也被移動了,客戶端會再去檢視-ROOT-
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1104460/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hbase之hbase shell
- Hbase(二)Hbase常用操作
- hbase - [04] java訪問hbaseJava
- HBase 教程:什麼是 HBase?
- HBase
- HBase 系列(五)——HBase常用 Shell 命令
- Hbase一:Hbase介紹及特點
- Hbase單機部署 java連線HbaseJava
- HBase概述
- hbase整理
- HBase實操:HBase-Spark-Read-Demo 分享Spark
- HBase2實戰:HBase Flink和Kafka整合Kafka
- hbase與phoenix整合(使用phoenix操作hbase資料)
- HBase學習之二: hbase分頁查詢
- php使用hbasePHP
- Jave Hbase AP
- HBase進階
- hbase shell命令
- HBase 基本操作
- spark與hbaseSpark
- HBase學習
- Hbase優化優化
- HBase vs HiveHive
- hbase - [03] 客戶端常用命令(hbase shell)客戶端
- 《HBase 不睡覺》第三章 – HBase 基本操作
- 《HBase 不睡覺》第三章 - HBase 基本操作
- angr初探
- Vue初探Vue
- Docker初探Docker
- 初探 Recompose
- jsbridge初探JS
- Nginx 初探Nginx
- Deno 初探
- ELK初探
- Quartz初探quartz
- 初探IndexedDBIndex
- Redis初探Redis
- Gitee初探Gitee
- MapDB初探