Hbase概述
Hdfs之上(也可存儲在本地)分布式面向列的開源數(shù)據(jù)存儲
Hdfs高可靠有備份分布式(分而治之)
Google bigtable開源實現(xiàn)存儲海量數(shù)據(jù)
面向行-數(shù)據(jù)庫中的數(shù)據(jù)以行的方式進行存儲一行存儲為一個部分
面向列:數(shù)據(jù)庫中的數(shù)據(jù)以列的方式進行存儲一列存儲為一個部分企業(yè)中的數(shù)據(jù)查詢一般不會全表掃描查詢幾個字段(面向行的數(shù)據(jù)每一行數(shù)據(jù)掃描一遍)
面向列只查找對應(yīng)的幾個列提高查詢效率
存儲類型:視頻音頻圖片
社區(qū)好扛点,理論經(jīng)過實踐丈秩,豐富的工具支持
Hbase自帶的運維類hbck第三方工具:phoenix實現(xiàn)sql語法查詢Hbase表數(shù)據(jù)
使用solr建立hbase二級索引
高效:隨機讀寫轉(zhuǎn)化為順序讀寫適應(yīng)高并發(fā)寫入傳統(tǒng)服務(wù)器對于隨機讀寫效率低
均衡效果好讀寫性能和機器數(shù)保持線性相關(guān)
行中沒有保存數(shù)據(jù)的列不占存儲空間面向行的存儲無數(shù)據(jù)也會占用空間
分布式特點:
存儲在hdfs中很好的容錯性hdfs有備份策略
均衡策略是基于datanode
使用zookeeper進行集群的協(xié)同工作
一致性(所有的結(jié)點在同一時刻得到的數(shù)據(jù)都是相同的)、可用性(每個請求在一定時間內(nèi)都會得到返回)奢人、分區(qū)容忍性(某臺服務(wù)器數(shù)據(jù)丟失不影響整個集群的工作)
大數(shù)據(jù)存儲
易擴展(hbase支持結(jié)點的擴展和卸載)
大:一個表十億行百萬列
面向列:面向列(列族)的存儲和權(quán)限訪問攻走,列(列族)獨立索引
稀疏:對于為null空的列殷勘,并不占用存儲空間,表設(shè)計的非常稀疏
數(shù)據(jù)類型單一:hbase中的數(shù)據(jù)類型都是字符串string
無模式:每行都有一個可排序的主鍵和任意多的列昔搂,列可以根據(jù)需要動態(tài)增加同一張表不同行可以有截然不同的列
Hbase和普通關(guān)系型數(shù)據(jù)庫
數(shù)據(jù)類型:hbase數(shù)據(jù)都是字符串類型string rdbms不止string
數(shù)據(jù)操作:hbase只有普通的增刪改查沒有關(guān)聯(lián)查詢可以自己寫mr
也可以使用phoenix
存儲模式:hbase基于列存儲的rdbms基于行式存儲的
應(yīng)用場景:hbase適合存儲大量數(shù)據(jù)查詢效率極高h(yuǎn)base表自帶索引玲销,
Hbase術(shù)語以及數(shù)據(jù)模型:
主鍵row key類似于mysql中的主鍵唯一標(biāo)識一行檢索記錄的主鍵
訪問hbase表中的行只有三種方式:
一條記錄:單個row key查詢
全表掃描:
范圍查詢:row key的range企業(yè)比這個比較多
Hbase中主鍵可以為任意的字符串最大長度為64kb按字典順序存儲在hbase內(nèi)部保存為字節(jié)數(shù)組
列族column family字段前的限定符
列族在創(chuàng)建表的時候聲明(必須。沒有聲明修改表添加列族)摘符,一個列族可以包含多個列贤斜,列中的數(shù)據(jù)都是以二進制形式存在,沒有數(shù)據(jù)類型
列族一些列的集合
Hbase中一個列所有列成員有著相同的前綴逛裤,:是列族和列成員之間的分隔符瘩绒,。
時間戳和存儲單元:timestamp and cell
Hbase中通過row和columns確定的一個存儲單元為cell带族。每一個cell保存著同一個數(shù)據(jù)的多個版本锁荔。
Hbase中通過插入一條主鍵相同的數(shù)據(jù)進行修改,存儲多個版本的數(shù)據(jù)蝙砌。
寫入數(shù)據(jù)時堕战,時間戳可以由hbase自動賦值坤溃,當(dāng)前系統(tǒng)時間精確到秒毫秒也可以顯示賦值。
每個cell中不同版本的數(shù)據(jù)都是按照時間的排序倒序存儲嘱丢。
{roe,column,version}元組就是一個hbase中的一個cell
Hbase物理模型
Hbase中一個列族存儲為一個部分薪介,
Hbase物理存儲
所有數(shù)據(jù)都是存儲在region中,由region server進行管理維護表與region的關(guān)系
Hbase存儲細(xì)節(jié):每個列族存儲在hdfs上的一個單獨文件夾實際設(shè)計中列族只設(shè)計一個
否則讀取兩個文件夾的內(nèi)容效率低下
Key和version number會在每個列族中存儲一份
空值不會被保存不占位
Hbase hdfs目錄分析:walregion hdfs目錄
Wal預(yù)寫日志
Temprory:.tmphbase的臨時目錄對表進行刪除和創(chuàng)建時越驻,hbase首先將表移動至該目錄汁政,然后進行操作
Wals:write ahead log預(yù)寫日志是regionserver在處理數(shù)據(jù)插入和刪除過程中用來記錄操作內(nèi)容的一種日志,0.94.x叫做.logs0.98 wal
向hbase寫入數(shù)據(jù):
首先存Hlog文件缀旁,存儲在hdfs上记劈,
然后再region中存儲數(shù)據(jù)—首先寫到內(nèi)存里存儲到一定大小后,spill到磁盤文件以及hdfs文件中
Region:
每張表存的數(shù)據(jù)都是region一張表存的數(shù)據(jù)可以是一個region或者是多個region
每個region由region進行管理
Region分裂起初一張表只有一個region當(dāng)一個region達到一定大小后就尅是分裂
子region會存在一個父region的引用地址
一個表有一個或者多個region并巍,region包含一個包含memStor和storefile
Memstore存儲在內(nèi)存中目木,一開始只有memstore,當(dāng)memstore達到128M后懊渡,hbase生成一個storefile文件刽射,storefile存儲在本地磁盤,region最核心的文件剃执。
data目錄:存儲hbase表的數(shù)據(jù)
默認(rèn)情況下目錄下有兩個目錄:data/default用戶創(chuàng)建表時誓禁,沒有指定namespace時,表創(chuàng)建在此目錄下
Data/hbase系統(tǒng)內(nèi)部創(chuàng)建的表(meta表:存儲region的詳細(xì)信息namespace表:存儲命名空間)
Hbase.id存儲的是集群的唯一的cluster.id uuid
Hbase.version集群版本號
oldWALs對應(yīng)0.94.x版本中的.oldlogs目錄當(dāng)WALs中的logs沒有用后肾档,將這些logs移動到此目錄下摹恰,Hmaster會定期的進行清理。
Hbase shell
Hbase組命令
General與namespace命令
刪除表-首先禁用然后刪除
跟新數(shù)據(jù):重寫一遍進行覆蓋插入rowkey相同的一條數(shù)據(jù)
組命令:(0.98)
General; dml; visibilitytables;tools;security;replication;quotas;ddl;snapshots;namespace;
General: whoami status table_help version
Namespace:命名空間類似于數(shù)據(jù)庫
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中的表進行快照通過快照恢復(fù)數(shù)據(jù)
本地模型與hbase相關(guān)進程都運行在同一jvm中一個掛了全部掛了
偽分布式模型—hbase相關(guān)進程每個進程一個jvm