1. 程式人生 > >HBase 0.98 分散式叢集安裝詳解

HBase 0.98 分散式叢集安裝詳解

概述

HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。

前言

這篇部落格應該很早就發表了,只是當時環境搭建好了之後沒有及時做筆記,後來又不想重新搭建,所以才拖到今天。還有就是這篇部落格安裝的是 Hbase-0.98 的版本,與之前說要安裝 0.96 的說明不吻合,這裡統一說明,之前的部落格就不更改了。還有一點就是,本文的安裝過程很順,沒有出現什麼啟動不了,或是執行異常的行為。如果你在安裝的過程出現了一些不好的事情,那麼你可能會在本文中找到一些蛛絲馬跡,也可能一無所獲。只是我希望你可以理解到,本文並非胡編亂鄒。

版權說明

環境說明

  1. CentOS release 6.5 (Final) ( master )
  2. CentOS release 6.5 (Final) ( slave1 )
  3. CentOS release 6.5 (Final) ( slave2 )
  4. JDK-1.8.0_92 ( Oracle )
  5. Hadoop-2.2.0
  6. Zookeeper-3.4.5
  7. 虛擬機器環境: VMware® Workstation 12 Pro
序號 虛擬機器 IP hostname
1 172.16.2.117 master
2 172.16.2.115 slave1
3 172.16.2.116 slave2

HBase 環境搭建

下載

$ tar -zxvf hbase-0.98.18-hadoop2-bin.tar.gz
$ mv hbase-0.98.18-hadoop2-bin ~/hbase

配置環境變數

$ sudo vim /etc/profile
export HBASE_HOME=/home/hadoop/hbase
export PATH=$PATH:${HBASE_HOME}/bin
$ source /etc/profile

同步叢集時間

檢視各臺機器的時間

$ 
date

如果時間是一致的,下面的這一步就不用進行了。如果時間不一致可通過下面的步驟將時間統一。

$ sudo ntpdate cn.pool.ntp.org

若沒有安裝ntpdate;先安裝ntpdate工具。機器之間的時間如果不統一,後果就是 HMaster 程序起不起來(未測試過)。

修改配置檔案

這裡主要需要修改的檔案有如下幾個

序號 檔名 上層路徑
1 hbase-env.sh ${HBASE_HOME}/conf/
2 hbase-site.xml ${HBASE_HOME}/conf/
3 regionservers ${HBASE_HOME}/conf/

hbase-env.sh

新增如下內容

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_92
export HBASE_CLASSPATH=/home/hadoop/hadoop/etc/hadoop
export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
export HBASE_MANAGES_ZK=false

HBASE_MANAGES_ZK預設是true,說明是讓Hbase 單獨管理 zookeeper。如果你機器上已經安裝好了分散式Zookeeper,那麼可以設定為fals;否則就不需要修改。

hbase-site.xml

$ vim hbase-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

    <!-- 指定 hbase 在 HDFS 上儲存的路徑,保持與 core-site.xml 中的 hdfs 路徑一致 -->
    <property>
         <name>hbase.rootdir</name>
         <value>hdfs://master:9000/hbase</value>
    </property>

    <!-- 指定 hbase 是分散式的 -->
    <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
    </property>

    <!-- 指定 zk 的地址,多個用“,”分割 ,hbase.zookeeper.quorum 的個數必須是奇數,至少是3個-->
    <property>
            <name>hbase.zookeeper.quorum</name><!-- quorum : 法定人數 -->
            <value>master:2181,slave1:2181,slave2:2181</value>
    </property>

</configuration>

regionservers

$ vim regionservers
master
slave1
slave2

下發

$ scp -r ~/hbase/ slave1:~/hbase
$ scp -r ~/hbase/ slave2:~/hbase

並修改各節點的 /etc/profile 檔案內容。

啟動

在 master 中啟動 master 程序

$ hbase-daemon.sh start master
starting master, logging to /home/hadoop/hbase/logs/hbase-hadoop-master-master.out

在兩個 slaves 中啟動 master 程序

[hadoop@slave1 ~]$ hbase-daemon.sh start regionserver
starting regionserver, logging to /home/hadoop/hbase/logs/hbase-hadoop-regionserver-slave1.out
[hadoop@slave2 ~]$ hbase-daemon.sh start regionserver
starting regionserver, logging to /home/hadoop/hbase/logs/hbase-hadoop-regionserver-slave2.out

或者直接使用

$ start-hbase.sh
starting master, logging to /home/hadoop/hbase/logs/hbase-hadoop-master-master.out
slave2: starting regionserver, logging to /home/hadoop/hbase/bin/../logs/hbase-hadoop-regionserver-slave2.out
slave1: starting regionserver, logging to /home/hadoop/hbase/bin/../logs/hbase-hadoop-regionserver-slave1.out
master: starting regionserver, logging to /home/hadoop/hbase/bin/../logs/hbase-hadoop-regionserver-master.out

驗證

方式一:jps
如果你使用 jps 命令可以檢視到如下的這些程序,那麼 ok, 你的配置基本沒啥問題了。

[hadoop@master conf]$ jps
4273 QuorumPeerMain
3875 SecondaryNameNode
4614 HMaster
4824 Jps
4011 ResourceManager
3709 NameNode
4734 HRegionServer
[hadoop@slave1 ~]$ jps
3122 HRegionServer
2948 QuorumPeerMain
2824 NodeManager
3273 Jps
2731 DataNode
[hadoop@slave2 ~]$ jps
2818 NodeManager
2948 QuorumPeerMain
2724 DataNode
3501 Jps
3358 HRegionServer

方式二:網頁驗證
你也可以在節點主機的 web 瀏覽器裡輸入 master:60010 進行驗證
這裡寫圖片描述
如果你的介面裡也有類似的介面,那麼就說明 hbase 已經成功安裝了。

方式三:Shell
上面的兩種還都只是驗證了你的 Hbase 是否安裝成功,卻不能說明它一定可用。這時需要進行 Shell 驗證。主要驗證步驟參見下面。

shell

可以使用 hbase shell 進入

$ hbase shell
2016-06-07 16:25:07,525 INFO  [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.18-hadoop2, rc26c554ab3a8deecf890873bf6b1b4c90fa001dc, Fri Mar 18 19:19:59 PDT 2016

hbase(main):001:0>

檢查狀態

hbase(main):001:0> status
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load

建立資料表

hbase(main):002:0> create 'student', 'name', 'sex', 'age'
0 row(s) in 0.8520 seconds

=> Hbase::Table - student

檢視資料表

hbase(main):003:0> list
TABLE
student
1 row(s) in 0.0450 seconds

=> ["student"]

Ref