個人大數據總結之Hbase(一)-----安裝及邏結構

前言:

在大數據領域有一個非常著名的產品-hbase,其有別於傳統的rdbms,被稱之爲列式數據庫。那麼什麼是列式數據庫呢?既然有列,那是不是也有行式數據庫呢?

行式數據庫:可以簡單的理解爲是傳統的rdbms這些數據庫,存放的是結構化的數據,非常有利於全表數據的掃描,但是相對來說,對於個別字段的掃描,就不那麼方便了。

列式數據庫:列式數據庫是對行式數據庫的一個改進,將部分列(或者說有關聯的一些列)存放到單獨的一個文件中,其他列存在其他多個文件中,我們在進行 查詢的時候,只需要讀取這些常用的列即可完成工作,這樣減少了文件IO的讀寫,提高讀寫的效率(不用再像行式數據庫那樣進行全表的掃描,然後過濾相關字段)。

一、hbase簡介

1.是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,

2.HBase利用Hadoop HDFS作爲其文件存儲系統,利用Hadoop MapReduce來處理HBase中的海量數據,(利用zookeeper作爲協調工具)。

3.特點

(1)hbase自身的特點

   ①高可靠性

   ②高性能

   ③面向列

   ④可伸縮

(2)hbase中表的特點

  ①可以縱向擴展

  ②可以橫向擴展

二、hbase體系結構

1.邏輯結構(重點)

 ①表(table)

  劃分數據集合的概念,和傳統的db中的表的概念是一樣的。

 ②行鍵(rowkey)

  一行數據的唯一標識,若想要操作hbase表中的一條數據,必須通過行鍵來定位,行鍵在hbase底層是使用字節數組進行存放的,所以方便我們使用rowkey來進行排序。

 一行數據的唯一標示,要想操作(read/write)一條數據,必須通過行健,其在hbase底層都是使用字節數組進行存放,所以方便我們使用rk進行排序,
        ③列族(columnFamily)

簡單的認爲是一系列“列”的集合,列族是以單獨的文件來進行存儲的。

④列限定符(column Qualifier)

 通常稱之爲列。列裏邊的數據定位通過列限定符,每個列族可以有一個或多個列成員(ColumnQualifier)。列成員不需要再定義表時規定,後期新加就可以了,可以動態注入。每個新加的列都會附帶一個時間戳。在單元格中可以存放多個版本的數據。

 ⑤單元格(cell)

  cell由行鍵,列族:限定度,時間戳唯一決定的,cell中的數據時沒有類型的,全部以字節碼形式存儲,在使用java api去請求hbase數據時,所得的數據基本都存儲在cell中。


 2.物理結構(重點)

①HMaster  --- 類似於hadoop的NameNode

  作用:管理節點,用於管理hbase中的Table和Region的結構操作,比如用戶增、刪、修改表的操作。

在hbase集羣中,可以啓動多個HMaster,但是隻能有一個HMaster屬於Active的狀態,通過zookeeper和其他standby狀態的HMaster進程完成狀態的切換或者選舉。

我們可以使用HMaster的shutdown來關閉整個集羣,在關閉整個集羣的時候,需要通知HRegionServer進行關閉,並反饋給HMaster,HMaster才自行關閉。

②HRegionServer   --- 類似於hadoop中的DataNode

 存放Region的服務器,需要再HMaster進行註冊,只有註冊成功後,HMaster纔可以對其進行管理,在HBase集羣中,可以部署多個HregionServer。HRegionServer是hbase中最核心的模塊,直接負責對用戶I/O的相應,直接向hdfs讀寫數據,一個HRegionServer中擁有一個HLog和多個HRegion。

按這樣來說,一個HRegionServer中的多個HRegion共享一個HLog,也就是說多張表共享一個HLog,HLog接受用戶的操作數據,當然HRegion也會寫數據,當HRegion數據寫入成功之後,會發送一條刪除數據的指令(數據寫入成功的指令),Hlog的相關數據會首次被標記刪除,等到一個閾值後,Hlog會執行一次文件的大合併(major Compact)。

③HRegion

其是真正用來存儲數據的,而且它可以簡單的理解爲表的一個分區,存放一張表中的一部分數據,當該region中的數據超過一定數量的時候,會自動分裂成兩個region(一分爲二),從這個角度上而言,Region是對hbase中表橫向的劃分。

每一個HRegion有多個HStore組成,每一個HRegion是一張表中所有的列組成的(列是所有的列,但不一定是所有的行),每一個region都有一個startkey和endkey。

假設,我一張表裏面有100條記錄,我要把它分別存放到10個region裏面,又因爲存放在hbase裏面的數據都是有序的,是能夠進行一個高速隨機讀寫的

也就是說有序能夠保證我的快讀,就需要能夠通過rowkey,快速的定位到當前記錄在哪一個region裏面,然後當定位到region之後,再去掃描當前region,獲取數據

爲了滿足於此,我們就對這些region進行劃分,編號,也是爲了方便管理。這裏每一個region的範圍:
        [startKey, endKey),需要注意一定最後一個region的endkey是需要被包含進去的。
        region 0     [null, 10)
        region 1     [10, 20)
        region 2     [20, 30)
        region ...     ...
        region 9     [90, null]④HStore

  ④ HStore

每一個HRegion由多個HStore來組成,一個HStore對應HRegion中的一個列族,一個HStore有一個MemStore和一系列的StoreFiles組成。    

HStore級別不會持有鎖以及事務,鎖和事務是在高一級別的HRegion持有的,HStore最核心的一個service就是合併memstore刷新到磁盤裏邊的storefiles,然後把多個storefiles合併成爲一個storefile,寫到hdfs裏邊,當storefile寫到hdfs後就會被稱爲hfile。

在寫的過程中,唯一涉及到hlog的部分就是關於hlog日誌的重建過程,當hstore將用戶提交的數據最終寫到hdfs之後,會反饋給hlog,並將其裏邊冗餘的數據刪除掉。

 

 可以在配置文件中指定hstore數量爲多少時開啓hstore的合併工作。
 hbase.hstore.compactionThreshold=3,  --代表黨hstore數量爲3時,開始store的合併工作。
拓展:

 ①Compaction:

      minjor compaction(小合併):

            就是將多個HFile合併成爲一個大的HFile,然後對之前的HFile做清除處理。

            常見的會在執行刪除數據的動作、以及達到hbase.hstore.compactionThreshold觸發條件的時候發生

            刪除數據:不會立即刪除,做一個標記(標記刪除),等到執行合併操作的時候,才進行數據的處理

      marjor compaction(大合併):

             將一個列族中的所有的HFile合併成爲一個HFile,然後對之前的HFile做清除處理。

             大合併非常消耗性能,非常耗時,不建議操作,當然是直接可以在shell執行操作的。

②把在HBase中的HLog存在的意義稱之爲WAL(write ahead log,預寫日誌)機制,這種機制有對應的專業的數據結構

SLM-Tree(Structured Log Merge-Tree), 這是HBase能夠達到高速隨機寫,而且能夠保障數據不丟失根本原因。

⑤memstore

    注意:在memstore寫的過程中,必須不能是多線程(並行)調用的,hstore在調用的過程中必須持有一個讀鎖和寫鎖。

在寫的過程中,預先將數據在memstore中進程排序,因爲數據最終是有序存放的,當memstore中的數據量超過閾值之後,就會舒心到磁盤文件 storefile中。   

hbase.hregion.memstore.flush.size=128M,storeFile 默認的大小就是128M---->剛好對應了一個datanode的block塊的大小 

⑥storeFile

最終保存在HStore數據的文件,數據時有memstore不斷向磁盤刷新過程中產生的,當storefile達到一定量的時候,會將這些

storefile組成一個storefiles。,且這個storefiles有可能持有其他store裏邊的storefile。

⑦HFlie

在hdfs上存放數據之前的一個物理結構,用於接收從客戶端提交過來的數據。

HFile中的數據都是key-value鍵值對的方式存儲,並且key和value都是字節數組,並且因爲數據已經在memstore中排序過了,所以數據在hfile中也是有序的。

hfile同時是由一個個的block來組成的,最終k-v實際上是在這一個個的block中的,block的推薦的大小在8k~1M之間,默認

大小65536byte-->16kb。

三、hbase的安裝

1.軟件環境

(1)我現在使用hbase的版本是hbase-1.2.5

(2)hadoop

(3)zookeeper

(4)java

hadoop、zookeeper的安裝我會在以後的文章中爲大家介紹的~或者大家可以先在網上找一些資料,學習怎麼去安裝~


2.單機版本

(1)解壓

tar -zxvf soft/hbase-1.2.5-bin.tar.gz 

(2)將hbase添加至環境變量

vi /etc/profile

export HBASE_HOME=/opt/hbase

(3)修改配置文件

在安裝hbase時,主要是修改兩個配置文件,hbase-env.sh和hbase-site.xml 

hbase-env.sh:

    在這裏配置比較簡單,只要添加兩條記錄即可。

     

export JAVA_HOME=/opt/jdk
export HBASE_MANAGES_ZK=false   -- (這裏指明不適用hbase自己的zookeeper,要使用我們安裝的)

 hbase-site.xml :

            <property>
                <name>hbase.rootdir</name>
                <value>hdfs://ns1/hbase</value>
            </property>
            <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
            </property>
            <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master</value>
            </property>

(4) 啓動

sh $HBASE_HOME/bin/start-hbase.sh

在這個時候,我們使用jps命令,當HMaster、HRegionServer兩個進程都啓動的時候,這證明我們的單機hbase已經啓動成功了,見以下兩張圖,因爲我搭建的是集羣,所有HMaster、HRegionServer沒有在一臺服務器上。

(5)停止

 sh $HBASE_HOME/bin/stop-hbase.sh

(6)單個進程啓動 

HMaster的啓動: hbase-daemon.sh start master

HRegionserver的啓動: hbase-daemon.sh start regionserver

   (7)訪問

web訪問: http://127.0.0.1:16010

cli訪問: bin/hbase shell

3.分佈式安裝

(1)既然我們已經完成了單機安裝,那麼分佈式的安裝也就比較簡單了,只需要在單機的版本上新增一個配置文件conf/regionservers, 並在其內添加兩個節點(兩行):

slave01

slave02

 注意:如果已經配置過單機版,我們需要將hbase在hdfs上的目錄,以及hbase在zk中的目錄清楚,以免和我們的集羣版本操作發生衝突。

(2)修改配置文件hbase-site.xml

            <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master,slave01,slave02</value>
            </property>

(3)拷貝master上面的數據到slave01和slave02

scp -r /opt/hbase root@slave01:/opt

 scp -r /opt/hbase root@slave02:/opt

 同樣在slave01和slave02上面添加相關環境變量

 scp /etc/profile root@slave01:/etc/profile.d/

scp /etc/profile root@slave02:/etc/profile.d/

注意:在我們每次修改環境變量後,一定別忘記使用souce命令使其生效。

注意:在我們每次修改環境變量後,一定別忘記使用souce命令使其生效。

注意:在我們每次修改環境變量後,一定別忘記使用souce命令使其生效。
      
     (4)啓動hbase集羣

sh $HBASE_HOME/bin/start-hbase.sh

這個時候在master機器上面,有一個進程HMaster,在slave01和slave02上面分別有一個HRegionServer (如上面截圖)

至此,我們hbase的簡單介紹以及安裝已經介紹完了,希望對大家能夠有所幫助~ 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章