一、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随机读写性能测试 hbase支持数据的随机读写_大数据

举例说明

Hbase随机读写性能测试 hbase支持数据的随机读写_大数据_02

二、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

Hbase随机读写性能测试 hbase支持数据的随机读写_Hbase随机读写性能测试_03

访问 http://zkh02:60030/rs-status

Hbase随机读写性能测试 hbase支持数据的随机读写_数据_04

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