Hbase/Hive知识概要

本文深入探讨了HBase和Hive两大分布式数据存储系统。HBase作为列式存储数据库,具备高并发、海量存储和高可靠性的特点,适合实时读写和大数据处理。文章详细阐述了HBase的架构原理,包括region的分配、读写流程、flush和compact机制,以及优化策略。同时,介绍了Hive作为数据仓库工具,如何将SQL转化为MapReduce任务,其优缺点以及与数据库的对比。此外,还讨论了Hive的表类型、数据加载、查询优化和元数据管理等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、HBase

1、HBase特点

Hbase是构建在HDFS上的分布式数据库,提供 高可靠性 、 高性能 、 列存储 、 可伸缩 、 实时读写 的分布式数据库系统。HBase主要用于大数据领域,MySQL 是行式存储,HBase 是列式存储。

  • HBase 是一种构建在 HBase 之上的分布式、面向列的存储系统,需要实时读写、随机访问超大规模数据集时,可以使用HBase。

  • HDFS不支持小文件,不支持并发写,不支持文件随机修改,查询效率也低 。HBase 却是一个支持百万级别高并发写入,支持实时查询,适合存储稀疏数据的分布式数据库系统。

(1)海量存储、扩展性强、高可靠性

· 海量存储:
HBase 单表可以有百亿行、百万列,可以在横向和纵向两个维度插入数据,具有很大的弹性。

  • 当关系型数据库的单个表的记录在亿级时,查询和写入的性能都会呈现指数级下降,这种庞大的数据量对传统数据库来说是一种灾难,而HBase 在限定某个列的情况下对于单表存储百亿甚至更多的数据都没有性能问题;
  • HBase 采用 LSM 树作为内部数据存储结构,这种结构会周期性地将较小文件合并成大文件,以减少对磁盘的访问。

· 扩展性强:
依赖HDFS,当磁盘空间不足的时候,只需要动态增加datanode节点就可以了,可以通过增加服务器来对集群的存储进行扩容;

  • HBase工作在 HDFS 之上,理所当然地支持分布式表,也继承了 HDFS 的可扩展性。HBase
    的扩展是横向的,横向扩展是指在扩展时不需要提升服务器本身的性能,只需添加服务器到现有集群即可。
  • HBase表根据 Region大小进行分区,分别存在集群中不同的节点上,当添加新的节点时,集群就重新调整,在新的节点启动 HBase 服务器,动态地实现扩展。这里需要指出,HBase 的扩展是热扩展,即在不停止现有服务的前提下,可以随时添加或者减少节点。

· 高可靠性
HBase运行在 HDFS 上,HDFS 的多副本存储可以让它在岀现故障时自动恢复,同时 HBase 内部也提供 WAL 和 Replication 机制。

  • WAL(Write-Ahead-Log)预写日志,是在 HBase服务器处理数据插入和删除的过程中用来记录操作内容的日志,保证了数据写入时不会因集群异常而导致写入数据的丢失;而 Replication 机制是基于日志操作来做数据同步的。
  • 当集群中单个节点出现故障时,协调服务组件ZooKeeper通知集群的主节点,将故障节点的 HLog 中的日志信息分发到各从节点进行数据恢复。
(2)列式存储、稀疏性、数据多版本、数据类型单一

· 列式存储:
-HBase表的数据是基于列族进行存储的,列族是在列的方向上的划分,每个列族是单独存储的,且支持基于列的独立检索。
· 稀疏性:
主要是针对HBase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的,在很大程度上节省了存储开销。
· 数据多版本
表中数据可以有多个版本值,默认情况下是根据版本号去区分,版本号就是插入数据的时间戳
· 数据类型单一
所有的数据在HBase中是以字节数组进行存储

·(3)高并发:支持高并发的读写请求

·启动时,需要提前启动HDFS及 ZooKeeper集群

2、架构原理

HMaster -> HRegionServer -> Region

rowkey行键 -> Column Family列族 -> Column列 -> cell单元格 -> Timestamp时间戳

·(1)Client客户端 :Client是操作HBase集群的入口

  • 管理类 操作请求,如表的增删改操纵,Client通过RPC与HMaster通信完成;

  • 表数据 读写操作请求,Client通过RPC与RegionServer交互,读写数据;

  • Client类型:HBase shell、Java编程接口、Thrift、Avro、Rest等等;

·(2)ZooKeeper集群

  • 实现了HMaster的高可用,多HMaster间进行主备选举;
  • 保存HBase元数据信息meta表, 元数据region的寻址入口 ;
  • 对HMaster和HRegionServer实现了监控,上下线;

·(3)HMaster:region的分配维护,表的请求相应

  • 关于Table:响应Client对Table的增删改请求的操作

  • 关于Region:

    • 新Region分配到指定的HRegionServer上;
    • 维护HRegionServer间的负载均衡 ;
    • HRegionServer宕机后,负责 region 迁移;

·(4)HRegionServer,表的读写,region的

  • 响应客户端的读写数据请求;
  • 负责管理master为其分配的Region;
  • Region的拆分,storefile合并;
  • 与HDFS底层交互,存储数据;

·(5)Region:HBase集群中分布式存储的最小单元

  • Region是HBase集群中分布式存储的最小单元,一个Region对应一个Table表的部分数据。

  • memstore是一块 内存区域,写入的数据会先写入memstore进行缓冲,然后再把数据刷到磁盘;

  • StoreFile是HFile的抽象对象,如果说到StoreFile就等于HFile,每次memstore刷写数据到磁盘,就生成对应的一个新的HFile文件出来

一个HRegionServer会负责管理很多个region ,一个region包含很多个store,一个列族就划分成一个store,一个store里面只有一个memstore,有很多个 StoreFile ,最后数据是以很多个 HFile 这种数据结构的文件保存在HDFS上。

在这里插入图片描述

3、读写过程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Hbase读数据

  • 1、客户端首先与zk进行连接,从zk找到包含meta表的HRegionServer,连接此包含HRegionServer,读取meta表中的数据;
  • 2、根据要查询信息,先找到数据对应的region信息,在找到这个region对应的regionServer,然后发送请求
  • 3、查找并定位到对应的region,
  • 4、先从memstore查找数据—如果没有从BlockCache上读取----如果也没有再到StoreFile上进行读取。
  • 5、从storeFile中读取到数据之后,不是直接把结果数据返回给客户端,而是把数据先写入到BlockCache中,目的是为了加快后续的查询;然后在返回结果给客户端。

Hbase写数据

  • 1、客户端首先与zk进行连接,从zk找到zk找到meta表的region位置,即包含meta表的HRegionServer,连接此包含HRegionServer,读取meta表中的数据;
  • 2、根据要查询信息,先找到数据对应的region信息,在找到这个region对应的regionServer,然后发送请求
  • 3、查找并定位到对应的region,
  • 4、写数据时,把数据分别写到HLog 和memstore各一份进行缓冲,
  • 5、flush:memstore达到阈值后,把数据刷到磁盘生成多个storeFile文件。
    • Region中任意一个memstore达到128MB
    • Region中所有Memstore的大小总和达到block.multiplier * flush.size
    • Region Server中HLog数量达到上限
  • 6、compact:
    • 小合并:小的store file合并成相对较大的store file&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值