HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供相似于BigTable 规模的服务,能够存储海量稀疏的数据,并具有必定的容错性、高可靠性及伸缩性。主要应用场景是实时随机读写超大规模的数据。java
HBase在列上实现了BigTable论文提到的压缩算法、内存操做和布隆过滤器。HBase的表可以做为MapReduce任务的输入和输出,能够经过Java API来存取数据,也能够经过REST、Avro或者Thrift的API来访问。算法
HBase不能取代RDBMS,由于两者的应用场景不一样。HBase为了解决海量数据的扩展性,支持简单的增长节点来实现线性扩展,从而在集群上管理海量的非结构化或半结构化的稀疏数据。HBase仅能经过主键(raw key)或主键的range检索数据,支持单行事务。shell
上图描述Hadoop EcoSystem中的各层系统。其中,HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。数据库
此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的很是简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的很是方便。apache
在终端输入 java -version
来查看你机子上的 Java 版本;编程
Hadoop的具体安装能够参见咱们之前的课程:Hadoop部署及管理。须要注意的是伪分布模式下,HBase 的版本须要和 Hadoop版本 匹配
,否则极可能容易出错。你能够在HBase的lib目录下看到对应的Hadoop的Jar文件版本。vim
在这里,咱们使用了Hadoop V2.4.1版本以及HBase V0.98.11版本。ruby
Hadoop 2.4.1 目录位置在实验楼环境中的 /opt/hadoop-2.4.1
。bash
SSH的安装,在Hadoop部署及管理中也涵盖了这部份内容。SSH用来管理远程Hadoop和HBase守护进程。服务器
本实验环境下,为了你们的方便,咱们已经为你们准备好了这些必要条件,你只须要专一于HBase的安装配置便可。
确认上面的条件咱们都准备好了以后,就能够开始安装HBase了。实验开始前,你应该切换到 hadoop 用户:
$ su hadoop
HBase的安装一般分为3种模式:
单机模式的安装很是简单,几乎不用对安装文件作什么修改就可使用。单机模式下,HBase并不使用HDFS,所以将安装文件解压后就几乎能够直接运行。输入命令下载HBase:
$ sudo wget http://labfile.oss.aliyuncs.com/hbase-0.98.11-hadoop2-bin.tar.gz
hbase 其余下载源参考 : https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/hbase-1.4.9-bin.tar.gz
hbase 其余下载源参考 : https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/hbase-1.4.9-bin.tar.gz
再将其压缩包解压:
$ sudo tar zxvf hbase-0.98.11-hadoop2-bin.tar.gz
因为解压出来的文件名可能很长,建议修改成较短文件名,例如:
$ sudo mv hbase-0.98.11-hadoop2 /opt/hbase $ sudo chmod 777 /opt/hbase #授予权限
在运行以前,咱们须要对HBase进行相关配置。建议你们修改 ${HBase-Dir}/conf/hbase-site.xml 文件,由于即便你修改了hbase-default.xml文件,也会被hbase-site.xml中的配置所覆盖。也就是说,最终是以 hbase-site.xml 中的配置为准的。咱们作以下修改:
<configuration> <property> <name>hbase.rootdir</name> <value>file:///tmp/hbase-${user.name}/hbase</value> </property> </configuration>
注意:修改 ${user.name}
为你本身的 hadoop 用户名
伪分布模式是一个运行在单台机器上的分布式模式。此模式下,HBase全部的守护进程将运行在同一个节点之上,并且须要依赖HDFS,所以在此以前必须保证HDFS已经成功运行,请参考咱们前面的课程:Hadoop伪分布模式配置部署。确认无误后,咱们就能够开始配置HBase的参数了。
(1)配置 hbase-site.xml 文件
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration>
hbase.rootdir:该参数制定了HReion服务器的位置,即数据存放的位置。主要端口号要和Hadoop相应配置一致。
hbase.cluster.distributed:HBase的运行模式。false是单机模式,true是分布式模式。若为false, HBase和Zookeeper会运行在同一个JVM里面。默认为false.
(2)设置环境变量
另外,咱们须要设置一些环境变量。修改HBase下的conf目录中的hbase-env.sh文件(你的jdk路径可能不同):
export JAVA_HOME=/usr/local/jdk1.7.0_67 export HBASE_MANAGES_ZK=true
export HBASE_MANAGES_ZK=true
此配置信息,表示设置由hbase本身管理zookeeper,不须要单独的zookeeper, 本文搭建的 Hbase 用的是自带的 zookeeper,故设置为true.
最后修改添加PATH, 则输入:
$ sudo vim /etc/profile
来修改 /etc/profile 文件:
# set hbase path export HBASE_HOME=/opt/hbase export PATH=$PATH:/opt/hbase/bin
因为彻底分布模式须要多台机器,在这里咱们就不给出演示了。
正如上面咱们提到的,HBase安装分为3个模式,所以HBase的运行天然也分为一样的3个模式。
(1)启动
单机模式下不须要HDFS,所以不须要事先启动Hadoop,直接启动HBase便可。终端下输入命令:./start-hbase.sh
注意:路径要正确,应为:$HBASE_HOME/bin 目录,不然会找不到 start-hbase.sh 这个文件,就会出现错误
(2)查看进程
咱们能够经过 jps
来查看当前 HBase 的进程:
(3)中止 HBase 服务
输入 ./stop-hbase.sh
(1)启动和查看进程
前面咱们提到过,伪分布模式下,必须先确保 HDFS 已经启动。所以,咱们先启动 HDFS,输入命令: ./start-all.sh
使用 jps
查看目前 Hadoop 的进程:
HDFS 成功启动以后,咱们再启动 HBase,这里和单机模式下启动 HBase 的方法同样,输入命令: ./start-hbase.sh
:
此时再使用 jps
查看,能够看到多了HBase的相关进程:
(2)进入 HBase Shell
经过HBase Shell用户能够方便地建立、删除以及修改表,还能够向表中添加数据、列出表中的相关相信等。
输入 help
来查看其所支持的命令,能够根据本身的须要选择。
exit
退出shell
(3)中止 HBase
根据依赖关系,咱们须要先关闭HBase, ./stop-hbase.sh
:
经过 jps
能够看到,HBase相关的进程没有了:
再关闭HDFS, ./stop-all.sh
.
最后,再经过 jps
发现 HDFS 的进程也没有了:
实例配置:
[root@hadoop000 conf]# cat hbase-site.xml <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://hadoop000:8020/hbase</value> //这个端口必须与hadoop core-site.xml 配置文件下 端口匹配 </property> <property> <name>hbase.master.info.port</name> <value>60010</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> </configuration>
[root@hadoop000 conf]# cat hbase-env.sh ***** export JAVA_HOME=/home/JDK/jdk1.8.0_181 export HBASE_MANAGES_ZK=true *****
[root@hadoop000 conf]# cat regionservers hadoop000
成功启动后 验证
[root@hadoop000 hadoop]# jps
15760 ResourceManager
19235 Jps
15461 DataNode
18426 HQuorumPeer
15851 NodeManager
15340 NameNode
18493 HMaster
18621 HRegionServer
15614 SecondaryNameNode