CentOS,大數據集群搭建,HBase數據模型,HBase集群搭建及管理

古怪今人 發佈 2022-10-27T22:03:37.550397+00:00

一個表可能包含多行數據,表其實是一個分布式的表,真正的數據是存儲在Region中的,Region可以理解為分片,每個表會包含多個分片,分別由不同的RegionServer管理,每個分片會有多個副本,以實現分片的高可用。

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
關鍵字: