一、HBase是什么
- HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。
- HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了Hadoop的文件系统(HDFS)提供的容错能力。
- 它是Hadoop的生态系统,提供对数据的随机实时读/写访问,是Hadoop文件系统的一部分。
- 人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。 HBase在Hadoop的文件系统之上,并提供了读写访问。
- hbase单表可以有百亿行,百万列,数据矩阵横向和纵向两个纬度所支持的数量级都非常具有弹性
- 一张表列簇不会超过5个,每个列簇中的列数没有限制,列只有插入数据后存在,列在列簇中是有序的
hbase的特性
面向列 实时动态增加列
多版本 每一列的数据存储多个版本
稀疏性 为空的列并不占用存储空间,表可以设计的非常稀疏
扩展性 底层依赖于HDFS
高可靠性 wal 机制保证了数据写入时不会因集群异常而导致写入数据丢失;底层HDFS本身也有备份
HBase 和 HDFS
HDFS | HBase |
HDFS是适于存储大容量文件的分布式文件系统。 | HBase是建立在HDFS之上的数据库。 |
HDFS不支持快速单独记录查找。 | HBase提供在较大的表快速查找 |
它提供了高延迟批量处理;没有批处理概念。 | 它提供了数十亿条记录低延迟访问单个行记录(随机存取)。 |
它提供的数据只能顺序访问。 | HBase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。 |
HBase的存储机制
HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:
- 表是行的集合。
- 行是列族的集合。
- 列族是列的集合。
- 列是键值对的集合。
HBASE架构设计模型
举例说明
二、HBase安装和搭建
1.下载解压安装
#下载cdh版本
wget http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.9.3.tar.gz
# 解压安装包
tar xf hbase-1.2.0-cdh5.9.3.tar.gz -C /opt/
mv hbase-1.2.0-cdh5.9.3 /opt/hbase
# 创建目录
mkdir -p /opt/hbase/{log,pid,tmp}
2、配置 HBase 环境变量
#编辑文件/etc/profile.d/hbase.sh。
# HBASE ENV
export HBASE_HOME=/opt/hbase
export PATH=$PATH:$HBASE_HOME/bin
#使HADOOP环境变量生效
source /etc/profile.d/hbase.sh
3.配置 hbase-env.sh
编辑 /opt/hbase/conf/hbase-env.sh
export JAVA_HOME=JAVA_HOME=/usr/java/jdk1.8.0_11
export HBASE_CLASSPATH=/opt/hadoop/etc/hadoop
export HBASE_LOG_DIR=/home/hbase/log
export HBASE_PID_DIR=/home/hbase/pid
export HBASE_MANAGES_ZK=false
#如果ssh端口不是22,需要添加以下参数
#export HBASE_SSH_OPTS="-p 40022"
#以下参数依照服务器配置修改
export HBASE_HEAPSIZE=2G
export HBASE_OFFHEAPSIZE=1G
4.配置region服务器 regionservers
编辑文件/opt/hbase/conf/regionservers
,修改为如下。
zkh01
zkh02
zkh03
5、配置列式存储 hbase-site.xml
编辑文件/opt/hbase/conf/hbase-site.xml
,修改为如下。
<configuration>
<!--本地文件系统的临时文件夹,可以修改为一个更为持久的目录-->
<property>
<name>hbase.tmp.dir</name>
<value>/opt/hbase/tmp</value>
</property>
<!--region服务器的共享目录,用来持久存储HBase的数据 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://ns/hbase</value>
</property>
<!--HBase集群的运行模式,false表示单机模式,true表示集群模式-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--HBase Master应该绑定的端口-->
<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>
<!--HBase RegionServer绑定的端口-->
<property>
<name>hbase.regionserver.port</name>
<value>60020</value>
</property>
<!--HBase RegionServer的Web UI服务端口-->
<property>
<name>hbase.regionserver.info.port</name>
<value>60030</value>
</property>
<!--zookeeper集群的ip地址-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.67.101:2181,192.168.67.102:2181,192.168.67.103:2181</value>
</property>
<!--ZooKeeper的zoo.cfg配置文件中的属性,ZooKeeper面向客户端服务的端口-->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<!--ZooKeeper会话超期时间-->
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<!--ZooKeeper的zoo.cfg配置文件中的属性,ZooKeeper集群中单个节点接收的单个客户端请求的并发数-->
<property>
<name>hbase.zookeeper.property.maxClientCnxns</name>
<value>300</value>
</property>
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase</value>
</property>
</configuration>
6.将配置好的安装包复制到其他节点
scp -r hbase junesu@zkh02:/opt
scp -r hbase junesu@zkh03:/opt
三、HBase 启动
1.在zkh01执行
/opt/hbase/bin/start-hbase.sh
2、检查 HBase
[junesu@zkh01 opt]$ jps
11200 HRegionServer
1553 DataNode
1442 NameNode
1958 DFSZKFailoverController
25625 Jps
11067 HMaster
1757 JournalNode
3、HBase 的 WEB 界面
访问 http://zkh01:60010/master-status
访问 http://zkh02:60030/rs-status
4、进入 hbase shell 验证
[junesu@zkh01 ~]# hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/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.6, rUnknown, Mon May 29 02:25:32 CDT 2017
hbase(main):001:0> list
TABLE
0 row(s) in 0.2210 seconds
=> []
hbase(main):002:0> status
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load