一、Hbase简介
HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问,是Google的BigTable的开源实现。HBase的目标是存储并处理大型的数据,更具体地说仅用普通的硬件配置,能够处理成千上万的行和列所组成的大型数据库。
HBase是一个开源的、分布式的、多版本的、面向列的存储模型。可以直接使用本地文件系统也可使用Hadoop的HDFS文件存储系统。为了提高数据的可靠性和系统的健壮性,并且发挥HBase处理大型数据的能力,还是使用HDFS作为文件存储系统更佳。另外,HBase存储的是松散型数据,具体来说,HBase存储的数据介于映射(key/value)和关系型数据之间。如下图所示,HBase存储的数据从逻辑上看就是一张很大的表,并且它的数据列可以根据需要动态增加。每一个cell中的数据又可以有多个版本(通过时间戳来区别),从下图来看,HBase还具有“向下提供存储,向上提供运算”的特点。
二、Hbase安装概述
- 配置hosts,确保涉及的主机名均可以解析为ip。
若已经安装部署好hadoop,则此步已经完成。 - 编辑hbase-env.xml。
- 编辑hbase-site.xml。
- 编辑regionservers文件。
- 把Hbase复制到其它节点。
- 启动Hbase。
- 验证启动。
三、安装步骤
- 配置hosts,确保涉及的主机名均可以解析为ip。
[hadoop@master ~]$ cat /etc/hosts 10.10.18.229 master 10.10.18.221 slave01 10.10.19.231 slave02 10.10.19.232 slave03 10.10.18.230 slave04
- 下载安装包并解压
[hadoop@master ~]$ wget http://www-us.apache.org/dist/hbase/stable/hbase-1.2.5-bin.tar.gz [hadoop@master ~]$ tar xvf hbase-1.2.5-bin.tar.gz
- 编辑环境变量
#添加 [hadoop@master hbase-1.2.5]$ vim ~/.bash_profile export HBASE_HOME=/home/hadoop/hbase-1.2.5 export PATH=$PATH:$HBASE_HOME/bin
- 编辑hbase-env.xml
主要是添加JAVA_HOME环境变量export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64
- 编辑hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> #设置hbase数据库存放数据的目录 <value>hdfs://master:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> #打开hbase分布模式 <value>true</value> </property> <property> <name>hbase.master</name> #指定hbase集群主控节点 <value>master:60000</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>master,slave01,slave02,slave03,slave04</value> #指定zookeeper集群节点名,因为是由zookeeper表决算法决定的 </property> <property> <name>hbase.zookeeper.property.dataDir</name> #指zookeeper集群data目录 <value>/home/hadoop/hbase-1.2.5/zookeeper</value> </property> </configuration>
- 编辑regionservers文件
[hadoop@master conf]$ cat regionservers slave01 slave02 slave03 slave04
- 将修改的hbase目录同步其它节点
[hadoop@master ~]$ scp -r hbase-1.2.5 slave01:~/ [hadoop@master ~]$ scp -r hbase-1.2.5 slave02:~/ [hadoop@master ~]$ scp -r hbase-1.2.5 slave03:~/ [hadoop@master ~]$ scp -r hbase-1.2.5 slave04:~/
- 启动/关闭Hbase数据库集群
#启动hbase之前必需检查hadoop是否已经启动 [hadoop@master ~]$ hdfs dfsadmin -report |less Configured Capacity: 9508728098816 (8.65 TB) Present Capacity: 7003711967546 (6.37 TB) DFS Remaining: 5616475771026 (5.11 TB) DFS Used: 1387236196520 (1.26 TB) DFS Used%: 19.81% Under replicated blocks: 137 Blocks with corrupt replicas: 0 Missing blocks: 0 Missing blocks (with replication factor 1): 0 ------------------------------------------------- Live datanodes (4): ... #启动Hbase集群 [hadoop@master conf]$ start-hbase.sh slave01: starting zookeeper, logging to /home/hadoop/hbase-1.2.5/bin/../logs/hbase-hadoop-zookeeper-slave01.out slave03: starting zookeeper, logging to /home/hadoop/hbase-1.2.5/bin/../logs/hbase-hadoop-zookeeper-slave03.out master: starting zookeeper, logging to /home/hadoop/hbase-1.2.5/bin/../logs/hbase-hadoop-zookeeper-master.out slave04: starting zookeeper, logging to /home/hadoop/hbase-1.2.5/bin/../logs/hbase-hadoop-zookeeper-slave04.out slave02: starting zookeeper, logging to /home/hadoop/hbase-1.2.5/bin/../logs/hbase-hadoop-zookeeper-slave02.out starting master, logging to /home/hadoop/hbase-1.2.5/logs/hbase-hadoop-master-master.out slave01: starting regionserver, logging to /home/hadoop/hbase-1.2.5/bin/../logs/hbase-hadoop-regionserver-slave01.out slave03: starting regionserver, logging to /home/hadoop/hbase-1.2.5/bin/../logs/hbase-hadoop-regionserver-slave03.out slave02: starting regionserver, logging to /home/hadoop/hbase-1.2.5/bin/../logs/hbase-hadoop-regionserver-slave02.out slave04: starting regionserver, logging to /home/hadoop/hbase-1.2.5/bin/../logs/hbase-hadoop-regionserver-slave04.out #可以看到在master上多了两个进程HQuorumPeer和HMaster [hadoop@master conf]$ jps 13154 Jps 46355 ResourceManager 9736 RunJar 45787 NameNode 46090 SecondaryNameNode 12668 HMaster 8641 JobHistoryServer 12559 HQuorumPeer #在slave节点上也多了两个进程:HQuorumPeer和HRegionServer [hadoop@master conf]$ ssh slave01 Last login: Thu May 4 17:31:40 2017 from master [hadoop@slave01 ~]$ jps 13244 DataNode 15944 NodeManager 5688 HQuorumPeer 6057 Jps 5800 HRegionServer
- 查看Hbase状态
#进入Hbase shell [hadoop@master conf]$ hbase shell SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/hadoop/hbase-1.2.5/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.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] HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 1.2.5, rd7b05f79dee10e0ada614765bb354b93d615a157, Wed Mar 1 00:34:48 CST 2017 #可以看到,当前存在一个活动master主机,3台regionserver主机,貌似还少一台。后来发现是因为regionserver主机时间与master主机不同步,时间比master主机早了导致的。 hbase(main):001:0> status 1 active master, 0 backup masters, 3 servers, 0 dead, 0.3333 average load #安装配置ntp服务后,4个regionserver都存在了 hbase(main):001:0> status 1 active master, 0 backup masters, 4 servers, 0 dead, 0.5000 average load