Hbase概述
Hdfs之上(也可存儲在本地)分布式面向列的開源數據存儲
Hdfs高可靠有備份分布式(分而治之)
Google bigtable開源實現存儲海量數據
面向行-數據庫中的數據以行的方式進行存儲一行存儲為一個部分
面向列:數據庫中的數據以列的方式進行存儲一列存儲為一個部分企業中的數據查詢一般不會全表掃描查詢幾個字段(面向行的數據每一行數據掃描一遍)
面向列只查找對應的幾個列提高查詢效率
存儲類型:視頻音頻圖片
社區好,理論經過實踐,豐富的工具支持
Hbase自帶的運維類hbck第三方工具:phoenix實現sql語法查詢Hbase表數據
使用solr建立hbase二級索引
高效:隨機讀寫轉化為順序讀寫適應高并發寫入傳統服務器對于隨機讀寫效率低
均衡效果好讀寫性能和機器數保持線性相關
行中沒有保存數據的列不占存儲空間面向行的存儲無數據也會占用空間
分布式特點:
存儲在hdfs中很好的容錯性hdfs有備份策略
均衡策略是基于datanode
使用zookeeper進行集群的協同工作
一致性(所有的結點在同一時刻得到的數據都是相同的)、可用性(每個請求在一定時間內都會得到返回)、分區容忍性(某臺服務器數據丟失不影響整個集群的工作)
大數據存儲
易擴展(hbase支持結點的擴展和卸載)
大:一個表十億行百萬列
面向列:面向列(列族)的存儲和權限訪問,列(列族)獨立索引
稀疏:對于為null空的列,并不占用存儲空間,表設計的非常稀疏
數據類型單一:hbase中的數據類型都是字符串string
無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態增加同一張表不同行可以有截然不同的列
Hbase和普通關系型數據庫
數據類型:hbase數據都是字符串類型string rdbms不止string
數據操作:hbase只有普通的增刪改查沒有關聯查詢可以自己寫mr
也可以使用phoenix
存儲模式:hbase基于列存儲的rdbms基于行式存儲的
應用場景:hbase適合存儲大量數據查詢效率極高hbase表自帶索引,
Hbase術語以及數據模型:
主鍵row key類似于mysql中的主鍵唯一標識一行檢索記錄的主鍵
訪問hbase表中的行只有三種方式:
一條記錄:單個row key查詢
全表掃描:
范圍查詢:row key的range企業比這個比較多
Hbase中主鍵可以為任意的字符串最大長度為64kb按字典順序存儲在hbase內部保存為字節數組
列族column family字段前的限定符
列族在創建表的時候聲明(必須。沒有聲明修改表添加列族),一個列族可以包含多個列,列中的數據都是以二進制形式存在,沒有數據類型
列族一些列的集合
Hbase中一個列所有列成員有著相同的前綴,:是列族和列成員之間的分隔符,。
時間戳和存儲單元:timestamp and cell
Hbase中通過row和columns確定的一個存儲單元為cell。每一個cell保存著同一個數據的多個版本。
Hbase中通過插入一條主鍵相同的數據進行修改,存儲多個版本的數據。
寫入數據時,時間戳可以由hbase自動賦值,當前系統時間精確到秒毫秒也可以顯示賦值。
每個cell中不同版本的數據都是按照時間的排序倒序存儲。
{roe,column,version}元組就是一個hbase中的一個cell
Hbase物理模型
Hbase中一個列族存儲為一個部分,
Hbase物理存儲
所有數據都是存儲在region中,由region server進行管理維護表與region的關系
Hbase存儲細節:每個列族存儲在hdfs上的一個單獨文件夾實際設計中列族只設計一個
否則讀取兩個文件夾的內容效率低下
Key和version number會在每個列族中存儲一份
空值不會被保存不占位
Hbase hdfs目錄分析:walregion hdfs目錄
Wal預寫日志
Temprory:.tmphbase的臨時目錄對表進行刪除和創建時,hbase首先將表移動至該目錄,然后進行操作
Wals:write ahead log預寫日志是regionserver在處理數據插入和刪除過程中用來記錄操作內容的一種日志,0.94.x叫做.logs0.98 wal
向hbase寫入數據:
首先存Hlog文件,存儲在hdfs上,
然后再region中存儲數據—首先寫到內存里存儲到一定大小后,spill到磁盤文件以及hdfs文件中
Region:
每張表存的數據都是region一張表存的數據可以是一個region或者是多個region
每個region由region進行管理
Region分裂起初一張表只有一個region當一個region達到一定大小后就尅是分裂
子region會存在一個父region的引用地址
一個表有一個或者多個region,region包含一個包含memStor和storefile
Memstore存儲在內存中,一開始只有memstore,當memstore達到128M后,hbase生成一個storefile文件,storefile存儲在本地磁盤,region最核心的文件。
data目錄:存儲hbase表的數據
默認情況下目錄下有兩個目錄:data/default用戶創建表時,沒有指定namespace時,表創建在此目錄下
Data/hbase系統內部創建的表(meta表:存儲region的詳細信息namespace表:存儲命名空間)
Hbase.id存儲的是集群的唯一的cluster.id uuid
Hbase.version集群版本號
oldWALs對應0.94.x版本中的.oldlogs目錄當WALs中的logs沒有用后,將這些logs移動到此目錄下,Hmaster會定期的進行清理。
Hbase shell
Hbase組命令
General與namespace命令
刪除表-首先禁用然后刪除
跟新數據:重寫一遍進行覆蓋插入rowkey相同的一條數據
組命令:(0.98)
General; dml; visibilitytables;tools;security;replication;quotas;ddl;snapshots;namespace;
General: whoami status table_help version
Namespace:命名空間類似于數據庫
alter_namespace create_namespacedescribe_namespace,drop_namespcae list_namespace list_namespace_tables;
演示步驟:
1、hadoop安裝目錄的bin目錄下start-dfs.sh
首先啟動namenode datanodesecondNamenode
2、啟動yarnstart-yarn.sh
Resource managernodemanager
3、啟動hbase --啟動zookeeper
Hbase安裝目錄下hbase-daemon.sh start zookeeper
啟動hmasterhbase-daemon.sh startmaster
啟動regionServerhbase-daemon.shstart regionserver
4、Bin/hbase
Shell hbcksnapshothfile zkcli upgrade master regionserver zookeeper rest thrift thrift2 cleanclasspath mapredcp pe ltt classname
Hbase shell =>
Snapshot對hbase中的表進行快照通過快照恢復數據
本地模型與hbase相關進程都運行在同一jvm中一個掛了全部掛了
偽分布式模型—hbase相關進程每個進程一個jvm