hbase介紹
HBASE定義
HBase是以HDFS為數據存儲的一種分布式、可擴展的NoSQL資料庫。
HBase數據模型
Hbase的設計理念依據是Google的BigTable論文,論文中的介紹:BigTable是一個稀疏的、分布式的、持久的多維排序Map。
Base 數據模型主要由table、row、column、timestamp、cell幾個元素構成。
table——表
一個表可能包含多行數據,表其實是一個分布式的表,真正的數據是存儲在Region中的,Region可以理解為分片,每個表會包含多個分片,分別由不同的RegionServer管理,每個分片會有多個副本,以實現分片的高可用。
row——行
一行數據包含唯一的rowkey,多個column及對應的值,一張表中所有row都按照rowkey的字典順序由小到大排列;因為數據在Region上的分布也與rowkey相關,所以在存儲數據時,設計合理的rowkey使得數據儘可能在Region上分布均勻,在查詢數據時就不會出現一個RegionServer負載過高,而其它RegionServer負載較低的情況。
column——列
列與關係型數據的列不同,HBase中的column由column family(列簇)和 qualifier(列)組成。兩者之間使用 ":" 相連,一個列簇下可以有多個列。
cell——單元格
單元格由五元組(rowkey、column、timestamp、type、value)組成,其中type標識操作的類型(Put/Delete)這樣的操作類型,在HBase底層以KV形式存儲,key為(rowkey、column、timestamp、type),值為value。
timestamp——時間戳
每個單元格在寫入HBase時都默認分配一個時間戳,作為單元格的版本,在寫入時也可以自帶時間戳,HBase支持多版本特性,同一個rowkey、column下可以有多個value存在,這些value使用timestamp作為版本號,版本號越大,數據越新。
Hbase安裝
前置條件
安裝環境:作業系統為CentOS,已配置免密登錄,已配置Java環境變量,已安裝Hadoop。
參考:Hadoop集群搭建、操作HDFS文件系統、Zookeeper集群安裝搭建。
安裝介質:hbase-2.0.5-bin.tar.gz,地址:https://hbase.apache.org/
安裝伺服器:node51(192.168.2.51),node52(192.168.2.52),node53(192.168.2.53)。
上傳安裝介質並解壓(node51)
tar -zxvf hbase-2.0.5-bin.tar.gz -C /opt/module/
cd /opt/module
mv hbase-2.0.5 hbase
環境變量: sudo vim /etc/profile.d/my_env.sh
#配置環境變量
#HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin
#執行使環境變量生效
source /etc/profile
echo $HBASE_HOME
配置(hbase-env.sh):
#備份一下:
cd $HBASE_HOME/conf
cp hbase-env.sh hbase-env.sh.bak
cp hbase-site.xml hbase-site.xml.bak
# vim hbase-env.sh :
export HBASE_MANAGES_ZK=false
配置(vim hbase-site.xml):
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 部署分布式服務 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 存儲HDFS的節點 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://node53:8020/hbase</value>
</property>
<!-- zookeeper管理節點 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node53,node54,node55</value>
</property>
<!-- 使用master節點2181埠 -->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<!-- ZooKeeper超時時間 -->
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
</configuration>
配置(vim regionservers):
node53
node54
node55
分發到其它伺服器節點: xsync.sh hbase
Hbase啟停
單點啟動:
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionservers
註:啟動前先保證 hadoop和zookeeper。
集群啟停:
bin/start-hbase.sh
bin/stop-hbase.sh
註:啟動後的進程HRegionServer,其中node55多了一個HMaster進程。
Web訪問:http://node53:16010/
進入命令行
bin/hbase shell
help
管理腳本(hbased.sh)
#!/bin/bash
if [ $# -lt 1 ]
then
echo "沒有參數: 傳入參數為: start、stop"
fi
case $1 in
"start")
ssh node55 "/opt/module/hbase/bin/start-hbase.sh"
;;
"stop")
ssh node55 "/opt/module/hbase/bin/stop-hbase.sh"
;;
esac