入门学习HBase—Hadoop生态圈(八)

一、安装HBase

       HBase安装地址:HBase安装


二、了解NoSQL

2.1 概念

  • NoSQL:not only SQL,非关系型数据库
  • NoSQL是一个通用术语
    • 指不遵循传统RDBMS模型的数据库
    • 数据是非关系的,且不使用SQL作为主要查询语言
    • 解决数据库的可伸缩性和可用性问题
    • 不针对原子性和一致性问题

2.2 对比RDBMS

在这里插入图片描述

2.3 NoSQL与大数据

  • NoSQL与大数据相关性较高,但是NoSQL != 大数据
    • NoSQLchanpin是为了帮助解决大数据 存储问题,但是大数据不仅仅包含数据存储问题
    • 通常大数据场景采用列存储数据库(e.HBase)

三、HBase概述

  • HBase是一个领先的NoSQL数据库
    • 是一个面向列存储的NoSQL数据库
    • 是一个分布式Hash Map,底层数据是key-value格式
    • 基于Google Big Table论文
    • 使用HDFS作为存储并利用其可靠性
  • HBase特点
    • 数据访问速度快,响应时间约2~20毫秒
    • 支持随机读写,每个节点20k~100k+ ops/s
    • 可扩展性,可扩展20000+节点
    • 高并发

四、HBase架构原理

        HBase也是 Master/slaves架构,由一个HMaster,多个 HResgionServer组成。

在这里插入图片描述

4.1 HBase架构及相关功能

  • Client:客户端,包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息;可以是 HBase Shell、 Java API客户端、 RestAPI等;
  • ZooKeeper:HBase通过 ZooKeeper来做 HMaster的高可用、 HRegionServer的监控、元数据的入口以及集群配置的维护等工作;
  • HMaster
    • 监控 HRegionServer,处理 HRegionServer故障转移,当某个HRegionServer挂掉时,ZooKeeper会将分配在该HRegionServer上的 HRegion分配到其他HRegionServer上进行管理;
    • HRegion分裂后,负责新的HRegion的分配;
    • 处理元数据的变更,比如对表的添加,修改,删除等操作;
    • 在空闲时间进行数据的负载均衡,主要就是在HRegionServer间迁移HRegion,达到负载均衡;
    • 通过 ZooKeeper发布自己的位置给客户端;
  • HRegionServer:HRegionServer直接负责用户的读写请求,是真正的“干活”的节点;
    • 负责和底层HDFS的交互,存储数据到HDFS,HBase是依托于HDFS的 NoSQL数据库,数 据会存储在 HDFS上;
    • 处理分配给它的 HRegion;
    • 刷新缓存到 HDFS;
    • 维护HLog(HLog是一个容错机制)
    • 处理来自客户端的读写请求。HRegionServer是实际管理数据的,所以客户端的读写请求最终都要由HRegionServer来处理;
    • 负责处理 HRegion变大后的拆分;
    • 负责 StoreFile的合并工作;
  • HDFS:HDFS为 HBase提供最终的底层数据存储服务,同时为 HBase提供高可用HLog存储在 HDFS)的支持,具体功能概括如下:
    • 提供元数据和表数据的底层分布式存储服务;
    • 数据多副本,保证的高可靠和高可用性;
  • HRegion :HRegion可以看成是表的横向切分, HBase表的分片, HBase每个表都会根据RowKey值被切分成不同的HRegion分散存储在HRegionServer中,在一个HRegionServer中可以有多个不同的HRegion;值得注意的是,一个 HRegion只能在一个 HRegionServer上 ,不能跨多个HRegionServer;
    在这里插入图片描述
  • Write Ahead Logs:也叫预写日志上,在 HBase中为HLog HLog存储在HDFS;当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据在写入内存之前会先写在一个叫做Write Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。 需要注意的是,HLog是每一个RegionServer对应一个
  • Store:每一个Region内部,又分为多个Store,一个Store对应表中的一个列族。也就是说一个Store存储了对应表该列族下的部分数据;
  • MemStore:顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,HRegsionServer会在内存中存储键值对;
  • HFile:这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以HFile的形式存储在 HDFS的。文件内容是二进制;

4.2 HBase数据存储结构

        HBase是稀疏的,稀疏主要是针对HBase列的灵活性,在列族中你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的 。HBase底层存储的数据是KeyValue格式的数据。这一块内容在hbase shell插入数据部分有详细的解释。 HBase逻辑上也可以看成一个二维表格,可以添加行,可以动态添加列。

  • RowKey
    • 决定一行数据,按行检索数据,相当于一级索引;
    • 按照字典顺序排序的,说明数据是有序的;
    • 只能存储64k的字节数据,RowKey越短越好
  • Column Family(列族)
    • 列族是HBase对表在纵向上的优化;
    • 列族在在物理存储上对应于HDFS上的 一个目录; HBase表中的每个列,都归属于某个列族。列族是表的 schema的一部分 (而列不是 ),必须在使用表之前定义 (也就是创建表时定义 ).列名都以列族作为前缀;
    • 每一个列族对应一个Store,也对应 HDFS一个目录,类似于 Hive分区操作一样, HBase相当于按列族进行了分区;
  • cell(单元格)
    • cell由行和列的坐标交叉决定;
    • 单元格是有版本的;
    • cell的内容是未解析的字节数组;
    • cell由{row key, column( = +), version} 唯一确定的单元;
    • cell中的数据是没有类型的,全部是字节码形式存贮;
  • Time Stamp(时间戳)
    • 在HBase每个cell存储单元对同一份数据可以有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面;
    • 时间戳的类型是 64位整型,一般由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳;

4.3 HBase原理

a.元数据存储

         HBase中有一个系统表 hbase:meta存储 HBase元数据信息,可以在HBase Web UI查看到相关信息,如下图:

在这里插入图片描述
该表记录保存了每个表的Region地址,还有一些其他信息,例如Region的名字,对应表的名字,开始行键,结束行键 ,服务器的信息。 hbase:meta表中每一行对应一个单一的Region。数据如下图:

在这里插入图片描述


PS:如果有写错或者写的不好的地方,欢迎各位大佬在评论区留下宝贵的意见或者建议,敬上!如果这篇博客对您有帮助,希望您可以顺手帮我点个赞!不胜感谢!

原创作者:wsjslient

作者主页:https://blog.csdn.net/wsjslient


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值