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 的說明不吻合,這裡統一說明,之前的部落格就不更改了。還有一點就是,本文的安裝過程很順,沒有出現什麼啟動不了,或是執行異常的行為。如果你在安裝的過程出現了一些不好的事情,那麼你可能會在本文中找到一些蛛絲馬跡,也可能一無所獲。只是我希望你可以理解到,本文並非胡編亂鄒。
版權說明
環境說明
- CentOS release 6.5 (Final) ( master )
- CentOS release 6.5 (Final) ( slave1 )
- CentOS release 6.5 (Final) ( slave2 )
- JDK-1.8.0_92 ( Oracle )
- Hadoop-2.2.0
- Zookeeper-3.4.5
- 虛擬機器環境: 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"]