1 hbase的來源
1、hdfs的資料讀寫延遲高
2、不能近實時更新删除局部資料
3、hive的資料必須要指定的列或者字段,必須要格式化的資料。
4、hbase來源于google的bigtable。
2 hbase的定義
Hbase是一個基于Hadoop的開源, 分布式的,多版本的,可擴充的,非關系型資料庫,能夠處理海量資料(數十億行和百萬列)。
Hbase特點
habse類似于:Redis、clickhouse、mongoDB、canssdra等。uid <name:zs,age:18,score:22>
- HBase的表模型與關系型資料庫的表模型不同:
- HBase的表沒有固定的字段定義;
- HBase的表中每行存儲的都是一些key-value對
- HBase的表中有列簇的劃分,使用者可以指定将哪些kv插入哪個列族
- HBase的表在實體存儲上,是按照列簇來分割的,不同列簇的資料一定存儲在不同的檔案中
- HBase的表中的每一行都固定有一個行鍵,而且每一行的行鍵在表中不能重複
- HBase中的資料,包含行鍵,包含key,包含value,都是byte[ ]類型,HBase不負責為使用者維護資料類型
- HBase對事務的支援很差
- HBase支援稀疏存儲
HBase的表資料存儲在HDFS檔案系統中。
進而,hbase具備如下特性:存儲容量可以線性擴充; 資料存儲的安全性可靠性極高!
- hbase的表模型跟mysql之類的關系型資料庫的表模型差别巨大
- hbase的表模型中有:行的概念;但沒有字段的概念
- 行中存的都是key-value對,每行中的key-value對中的key可以是各種各樣,每行中的key-value對的數量也可以是各種各樣
3 hbase的表模型
1、一個表,有表名
2、一個表可以分為多個列簇(不同列簇的資料會存儲在不同檔案中)。列簇一般1-2個即可。
3、表中的每一行有一個“行鍵rowkey”,而且行鍵在表中不能重複(重複之後會覆寫,比如更新資料行鍵一定會重複)。類似于mysql中的主鍵。
4、表中的每一對kv資料稱作一個cell
5、hbase可以對資料存儲多個曆史版本(曆史版本數量可配置)
6、整張表由于資料量過大,會被橫向切分成若幹個region(用rowkey範圍辨別),不同region的資料也存儲在不同檔案中
7、hbase會對插入的資料按順序存儲:
7.1要點一:首先會按行鍵排序
7.2要點二:同一行裡面的kv會按列簇排序,再按k排序
- hbase中隻支援byte[]
- 此處的byte[] 包括了: rowkey,key,value,列簇名,表名
- HBase基于hadoop : HBase的存儲依賴于HDFS

4 Hbase架構
架構圖示
元件說明
- Client : hbase用戶端,1.包含通路hbase的接口。比如,linux shell,java api。2.除此之外,它會維護緩存來加速通路hbase的速度。比如region的位置資訊。
- Zookeeper : 1.監控Hmaster的狀态,保證有且僅有一個活躍的Hmaster達到高可用。2.它可以存儲所有region的尋址入口。如:root表在哪一台伺服器上。3. 實時監控HregionServer的狀态,感覺HRegionServer的上下線資訊,并實時通知給Hmaster。4. 存儲hbase的部分中繼資料。
- HMaster : 1. 為HRegionServer配置設定Region(建立表等)。2. 負責HRegionServer的負載均衡。3. 負責Region的重新配置設定(HRegionServer當機之後的Region配置設定,HRegion裂變:當Region過大之後的拆分)。4. Hdfs上的垃圾回收。5. 處理schema的更新請求
- HRegionServer :1. 維護HMaster配置設定給的Region(管理本機的Region)。2. 處理client對這些region的讀寫請求,并和HDFS進行互動。3. 負責切分在運作過程中元件變大的Region。
- HLog : 1. 對HBase的操作進行記錄,使用WAL寫資料,優先寫入log(put操作:先寫日志再寫memstore,這樣可以防止資料丢失,即使丢失也可以復原)。
- HRegion : 1. HBase中分布式存儲和負載均衡的最小單元,它是表或者表的一部分。
- Store : 1. 相當于一個列簇
- Memstore : 1. 記憶體緩沖區,用于将資料批量重新整理到hdfs中,預設大小為128M
- HStoreFile : 1.不過是一個邏輯概念。HBase中的資料是以HFile存儲在Hdfs上。
元件之間的關系
hmaster:hregionserver=1:*
hregionserver:hregion=1:*
hregionserver:hlog=1:1
hregion:hstore=1:*
store:memstore=1:1
store:storefile=1:*
storefile:hfile=1:1
術語
rowkey:行鍵,和mysql的主鍵同理,不允許重複。
columnfamily: 列簇,列的集合之意。
column:列
timestamp:時間戳,預設顯示最新的時間戳,可用于控制k對應的多個版本值,預設查最新的資料
version:版本号,表示記錄資料的版本
cell:單元格,kv就是cell
模式:無
資料類型:隻存儲byte[]
多版本:每個值都可以有多個版本
列式存儲:一個列簇存儲到一個目錄
稀疏存儲:如果一個kv為null,不占用存儲空間
5 全分布式部署
系統版本:
centOS7.7
HBASE版本:apache-hbase-1.3.6
HADOOP版本:apache-hadoop-2.7.6
JDK版本:jdk-1.8.0_45
單機安裝/僞分布式:1台伺服器全分布式:3台伺服器
全分布式
[[email protected] ~]# tar -zxvf /home/hbase-1.3.6-bin.tar.gz -C /usr/local/
[[email protected] ~]# vi /etc/profile
#my settings
export JAVA_HOME=/usr/local/jdk1.8.0_152/
export HADOOP_HOME=/usr/local/hadoop-2.7.6/
export HIVE_HOME=/usr/local/hive-2.3.7/
export SQOOP_HOME=/usr/local/sqoop-1.4.7/
export HBASE_HOME=/usr/local/hbase-1.3.6/
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$SQOOP_HOME/bin:$HBASE_HOME/bin:
[[email protected] ~]# source /etc/profile
[[email protected] ~]# which hbase
/usr/local/hbase-1.3.6/bin/hbase
配置hbase-env.sh
[[email protected] hbase-1.3.6]# vi ./conf/hbase-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_152/
配置hbase-site.xml
<configuration>
<!-- 指定hbase在HDFS上存儲的路徑 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop01:8020/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的位址,多個用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01,hadoop02,hadoop03</value>
</property>
</configuration>
配置regionservers
hadoop01
hadoop02
hadoop03
配置backup-masters
先建立backup-masters檔案
決定你的其他備份的hmasteer啟動在什麼伺服器上。可以寫多個,多個換行即可。
hadoop02
分發到hadoop02和03上
[[email protected] hbase-1.3.6]# rm -rf ./docs/
[[email protected] hbase-1.3.6]# scp -r ../hbase-1.3.6/ hadoop02:/usr/local/
[[email protected] hbase-1.3.6]# scp -r ../hbase-1.3.6/ hadoop03:/usr/local/
[[email protected] hbase-1.3.6]# scp -r /etc/profile hadoop02:/etc/
[[email protected] hbase-1.3.6]# scp -r /etc/profile hadoop03:/etc/
[[email protected] ~]# source /etc/profile
[[email protected] ~]# source /etc/profile
i啟動hbase
1、保證hadoop和zookeeper提前啟動好
2、[[email protected] hbase-1.3.6]# start-hbase.sh
3、檢視每台伺服器的jps:
1888 QuorumPeerMain
2438 ResourceManager
2822 HMaster
2090 NameNode
2284 SecondaryNameNode
3373 Jps
2943 HRegionServer
4、檢視hbase的hmaster的web端口 16010
http://hadoop01:16010
5、出錯再habse的按照目錄下的logs檢視日志。
連接配接hbase
進入目錄 /usr/local/hbase-1.3.6/bin 下
[[email protected] bin]# hbase shell