hbase集群搭建

添加环境

hbase 是分布式集群搭建的,运行在多台机器上面,易于扩展。

接着hadoop的安装环境,确保已经有环境:

1)hadoop用户与各机器免密码登录;

2)JAVA环境

3)添加hbase环境变量

echo 'export HBASE_HOME=/data/hadoop/hbase-1.2.4/' >> ~/.bashrc 
echo 'export PATH=$PATH:$HBASE_HOME/bin:' >> ~/.bashrc 

服务器分布:

IP hostname HMaster HRegionServer ThriftServer
10.1.1.185 namenode Y N Y
10.1.1.111 datanode111 Y Y Y
10.1.1.196 datanode196 Y Y Y
10.1.1.197 datanode197 Y Y Y
10.1.1.198 datanode198 N Y Y
10.1.1.199 datanode199 N Y Y
10.1.1.200 datanode200 N Y Y
10.1.1.201 datanode201 N Y Y
10.1.1.202 datanode202 N Y Y

配置文件

hbase-default.xml + regionservers + backup-masters

github代码配置: hbase-default.xml

hbase.master.port

HBase的Master的端口,默认:60000

hbase.tmp.dir

本地文件系统的临时文件夹,可以修改到一个更为持久的目录上。

hbase.regionserver.port

HBase RegionServer绑定的端口,默认: 60020

hbase.client.write.buffer

HTable客户端的写缓冲的默认大小。值越大,需要消耗的内存越大。

hbase.zookeeper.property.clientPort

ZooKeeper的zoo.conf中的配置。 客户端连接的端口,默认: 2181

hbase.zookeeper.property.dataDir

1、ZooKeeper的zoo.conf中的配置。

2、把ZooKeeper保存数据的目录地址改掉。默认值是 /tmp

3、对于独立的Zookeeper,要指明Zookeeper的host和端口。

hbase.hregion.max.filesize

大HStoreFile大小;默认:10737418240 10G

hbase.cluster.distributed

HBase的运行模式。false是单机模式,true是分布式模式。

hbase.rootdir

1、region server的共享目录,用来持久化HBase

2、namenode 运行在namenode.example.org的9090端口。则需要设置为hdfs://namenode.example.org:9000/hbase

3、默认情况下HBase是写到/tmp的,数据会在重启的时候丢失

4、默认值为: file:///tmp/hbase-${user.name}/hbase,必须与Hadoop集群的core-site.xml文件配置保持一致

hbase.zookeeper.quorum

1、Zookeeper集群的地址列表,用逗号分割。

2、个数必须是奇数

3、例如:namenode,datanode111,datanode196,datanode197,datanode198,datanode199,datanode200,datanode201,datanode202

regionservers

1、编辑所有机器的HBase的HMasters和HRegionServers

2、hbase/conf 文件夹下的regionservers文件,每行一个

3、比如:

datanode111
datanode196
datanode197
datanode198
datanode199
datanode200
datanode201
datanode202

backup-masters

备用HMaster, 当主master宕掉后,起用其中之一; 每行一个(和regionservers一样)

datanode111
datanode196
datanode197

hbase.regionserver.handler.count

1、处理用户请求的线程数量。默认是10

2、值越大,越吃内存;put操作一般不会缓冲,绝大多数的操作是get操作

环境与java参数配置

1、HBASE_MANAGES_ZK = false

Hbase使用一个现有的不被Hbase托管的Zookeep集群

2、HBASE_MANAGES_ZK = true

Hbase启动的时候同时也启动zookeeper; 一个分布式运行的Hbase依赖一个zookeeper集群; Hbase管理一个zookeep集群。集群会随着Hbase的启动而启动

3、HBASE_SSH_OPTS="-p 61620 -q "

指定服务器间的ssh端口

同步配置

写一个脚本进行同步

lang=bash,lines=9,name=rsync_conf.sh
#!/bin/bash
#HBASE_H=$( env|grep HBASE_HOME|awk -F'=' '{print $2}')
if [ "$HBASE_H" = "" ];then
    HBASE_H=/data/hadoop/hbase-1.2.4
fi
HOSTS="datanode111 datanode196 datanode197 datanode198 datanode199 datanode200 datanode201 datanode202"

for host in $HOSTS
do

#echo "rsynct $host"

echo "scp -r -p -P32200 $HBASE_H/conf/* $host:$HBASE_H/conf/"
scp -r -p -P32200 $HBASE_H/conf/* $host:$HBASE_H/conf/

done

集群启动

执行:./bin/start-hbase.sh 启动

流程如下图:

启动hbase支持的thrift进程

在hbase服务器上启动thrift的服务器端,所以就同时存在N个连接端,管理hbase数据时可以做负载均衡。

1、定义每一个机器的启动脚本

lang=bash,lines=19,name=start_hbase_thrift.sh
#!/bin/bash
#HBASE_H=$( env|grep HBASE_HOME|awk -F'=' '{print $2}')
if [ "$HBASE_H" = "" ];then
    HBASE_H=/data/hadoop/hbase-1.2.4
fi
THRIFT_bin=${HBASE_H}/bin/hbase
PORT=9090
$THRIFT_bin thrift -p $PORT start &

2、定义一个集群控制脚本

lang=bash,lines=22,name=start_all_hbse_thrift.sh
#!/bin/bash
hbase_h=$( env|grep hbase_home|awk -f'=' '{print $2}')
if [ "$hbase_h" = "" ];then
    hbase_h=/data/hadoop/hbase-1.2.4
fi
HOSTS="datanode111 datanode196 datanode197 datanode198 datanode199 datanode200 datanode201 datanode202"

for host in $HOSTS
do

#echo "rsynct $host"

ssh -p32200 $host "/bin/bash $hbase_h/bin/start_hbase_thrift.sh"

done