高可用Hadoop平臺-HBase叢集搭建

哥不是小蘿莉發表於2015-05-19

1.概述

  今天補充一篇HBase叢集的搭建,這個是高可用系列遺漏的一篇部落格,今天抽時間補上,今天給大家介紹的主要內容目錄如下所示:

  • 基礎軟體的準備
  • HBase介紹
  • HBase叢集搭建
  • 單點問題驗證
  • 截圖預覽

  那麼,接下來我們開始今天的HBase叢集搭建學習。

2.基礎軟體的準備

  由於HBase的資料是存放在HDFS上的,所以我們在使用HBase時,確保Hadoop叢集已搭建完成,並執行良好。若是為搭建Hadoop叢集,請參考我寫的《配置高可用的Hadoop平臺》來完成Hadoop平臺的搭建。另外,我們還需要準備好HBase的安裝包,這裡我所使用的HBase-1.0.1,Hadoop版本使用的是2.6.0,基礎軟體下載地址如下所示:

  HBase安裝包  《下載地址

  在準備好基礎軟體後,我們來介紹一下HBase的相關背景。

3.HBase介紹

  在使用HBase的時候,我們需要清楚HBase是用來幹什麼的。HBase是一個分散式的、面向列的開源資料庫,就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關聯式資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。它是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化儲存叢集。

  接下來我們來看看HBase的使用場景,HBase有如下使用場景:

  •  大資料量 (100s TB級資料) 且有快速隨機訪問的需求。
  •  例如淘寶的交易歷史記錄。資料量巨大無容置疑,面向普通使用者的請求必然要即時響應。
  •  容量的優雅擴充套件。
  •  大資料的驅使,動態擴充套件系統容量的必須的。例如:webPage DB。
  •  業務場景簡單,不需要關聯式資料庫中很多特性(例如交叉列、交叉表,事務,連線等等)。
  •  優化方面:合理設計rowkey。因為hbase的查詢用rowkey是最高效的,也幾乎的唯一生產環境可行的方式。所以把你的查詢請求轉換為查詢rowkey的請求吧。

4.HBase叢集搭建

  在搭建HBase叢集時,既然HBase擁有高可用特性,那麼我們在搭建的時候要充分利用這個特性,下面給大家一個HBase的叢集搭建架構圖,如下圖所示:

  這裡由於資源有限,我將HBase的RegionServer部署在3個DN節點上,HBase的HMaster服務部署在NNA和NNS節點,部署2個HMaster保證叢集的高可用性,防止單點問題。下面我們開始配置HBase的相關配置,這裡我使用的是獨立的ZK,未使用HBase自帶的ZK。

  • hbase-env.sh
# The java implementation to use.  Java 1.7+ required.
export JAVA_HOME=/usr/java/jdk1.7

# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false
  • hbase-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>dn1:2181,dn2:2181,dn3:2181</value>
        <description>The directory shared by RegionServers.
        </description>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/hadoop/data/zk</value>
        <description>Property from ZooKeeper config zoo.cfg.
            The directory
            where the snapshot is stored.
        </description>
    </property>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://cluster1/hbase</value>
        <description>The directory shared by RegionServers.
        </description>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
        <description>The mode the cluster will be in. Possible values are
            false: standalone and pseudo-distributed setups with managed
            Zookeeper
            true: fully-distributed with unmanaged Zookeeper Quorum (see
            hbase-env.sh)
        </description>
    </property>
</configuration>
  • regionservers
dn1
dn2
dn3

5.單點問題驗證

  在配置完成叢集后,我們開始啟動叢集,需要注意的時,在啟動叢集之前確保各個節點之間的時間是同步的,或者時間差不能太大,若時間差太大,會導致HBase啟動失敗。下面我們在NNA節點輸入啟動命令,命令內容如下所示:

[hadoop@nna ~]$ start-hbase.sh

  然後,我們在NNS節點上在啟動一個HMaster程式,啟動命令如下所示:

[hadoop@nns ~]$ hbase-daemon.sh start master

  然後,我們在各個節點輸入jps命令檢視相關啟動程式,各個節點分佈的程式如下表所示:

節點 程式
NNA HMaster
NNS HMaster
DN1 RegionServer
DN2 RegionServer
DN3 RegionServer

  截圖如下所示:

  HBase的Web管理介面,預設埠是16010,這裡我先啟動的是NNA的HMaster,所提NNA節點HMaster對外提供服務,截圖如下所示:

  下面我kill掉NNA節點的HMaster程式,命令如下所示:

[hadoop@nna ~]$ kill -9 2542

  然後,我們在檢視相應的服務,由於我們使用了ZK,它會選擇一個主服務出來,即NNS節點對外提供HMaster服務,截圖如下所示:

  通過驗證,HBase的高可用性正常,避免存在單點問題。

6.截圖預覽

  下面給出HBase資料庫的截圖預覽,如下圖所示:

7.總結

  這裡需要注意的是,在搭建HBase叢集的時候需要保證Hadoop平臺執行正常,各個節點的時間差不能相差太大,最後時間能夠同步。否則會導致HBase的啟動失敗。另外,如果在啟動HBase叢集時,提示不能解析HDFS路徑,這裡將Hadoop的core-site.xml和hdfs-site.xml檔案複製到HBase的conf檔案目錄下即可。

8.結束語

  這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!

相關文章