HBase是一种Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、 实时读写的分布式数据库。利用Hadoop HDFS存储HBase的数据文件,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为HBase分布式协同服务。主要用来存储非结构化和半结构化的松散数据。
RowKey | TimeStamp | Column Family01 | Column Family02 | ||
name | age | job1 | job2 | ||
10001 | t1 | tom | 25 | enginer | manager |
10002 | t2 | lily | 22 | dancer | dancer |
Row Key:
Column Family列族 & qualifier列:
Timestamp时间戳:
Cell单元格:
Client
Zookeeper
Master
RegionServer
HLog(WAL log)
Region
Storefile
Apache HBase官网提供了默认配置说明、参考的配置实例。我们安装方式为完全分布式,且使用独立的ZooKeeper协同服务保持HA。在安装HBase之前确保已经安装好了ZooKeeper。
(1) 下载Apache HBase
从官网上面下载最新的二进制版本:hbase-1.2.6-bin.tar.gz,然后解压。
# 解压命令
tar -zxvf hbase-1.2.6-bin.tar.gz
# 配置环境变量
vi ~/.bash_profile
export HBASE_HOME=/home/hbase/hbase-1.2.6
export PATH=$PATH:$HBASE_HOME/bin
# 使用环境变量生效
source ~/.bash_profile
(2) 配置hbase-site.xml
编辑 $HBASE_HOME/conf/hbase-site.xml
hbase.zookeeper.property.clientPort
2181
hbase.zookeeper.quorum
slave1,slave2,slave3
The directory shared by RegionServers.
hbase.zookeeper.property.dataDir
/home/hbase/zookeeper-data
注意这里的zookeeper数据目录与hadoop ha的共用,也即要与zoo.cfg中配置的一致
hbase.master
master:60000
hbase.master.maxclockskew #时间同步允许的时间差
180000
hbase.rootdir
hdfs://master:8020/hbase
这是RegionServers共享的目录,官网多次强调这个目录不要预先创建,
hbase会自行创建,否则会做迁移操作,引发错误。
hbase.cluster.distributed
true
分布式集群配置,这里要设置为true,如果是单节点的,则设置为false
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)
(3)配置regionserver文件
编辑 $HBASE_HOME/conf/regionservers文件,输入要运行RegionServer的主机名
slave1
slave2
slave3
(4)配置backup-masters文件 (master备用节点)
HBase支持运行多个master节点,因此不会出现单点故障问题,但只能有一个活动的管理节点(active master),其余为备用节点(backup master)。编辑$HBASE_HOME/conf/backup-masters文件进行配置备用管理节点的主机名
slave2
(5) 配置hbase-env.sh文件
编辑$HBASE_HOME/conf/hbase-env.sh配置环境变量。我们单独配置的zookeeper,所以将配置文件中HBASE_MANAGES_ZK 设置为false
export HBASE_MANAGES_ZK=false
(6) 启动HBase
使用$HBASE_HOME/bin/start-hbase.sh指令可以启动整个集群。为了更加深入了解HBase启动过程,我们对各个节点依次启动。经查看start-hbase.sh,里面的启动顺序如下:
if [ "$distMode" == 'false' ]
then
"$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master $@
else
"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" $commandToRun zookeeper
"$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master
"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
--hosts "${HBASE_REGIONSERVERS}" $commandToRun regionserver
"$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \
--hosts "${HBASE_BACKUP_MASTERS}" $commandToRun master-backup
fi
即:使用hbase-daemon.sh命令依次启动zookeeper、master、regionserver、master-backup。
因此,我们也按照这个顺序,在各个节点进行启动(确保Hadoop HDFS运行)
zkServer.sh start &
# 启动 journalnode(master,slave1,slave2,slave3)
hdfs journalnode &
# 启动 namenode active(master)
hdfs namenode &
# 启动 namenode standby(slave2)
hdfs namenode &
# 启动ZookeeperFailoverController(slave1,slave2)
hdfs zkfc &
# 启动 datanode(slave1,slave2,slave3)
hdfs datanode &
hbase-daemon.sh start master &
hbase-daemon.sh start regionserver &
hbase-daemon.sh start master --backup &
hbase shell
# 查看集群状态和节点数量
hbase(main):001:0> status
1 active master, 1 backup masters, 4 servers, 0 dead, 0.5000 average load
(1) Hbase的优点
(2) Hbase的缺点