,好记性不如烂笔头
Hbase集群依赖于Hadoop()和Zookeeper()
如下配置参照了,详见:hbase-1.0.1.1/docs/book.html
环境配置
1、安装JDK1.6或更高版本
略
2、下载HBase
从地址下载hbase安装包
解压 % tar -xzv -f hbase-x.y.z.tar.gz
3、配置HBase环境变量
# hadoop体系的软件均通过hadoop用户来运行vim /home/hadoop/.bash_profile# 新增HBase环境变量# HBaseexport HBASE_HOME=/lucl/hbase-1.0.1.1export 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_80export 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自带的zookeeperexport HBASE_MANAGES_ZK=false
5、修改配置文件hbase-site.xml
hbase.cluster.distributed true true for fully-distributed hbase.tmp.dir /lucl/storage/hbase/tmp 本地文件系统的临时文件夹,hbase运行时使用 hbase.local.dir /lucl/storage/hbase/local 本地文件系统的本地存储 hbase.rootdir hdfs://cluster/hbase 在hdfs上存储的根目录(fs.defaultFS+目录名称),在单机模式下存储 在本地目录(file:///Directory)。 hbase.zookeeper.quorum nnode,dnode1,dnode2 zk服务器列表 hbase.zookeeper.property.dataDir /lucl/storage/zk/data Property from ZooKeeper config zoo.cfg. zookeeper.session.timeout 120000 2 minute, the minute from RegionServer to Zookepper hbase.zookeeper.property.tickTime 2000 Property from Zookeeper config zoo.cfg hbase.zookeeper.property.clientPort 2181 Property from Zookeeper config zoo.cfg hbase.master.info.bindAddress nnode HBase Master Web UI的绑定地址,默认0.0.0.0 hbase.master.info.port 16010 HBase Master Web UI端口,-1表示不运行Web UI hbase.regionserver.port 16020 The port the HBase RegionServer binds to. hbase.regionserver.info.port 16030 The port for the HBase RegionServer web UI hbase.regionserver.info.bindAddress nnode The address for the HBase RegionServer web UI
说明:
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 dnode1dnode2[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总用量 12drwxrwxr-x 2 hadoop hadoop 4096 1月 18 15:49 localdrwxrwxr-x 2 hadoop hadoop 4096 1月 18 15:47 logsdrwxrwxr-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环境变量
# HBaseexport HBASE_HOME=/lucl/hbase-1.0.1.1export 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.outdnode1: starting regionserver, logging to /lucl/storage/hbase/logs/hbase-hadoop-regionserver-dnode1.out
说明:HBase依赖于ZK、Hadoop,启动过程如下:
# 启动zookeeper# 启动hadoop# 启动HBasebin/start-hbase.sh
2、验证安装
-- HMaster[hadoop@nnode ~]$ jps12969 ResourceManager12800 DFSZKFailoverController13413 HMaster12328 JournalNode12281 QuorumPeerMain12514 NameNode13513 Jps[hadoop@nnode ~]$-- RegionServer[hadoop@dnode1 ~]$ jps12477 DFSZKFailoverController12179 QuorumPeerMain12309 NameNode12233 JournalNode12637 Jps12377 DataNode
3、访问master节点的Web界面
http://nnode:16010
说明:这里Backup Mastrs后面介绍。
4、访问regionserver节点的Web界面
http://dnode1:16030或http://dnode2:16030
5、查看master节点web目录下zk的状态
6、命令行工具HBase shell使用
bin/hbase shell
连接成功后进入HBase的执行环境
HBase Shell; enter 'help' for list of supported commands.Type "exit " to leave the HBase ShellVersion 1.0.1, r66a93c09df3b12ff7b86c39bc8475c60e15af82d, Fri Apr 17 22:14:06 PDT 2015hbase(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'TABLEtest 1 row(s) in 0.0150 seconds=> ["test"]# 插入数据hbase(main):006:0> put 'test', 'row1', 'cf:id', '1000'0 row(s) in 0.3310 secondshbase(main):007:0> put 'test', 'row1', 'cf:name', 'lucl'0 row(s) in 0.0250 secondshbase(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+CELLrow1 column=cf:id, timestamp=1440335878007, value=1000row1 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 CELLcf:id timestamp=1440335878007, value=1000cf:name timestamp=1440335886167, value=lucl2 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的数据
说明:HBase的数据是以HDFS作为存储的。
9、停止HBase
./bin/stop-hbase.sh
10、HBase的HA
Hbase默认只有一个Master,我们可以也启动多个Master:
# hbase-daemon.sh start master# # 不过,其它的Master并不会工作,只有当主Master down掉后其它的Master才会选择接管Master的工作。