HBase介绍及使用

Apache HBase简介

Apache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储。

当您需要对大数据进行随机,实时读/写访问时,请使用Apache HBase™。HBase是一个分布式的、面向列的开源数据库,该技术来源于Fay Chang所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系型数据为,它是一个适合于非结构数据存储的数据库。另一个不同的是HBase是基于列的而不是基于行的模式。

官网地址:http://hbase.apache.org/

HBase架构

在这里插入图片描述
角色关系:

角色 说明
Client 发起HBase读写请求的客户端
Zookeeper 记载了HBase的元数据信息,其中主要是-ROOT-表所在的位置信息
HMaster 用于分配RegionServer的Region,负载均衡等作用
HRegionServer Hbase集群的一个服务器
HLog HBase日志,用于保证数据的完整性
HRegion 相当于一个表
Store 抽象的表示,表示字段的存储
MemStore 内存的存储
StoreFile 字段数据具体存在的文件
HFile 当发生溢写时,生成的文件,此文件会通过DFS Client发送到HDFS
DataNode HDFS上具体存储数据的地方

Apache HBase是构建在HDFS之上的一个组件,快速的读/写访问可以满足大数据读/写的实时性,解决了HDFS存储文件的实时性问题。

当读取数据时,HBase首先会从Zookeeper集群中获取元数据信息,以便定位数据所在的HRegion,如果MemStore存在数据,则直接返回。

当写入数据时,首先会把数据写入到StoreFile中,当StoreFile达到一定的阈值时,会溢写到HDFS中,溢写成功后,会把StoreFile文件清空。先经过StoreFile的存储是为了避免频繁访问HDFS文件太系统,提高存储性能。

下面再对HBase的读/写进行更详细的分析。

HBase读取数据流程

在这里插入图片描述
步骤:

  1. HBase客户端发出读取请求,先访问zk集群;
  2. zk集群返回-ROOT-表的位置信息;
  3. HBase客户端根据zk集群返回的信息找到-ROOT-表,一个-ROOT-表只能存储在一个HRegion中,不可切分,.-ROOT-记录了.META表的Region信息
  4. 通过-ROOT-表再找到.META表的元数据信息,.META表记录了用户创建的表的Region信息,.META可以有多个Region
  5. 从 .META表中获取要查询的数据的元数据信息;
  6. 根据.META返回的元数据信息,找到对应的HRegion;
  7. HRegion返回数据到客户端。

上图中描述了一个HBase客户端发起读取请求后的整体流程,下面再具体讲解一个如何从HRegion获取要查询的数据。
在这里插入图片描述
Memstore是内存写入缓存,BlockCache是内存读取缓存。

HBase在写入数据时,首先会把数据写入到Memstore中,达到一个阈值后会溢写到HDFS生成HFile文件。
当HBase读取数据时,如果从HDFS获取数据,首先会缓存到BlockCache中,然后再返回给客户端。

步骤分析:

  1. HBase客户端请求获取数据,首先从Memstore查找数据;
  2. 因为没有达到阈值之前,要写入的数据还会在Memstore中,所以,如果此时再读取,可以马上查找并返回。因为没有达到阈值之前,要写入的数据还会在Memstore中,所以,如果此时再读取,可以马上查找并返回;
  3. 当Memstore没有查找到数据时,代表数据可能已溢写到hdfs中,此时先查找一下BlockCache,BlockCache是读取缓存,如果要读取的数据之前从HDFS中读取过,会在BlockCache中缓存下来,此时查找就可能会查找到结果并立即返回;
  4. 当在BlockCache没有查找到数据时,此时才会从HDFS中查找数据;
  5. 当从HDFS查找到数据后,首先会把数据缓存到BlockCache;
  6. 然后再从BlockCache返回数据到HBase客户端。

注意,上面的Memstore,BlockCache和HFile都是分布式存储

HBase写入数据流程

在这里插入图片描述
步骤分析:

  1. HBase客户端请求zk集群获取表元数据;
  2. zk集群返回表的元数据信息,-ROOT-和.Meta表的元数据;
  3. HBase客户端通过-ROOT-和.Meta表的元数据获取到可以写入数据的Region,并通过RPC协议与RegionServer进行交互;
  4. 数据首先写入到HLog中,HLog是为了防止数据丢失,以便使数据可恢复,保证数据的完整性;
  5. 然后再写入到Memstore,Memstore默认大小是16kb;
  6. 当Memstore存储满后,会溢写到HFile中,至此,HBase写数据完成。

HBase安装部署

  1. 下载安装包,目前稳定版为1.4.9
    https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/
  2. 上传到服务器并解压
  3. 修改conf/hbase-env.sh文件
export JAVA_HOME=
export HBASE_MANAGES_ZK=false
  1. 修改conf/hbase-site.xml文件
<configuration>
        <!--设置namenode所在的位置,通过rootdir设置-->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://hd-even-01:9000/hbase</value>
        </property>
        <!--是否开启集群-->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <!--0.98版本后的新改动,之前没有port参数,默认端口为60000-->
        <property>
                <name>hbase.master.port</name>
                <value>16000</value>
        </property>
        <!--zookeeper集群的位置,如果使用zookeeper集群,需要把env.sh脚本中的HBASE_MANAGES_ZK设置为false-->
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>hd-even-01:2181,hd-even-02:2181,hd-even-03:2181</value>
        </property>
        <!--hbase的元数据存储在zookeeper集群中,值是zookeeper指定的dataDir-->
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/home/even/hd/zookeeper-3.4.10/zkData</value>
        </property>
</configuration>

  1. 修改conf/regionservers,添加作为regionservers的主机
# 虽然本次配置把hd-even-01作为region-master,而region-master也可以作为regionserver使用,所以此处也添加进去
hd-even-01
hd-even-02
hd-even-03
  1. 解决依赖包问题
# hbase需要依赖hadoop和zookeeper,因此,lib目录下需要有hadoop和zookeeper相关的包,默认情况下已包含,但需要根据自己安装的hadoop和zookeeper进行修改
cd hbase/lib
rm -f hadoop-*
rm -f zookeeper-*
#然后把自己使用的hadoop和zookeeper相关jar包拷贝过来。
  1. 把hadoop的配置软连接到hbase/conf中,hbase是构建在hadoop的hdfs之上的,所以需要hadoop的配置
# 根据自己的实际情况
ln -s /hadoop/core-site.xml /hbase/conf
ln -s /hadoop/hdfs-site.xml /hbase/conf
  1. 启动集群
# 启动master-server,推荐使用hbase-daemon.sh命令
bin/hbase-daemon.sh start master
# 启动regionserver
bin/hbase-daemon.sh start regionserver
  1. 启动终端
bin/hbase shell

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值