一、hbase简介
HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务。因此,它可以容错地存储海量稀疏的数据。
HBase在列上实现了BigTable论文提到的压缩算法、内存操作和布隆过滤器。HBase的表能够作为MapReduce任务的输入和输出,可以通过Java API来存取数据,也可以通过REST、Avro或者Thrift的API来访问。 — *
参考文档
Apache HBase ™ Reference Guide
HBase 官方文档中文版
列式存储hbase系统架构学习
(slideshare PPT 分享服务在大陆是被墙的,不能*?查看使用*服务享受*网络学习方法)
二、整体环境说明
hbase的存储为 HDFS,所以运行hbase是需要hadoop环境的,hadoop 集群搭建过程参考之前文章http://ixirong.com/2015/05/22/how-to-install-hadoop-cluster/
操作系统: cenos 6.4 ,三台192.168.9.92、192.168.9.93、192.168.9.94
jdk版本: 1.7.0_75
hadoop版本: 2.5.2 (目的与hbase兼容)
hbase 集群3个节点,一主两从,如下:
角色 |
ip |
运行进程 |
master |
192.168.9.92 |
JobHistoryServer,ResourceManager,NameNode,NodeManager,DataNode,Main,HMaster |
slave1 |
192.168.9.93 |
NodeManager,DataNode,HRegionServer |
slave2 |
192.168.9.94 |
NodeManager,DataNode,HRegionServer |
hbase 的部署完全支持单机和伪分布式,如果没有机器可以按照这两种方式来部署,详情参考:http://blog.csdn.net/andie_guo/article/details/44086389
三、分布式集群搭建
hbase 集群的搭建如同hadoop一样,并不困难,解压完文件、修改环境变量、修改启动时候的配置文件,启动测试就ok了,下面一步步来说明,最后提供一键安装部署脚本。
hbase 版本的下载参考官网 http://mirrors.cnnic.cn/apache/hbase/ ,本文使用的版本为1.1.0.1/ 22-May-2015 02:20 -
。
3.1 安装 hbase
将下载下来的文件hbase-1.0.1-bin.tar.gz
,解压到 /home/hadoop/
目录下面 ,命令如下:
1 2
|
tar -zxvf hbase-1.0.1-bin.tar.gz -C /home/hadoop mv hbase-1.0.1 hbase # 重命名
|
3.2 配置环境变量
第一步操作后会存在/home/hadoop/hbase
这个目录,下面需要修改环境变量vim /etc/profile
,添加如下:
1 2 3 4
|
export PATH=$PATH:/home/hadoop/hbase/bin
# 使本次修改生效 source /etc/profile
|
3.3 hbase配置文件修改
hbase 相关的配置主要包括hbase-env.sh
、hbase-site.xml
、regionservers
三个文件,都在 /home/haoop/hbase/conf
目录下面:
3.3.1 修改 hbase-env.sh
主要是 JAVA_HOME、HADOOP_HOME、日志等的位置:
1 2 3 4 5 6 7 8
|
export JAVA_HOME=/opt/jdk1.7.0_75 export HBASE_CLASSPATH=/home/hadoop/hbase/conf # 此配置信息,设置由hbase自己管理zookeeper,不需要单独的zookeeper。 export HBASE_MANAGES_ZK=true export HBASE_HOME=/home/hadoop/hbase export HADOOP_HOME=/home/hadoop/hadoop-2.5.2 #Hbase日志目录 export HBASE_LOG_DIR=/home/hadoop/hbase/logs
|
3.3.2 修改 hbase-site.xml
xml 包含了几个关键的属性
属性 |
说明 |
hbase.rootdir |
hbase数据存储目录,/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。注意:需要和hadoop的core-site.xml中的文件保持一致 |
hbase.cluster.distributed |
是否分布式,单击和伪分布式需要设置为 false |
hbase.master |
指定master机器 |
hbase.zookeeper.quorum |
zk集群机器,多个英文逗号隔开,注意:必须是基数 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://master:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.master</name> <value>master:60000</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>master,slave1,slave2</value> </property> </configuration>
|
3.3.3 修改regionservers
添加HRegionServer的机器,目前为slave1和slave2两台,如下 vim /home/hadoop/hbase/conf/regionservers
上面这几步,需要在每台机器上面都执行下,执行完毕后,hbase集群就算搭建完了,因为机器一多,执行这些命令很是烦人,所以提供一键安装部署脚本,hbase_tar.zip
文件请访问百度网盘,密码为2a4g
,脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#!/bin/bash
# author: xirong # date : 2015-05-11
##### # hbase 的数据存储在hdfs中,所以依赖hadoop的环境,安装配置hbase环境需要搭建好的hadoop环境 # ####
# 解压文件 # unzip hbase.zip -d /home/hadoop/ # 赋予权限 sudo chown -R hadoop:hadoop /home/hadoop/hbase
sudo sed -i '$ a # hbase configuration' /etc/profile sudo sed -i '$ a export PATH=$PATH:/home/hadoop/hbase/bin' /etc/profile
source /etc/profile hbase version echo 'congratilations ,hbase has been installed on your machine!'
echo 'start change hbase-env.sh configuration ……' echo '# 添加环境变量' >> /home/hadoop/hbase/conf/hbase-env.sh echo 'export JAVA_HOME=/opt/jdk1.7.0_75' >> /home/hadoop/hbase/conf/hbase-env.sh echo 'export HBASE_CLASSPATH=/home/hadoop/hbase/conf' >> /home/hadoop/hbase/conf/hbase-env.sh echo 'export HBASE_MANAGES_ZK=true' >> /home/hadoop/hbase/conf/hbase-env.sh echo 'export HBASE_HOME=/home/hadoop/hbase' >> /home/hadoop/hbase/conf/hbase-env.sh echo 'export HADOOP_HOME=/home/hadoop/hadoop-2.5.2' >> /home/hadoop/hbase/conf/hbase-env.sh echo 'export HBASE_LOG_DIR=/home/hadoop/hbase/logs' >> /home/hadoop/hbase/conf/hbase-env.sh
echo 'finish hbase-env.sh and start change hbase-site.xml configuration ……' \cp -f /home/hadoop/hbase/conf/hbase-site.xml /home/hadoop/hbase/conf/hbase-site.xml.bak
sed -i '/<\/configuration>/d' /home/hadoop/hbase/conf/hbase-site.xml
sed -i '$ a <property>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <name>hbase.rootdir<\/name>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <value>hdfs:\/\/master:9000\/hbase<\/value>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <\/property>' /home/hadoop/hbase/conf/hbase-site.xml
sed -i '$ a <property>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <name>hbase.cluster.distributed<\/name>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <value>true<\/value>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <\/property>' /home/hadoop/hbase/conf/hbase-site.xml
sed -i '$ a <property>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <name>hbase.master<\/name>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <value>master:60000<\/value>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <\/property>' /home/hadoop/hbase/conf/hbase-site.xml
sed -i '$ a <property>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <name>hbase.zookeeper.quorum<\/name>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <value>master,slave1,slave2<\/value>' /home/hadoop/hbase/conf/hbase-site.xml sed -i '$ a <\/property>' /home/hadoop/hbase/conf/hbase-site.xml
sed -i '$ a <\/configuration>' /home/hadoop/hbase/conf/hbase-site.xml
echo 'finish hbase-site.xml configuration and start change regionservers ……' \cp -f /home/hadoop/hbase/conf/regionservers /home/hadoop/hbase/conf/regionservers.bak echo 'slave1' >> /home/hadoop/hbase/conf/regionservers echo 'slave2' >> /home/hadoop/hbase/conf/regionservers
echo 'congratilations ,all conf has been changed ! enjoy hbase !'
|
四、hbase集群测试
集群中所有节点完成上述HBase部署之后,即可启动HBase集群。启动顺序:hadoop-> hbase,如果使用自己安装的zookeeper启动顺序是:hadoop-> zookeeper-> hbase
停止顺序:hbase-> zookeeper-> hadoop。
hadoop 启动方法:$HADOOP_HOME/bin/start_all.sh
,jps 命令后看到hadoop的几个进程说明就是ok的,详情参考
zk 启动方法: sh $ZOOKEEPER_HOME/bin/zkServer.sh start
, 启动后可以查看 zk的状态 sh $ZOOKEEPER_HOME/bin/zkServer.sh status
,发现 leader或者Fowler,就说明是ok的,详情参考
hbase启动方法如下,执行jps
Java进程查看命令后,出现下面的情况就证明是ok的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
# master上启动,注意:只需要在master机器上面执行 start-hbase.sh就行,会自动启动slave1和slave2 [hadoop@master bin]$ start-hbase.sh slave1: starting zookeeper, logging to /home/hadoop/hbase/logs/hbase-hadoop-zookeeper-slave1.out slave2: starting zookeeper, logging to /home/hadoop/hbase/logs/hbase-hadoop-zookeeper-slave2.out master: starting zookeeper, logging to /home/hadoop/hbase/logs/hbase-hadoop-zookeeper-master.out starting master, logging to /home/hadoop/hbase/logs/hbase-hadoop-master-master.out slave2: starting regionserver, logging to /home/hadoop/hbase/logs/hbase-hadoop-regionserver-slave2.out slave1: starting regionserver, logging to /home/hadoop/hbase/logs/hbase-hadoop-regionserver-slave1.out localhost: starting regionserver, logging to /home/hadoop/hbase/logs/hbase-hadoop-regionserver-master.out [hadoop@master bin]$ jps 23598 HQuorumPeer 19655 JobHistoryServer 10397 ResourceManager 17688 DataNode 23651 HMaster 23814 Jps 18141 NodeManager 17597 NameNode
# slave1 验证 [hadoop@slave1 ~]$ jps 680 Jps 538 HRegionServer 14727 DataNode 14856 NodeManager
# slave2 验证 [hadoop@slave2 ~]$ jps 375 Jps 14555 NodeManager 32664 HRegionServer 14424 DataNode
|
五、hbase shell 操作
hbase提供的shell脚本就如果MySQL的一样,简单、强大,如下面例子中的几个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
[hadoop@master bin]$ hbase shell SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/hadoop/hbase/lib/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-2.5.2/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. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 2015-05-25 15:53:06,988 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 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):002:0> status 2 servers, 0 dead, 1.0000 average load
hbase(main):005:0> list TABLE 0 row(s) in 0.3430 seconds
|
这部分操作请参考如下文章,个人认为写的通俗易懂,还很全面,适合入门体验
【HBase基础教程】3、HBase Shell DDL操作
【HBase基础教程】4、HBase Shell DML操作
HBase shell的基本用法
六、hbase 实践优化