
rowkey cf1:q2 擷取最新資料
rowkey , CF1, q2, t2 四維資料庫,擷取指定列族指定列指定時間戳的資料
rowkey 列族 列名 時間戳 四個緯度
row key
- 決定一行資料
- 按照字典順序排序的。
- Row key 隻能存儲 64k 的位元組資料(UTF-8 編碼格式下 2.133w 多個漢字)
Column Family 列族 & qualifier 列
- HBase 表中的每個列都歸屬于某個列族,列族必須作為表模式(schema)定義的一部分 預先給出。 create ‘tb_user’, ‘cf’ 或 create ‘test’, ‘course’;
- 列名以列族作為字首,每個“列族”都可以有多個列成員(column);如 course:math, course:english, 新的列族成員(列)可以随後按需、動态加入;
- 權限控制、存儲以及調優都是在列族層面進行的;
- HBase 把同一列族裡面的資料存儲在同一目錄下,由幾個檔案儲存。
Cell 單元格
- 由行和列的坐标交叉決定;
- 單元格是有版本的;
- 單元格的内容是未解析的位元組數組;
- 由{row key, column( = +), version} 唯一确定的單元。
- cell 中的資料是沒有類型的,全部是位元組數組形式存貯。
Timestamp 時間戳
rowkey - liezu:biaozhifu version cell value 在 HBase 每個 cell 存儲單元對同一份資料有多個版本,根據唯一的時間戳來區分每個版本 之間的差異,不同版本的資料按照時間倒序排序,最新的資料版本排在最前面。 rowkey cf name 時間戳的類型是 64 位整型。 時間戳可以由 HBase(在資料寫入時自動)指派,此時時間戳是精确到毫秒的目前系統時間。 時間戳也可以由客戶顯式指派,如果應用程式要避免資料版本沖突,就必須自己生成具有唯 一性的時間戳。 在 HBase 0.96 之前,保留的預設版本數為 3,但是在 0.96 中,更新版本已更改為 1。 hbase 可以容忍不同 regionserver 之間的時間差 30s,否則失敗。 做時間同步 yum install ntp -y service ntpd start chkconfig ntpd on
HLog(WAL log)
WAL:WRITE AHEAD LOG HLog 檔案就是一個普通的 Hadoop Sequence File,Sequence File 的 Key 是 HLogKey 對象,HLogKey 中記錄了寫入資料的歸屬資訊,除了 table 和 region 名字外, 同時還包括 sequence number 和 timestamp,timestamp 是”寫入時間”,sequence number 的起始值為 0,或者是最近一次存入檔案系統中 sequence number。 HLog SequeceFile的Value是HBase的KeyValue對象,即對應HFile中的KeyValue。23
鍵(四個次元)value(單元格的值) 該檔案作用是保證資料不丢失。
目錄表
目錄表 hbase:meta 作為 HBase 表存在,并從 hbase shell 的 list 指令中過濾掉,但 實際上是一個表,就像任何其他表一樣。 hbase:meta 表(以前稱為.META.),保有系統中所有 region 的清單。hbase:meta 存儲在 zookeeper 中。 表結構如下:
key:
region 的 key,結構為:[table],[region start key],[region id]
values:
info:regioninfo(目前 region 序列化的 HRegionInfo 執行個體)
info:server(包含目前 region 的 RegionServer 的 server:port)
info:serverstartcode(包含目前 region 的 RegionServer 程序的開始時間)
當表正在拆分時,将建立另外兩列,稱為 info:splitA 和 info:splitB。 這些列代表兩個 子 region。 這些列的值也是序列化的 HRegionInfo 執行個體。區域分割後,将删除此行。 空鍵用于表示表開始和表結束。具有空開始鍵的 region 是表中的第一個 region。如果 某個 region 同時具有空開始和空結束鍵,則它是表中唯一的 region。 啟動順序:首先,在 zookeeper 中查找 hbase:meta 的位置。其次,使用伺服器和啟動 代碼更新 hbase:meta 的值
給 RegionServer 指派 region(最好了解) 當 hbase 啟動的時候,region 通過如下步驟指派給 regionserver:
1、系統啟動的時候,master 調用 AssignmentManager(指派管理器)
2、AssignmentManager 在 hbase:meta 中查找已經存在的 region 條目
3、如果 region 條目依舊是正确的(比如說 regionserver 依然線上),就保留該指派資訊
4、如果指派不正确,就調用 LoadBalancerFactory 對 region 進行指派。負載平衡器将 region 賦 值 給 一 個 regionserver 。 hbase1.0 中 默 認 的 負 載 均 衡 器 是 StochasticLoadBalancer。
5、在 regionserver 打開 region 的時候使用 regionserver 的開始代碼更新 hbase:meta 中 regionserver 的指派。
當用戶端通路的時候,regionserver 失敗的時候:
1、由于 regionserver 當機,region 立即不可用
2、master 檢測到該 regionserver 的失敗
3、認為 region 的指派不正确,使用啟動順序的流程重新給 region 指派
4、正在進行的查詢會重試,而不是丢失。
5、在下述時間内操作會轉移到新的 regionserver:zookeeper session timeout+split time+assignment/replay time
Client->regionserver1(當機了,在 zk 上對應的臨時節點一定時間後消失)
Client->hbase:meta-->regionserver2(重新配置設定一個 regionserver)
Client->regionserver2->對應的 region
- 強大的一緻讀/寫:HBase 不是“最終一緻”的 DataStore。它非常适合高速計數 器聚合等任務。
-
自動分片:HBase 表通過 region 分布在群集上,并且随着資料的增長,region 會 自動分割和重新配置設定。 25
26
- 自動的 RegionServer 故障轉移。
- Hadoop/HDFS 內建:HBase 支援 HDFS 作為其分布式檔案系統
- MapReduce:HBase 支援通過 MapReduce 進行大規模并行處理,将 HBase 用 作 源 和 漏 。 HBASE->MR->HDFS HBASE->MR->HBASE HDFS->MR->HBASE
- Java 用戶端 API:HBase 支援易于使用的 Java API 以進行程式設計通路。 - Thrift/REST API:HBase 還支援非 Java 前端的 Thrift 和 REST。
- 塊緩存和布隆過濾器:HBase 支援塊緩存和布隆過濾器,以實作大容量查詢優化。
- 運維管理:HBase 提供内置網頁,用于運維監控和 JMX 名額。 HBase 不支援行間事務(情侶轉賬 520) HBase 支援行内事務