鲁春利的工作笔记,好记性不如烂笔头



Hbase集群依赖于Hadoop(Hadoop2.6.0HA集群搭建)和Zookeeper(ZooKeeper3.4.6集群配置

如下配置参照了http://hbase.apache.org/book.html,详见:hbase-1.0.1.1/docs/book.html


wKioL1aggGPg_CqcAARNepwN6Pc389.jpg


环境配置

1、安装JDK1.6或更高版本

    略

2、下载HBase

    从地址http://hbase.apache.org/下载hbase安装包

    解压 % tar -xzv -f hbase-x.y.z.tar.gz


3、配置HBase环境变量

# hadoop体系的软件均通过hadoop用户来运行
vim /home/hadoop/.bash_profile

# 新增HBase环境变量
# HBase
export HBASE_HOME=/lucl/hbase-1.0.1.1
export PATH=$HBASE_HOME/bin:$PATH


4、配置文件hbase-env.sh

[hadoop@nnode conf]$ pwd
/lucl/hbase-1.0.1.1/conf
[hadoop@nnode conf]$ vim hbase-env.sh 
export JAVA_HOME=/lucl/jdk1.7.0_80
export HBASE_HOME=/lucl/hbase-1.0.1.1
# 由于hbase使用到了HDFS的HA地址,需要配置为Hadoop的conf目录(hadoop2.0为etc/hadoop)
export HBASE_CLASSPATH=/lucl/hadoop-2.6.0/etc/hadoop
# HBase的日志
export HBASE_LOG_DIR=/lucl/storage/hbase/logs
# 禁用hbase自带的zookeeper
export HBASE_MANAGES_ZK=false


5、修改配置文件hbase-site.xml

<configuration>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
                <description>true for fully-distributed</description>
        </property>
        <property>
                <name>hbase.tmp.dir</name>
                <value>/lucl/storage/hbase/tmp</value>
                <description>本地文件系统的临时文件夹,hbase运行时使用</description>
        </property>
        <property>
                <name>hbase.local.dir</name>
                <value>/lucl/storage/hbase/local</value>
                <description>本地文件系统的本地存储</description>
        </property>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://cluster/hbase</value>
                <description>
                    在hdfs上存储的根目录(fs.defaultFS+目录名称),在单机模式下存储
                    在本地目录(file:///Directory)。
                </description>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>nnode,dnode1,dnode2</value>
                <description>zk服务器列表</description>
        </property>
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/lucl/storage/zk/data</value>
                <description>Property from ZooKeeper config zoo.cfg.</description>
        </property>
        <property>
                <name>zookeeper.session.timeout</name>
                <value>120000</value>
                <description>2 minute, the minute from RegionServer to Zookepper</description>
        </property>
        <property>
                <name>hbase.zookeeper.property.tickTime</name>
                <value>2000</value>
                <description>Property from Zookeeper config zoo.cfg</description>
        </property>
        <property>
                <name>hbase.zookeeper.property.clientPort</name>
                <value>2181</value>
                <description>Property from Zookeeper config zoo.cfg</description>
        </property>
        <!-- HMaster相关参数 -->
        <property>
                <name>hbase.master.info.bindAddress</name>
                <value>nnode</value>
                <description>HBase Master Web UI的绑定地址,默认0.0.0.0</description>
        </property>
        <property>
                <name>hbase.master.info.port</name>
                <value>16010</value>
                <description>HBase Master Web UI端口,-1表示不运行Web UI</description>
        </property>
        <!-- HRegionServer相关参数 -->
        <property>
                <name>hbase.regionserver.port</name>
                <value>16020</value>
                <description>The port the HBase RegionServer binds to.</description>
        </property>
        <property>
                <name>hbase.regionserver.info.port</name>
                <value>16030</value>
                <description>The port for the HBase RegionServer web UI</description>
        </property>
        <!-- 在其他机器上需要配置为当前主机的主机名 -->
        <property>
                <name>hbase.regionserver.info.bindAddress</name>
                <value>nnode</value>
                <description>The address for the HBase RegionServer web UI</description>
        </property>
</configuration>

说明:

    hbase.regionserver.info.bindAddress必须注意修改,否则RegionServer将无法启动成功。

    如果在hbase-site.xml文件中未指定hbase.master的配置,则从那台机器启动hbase那台机器自动成为HMaster,而HRegionServer则依赖于conf/regionservers文件。


6、修改配置regionservers文件

[hadoop@nnode conf]$ pwd
/usr/local/hbase1.0.1/conf
# 定义RegionServer
[hadoop@nnode conf]$ cat regionservers 
dnode1
dnode2
[hadoop@nnode conf]$


7、分发hbase程序

将该hbase目录拷贝到另外两台主机dnode1和dnode2上

# 分发程序
[hadoop@nnode hbase]$ scp -r hbase dnode1:/lucl/storage/
[hadoop@nnode hbase]$ scp -r hbase dnode2:/lucl/storage/

# 分发目录
[hadoop@nnode hbase]$ ll
总用量 12
drwxrwxr-x 2 hadoop hadoop 4096 1月  18 15:49 local
drwxrwxr-x 2 hadoop hadoop 4096 1月  18 15:47 logs
drwxrwxr-x 2 hadoop hadoop 4096 1月  18 15:49 tmp
[hadoop@nnode hbase]$ 

[hadoop@nnode storage]$ scp -r hbase dnode1:/lucl/storage/
[hadoop@nnode storage]$ scp -r hbase dnode2:/lucl/storage/


8、配置dnode1和dnode2的HBase环境变量

# HBase
export HBASE_HOME=/lucl/hbase-1.0.1.1
export PATH=$HBASE_HOME/bin:$PATH


启动集群

1、在nnode节点启动HBase

[hadoop@nnode hbase-1.0.1.1]$ start-hbase.sh 
master running as process 8404. Stop it first.
dnode2: starting regionserver, logging to /lucl/storage/hbase/logs/hbase-hadoop-regionserver-dnode2.out
dnode1: starting regionserver, logging to /lucl/storage/hbase/logs/hbase-hadoop-regionserver-dnode1.out

说明:HBase依赖于ZK、Hadoop,启动过程如下:

# 启动zookeeper
# 启动hadoop
# 启动HBase
bin/start-hbase.sh


2、验证安装

-- HMaster
[hadoop@nnode ~]$ jps
12969 ResourceManager
12800 DFSZKFailoverController
13413 HMaster
12328 JournalNode
12281 QuorumPeerMain
12514 NameNode
13513 Jps
[hadoop@nnode ~]$

-- RegionServer
[hadoop@dnode1 ~]$ jps
12477 DFSZKFailoverController
12179 QuorumPeerMain
12309 NameNode
12233 JournalNode
12637 Jps
12377 DataNode


3、访问master节点的Web界面

http://nnode:16010

wKioL1adBZfjUDbeAAJIrNY5f-4370.jpg


说明:这里Backup Mastrs后面介绍。


4、访问regionserver节点的Web界面

http://dnode1:16030http://dnode2:16030

wKioL1adBU7h_BC1AAIfrBAwrvo907.jpg


5、查看master节点web目录下zk的状态

wKioL1ZwKQiilhnKAAKZBviHqFc745.jpg



6、命令行工具HBase shell使用

bin/hbase shell

连接成功后进入HBase的执行环境

HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.0.1, r66a93c09df3b12ff7b86c39bc8475c60e15af82d, Fri Apr 17 22:14:06 PDT 2015

hbase(main):001:0>

输入help可以看到命令的详细帮助信息,需要注意的是,在使用命令引用到表名、行和列时需要加单引号。


创建一个名为test的表,只有一个column family(列族)为cf。

# 创建表
hbase(main):004:0> create 'test', 'cf'
0 row(s) in 0.7540 seconds

=> Hbase::Table - test

# 查看表
hbase(main):005:0> list 'test'
TABLE
test                              
1 row(s) in 0.0150 seconds

=> ["test"]

# 插入数据
hbase(main):006:0> put 'test', 'row1', 'cf:id', '1000'
0 row(s) in 0.3310 seconds

hbase(main):007:0> put 'test', 'row1', 'cf:name', 'lucl'
0 row(s) in 0.0250 seconds

hbase(main):008:0> put 'test', 'row2', 'cf:c', 'val001'
0 row(s) in 0.0220 seconds

# 以上命令分别插入了三行数据,第一行rowkey为row1,列为cf:id,值为1000。HBase中的列是又
# column family前缀和列的名字组成的,以冒号分割。
# 扫描表的数据
hbase(main):009:0> scan 'test'
ROW        COLUMN+CELL
row1       column=cf:id,   timestamp=1440335878007, value=1000
row1       column=cf:name, timestamp=1440335886167, value=lucl         
row2       column=cf:c,    timestamp=1440335892630, value=val001          
2 row(s) in 0.1560 seconds

# 获取单行数据
hbase(main):010:0> get 'test', 'row1'
COLUMN     CELL
cf:id      timestamp=1440335878007, value=1000
cf:name    timestamp=1440335886167, value=lucl

2 row(s) in 0.0610 seconds

# 停用表
hbase(main):011:0> disable 'test'
0 row(s) in 2.2920 seconds

# 删除表
hbase(main):012:0> drop 'test'
0 row(s) in 0.7670 seconds

# 查看表
hbase(main):013:0> list 'test'
TABLE                             
0 row(s) in 0.0090 seconds

=> []

# 退出
hbase(main):014:0> quit


7、通过ZK查看hbase的数据

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[hbase, hadoop-ha, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /hbase
[meta-region-server, backup-masters, table, draining, region-in-transition, running, table-lock, master, namespace, hbaseid, online-snapshot, replication, splitWAL, recovering-regions, rs, flush-table-proc]
[zk: localhost:2181(CONNECTED) 2]

说明:HBase天生就具备了HA机制。ZK中记录了HBase的状态信息,如果出现org.apache.hadoop.hbase.TableExistsException: hbase:namespace的问题,可以删除该/hbase目录,再启动时会重新生成。


8、在hdfs上也记录了hbase的数据

wKioL1adBvKgHi3xAAgjfhOV2Y8778.jpg

说明:HBase的数据是以HDFS作为存储的。


9、停止HBase

./bin/stop-hbase.sh


10、HBase的HA

Hbase默认只有一个Master,我们可以也启动多个Master:

# hbase-daemon.sh start master
#    

# 不过,其它的Master并不会工作,只有当主Master down掉后其它的Master才会选择接管Master的工作。