HBase你需要知道的重点

1.什么是HBase? Hadoop DataBase

HBase 概念:

   开源的、高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库 --思想来源Google是BigTable论文 利用HDFS作为文件存储系统、Zookeeper作为分布式协同服务

利用HBase技术可在廉价PC Server上搭建起大规模结构存储集群。

  它介于Nosql和RDBMS之间,仅能通过主键(Row key)和主键的Range来检索数据,仅支持单行事务(可通过Hive支持来实现多表Join等复杂操作)。

主要用来存储结构化和半结构化的松散数据。

Hbase查询数据功能很简单,不支持join  等复杂操作,不支持复杂的事务(行级的事务)

Hbase中支持的数据类型:byte[] (字节 、 字符串)

与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力

2 、HBase的特点、优缺点

HBase是一个开源的分布式列存储数据库,具有以下特点:

特点:

1. 分布式存储:HBase可以在大规模的服务器集群上存储海量数据,数据可以分布在不同的节点上。

2. 数据模型:HBase采用列族的设计模型,可以灵活地增加和修改列族和列,有利于存储非结构化或半结构化的数据。

3. 高可靠性:HBase可以自动地进行数据备份和恢复,提供了高可用性的数据访问方式。

4. 高性能:HBase采用了基于内存的数据访问方式,可以快速地进行数据访问和读写操作。

5. 水平扩展:HBase支持水平扩展,可以随着数据的增加而扩充集群规模。

优点:

1. 可以存储海量数据,容易扩展;

2. 读写性能高,适合处理大规模数据;

3. 适合非结构化或半结构化数据的存储和查询;

4. 支持自动备份和恢复,具有高可靠性;

5. 开源免费,社区活跃,有大量的相关文档和资源。

缺点:

1. 不适合处理高并发的读写操作;

2. 对于小规模数据的存储和查询,性能相对较差;

3. 维护和管理分布式系统的成本较高;

4. 读写操作的延迟较大(毫秒级别);

5. 对于关系型数据的存储和查询,不如传统的关系型数据库效率高。

HBase 和RDBMS(关系型数据库)的对比

HBase

   只有字节和字符串数据类型、增删查改,不支持Join、列式存储,更新后仍然保留版本、可伸缩型轻易增加节点

RDBMS(关系型数据库):丰富的数据类型、各种各样的函数与表连接、表结构和行式存储  版本直接替换 、可伸缩型需要中间层、牺牲性能

3.HBase  --数据模式

      数据模型--关系型数据库

   RowKey主键

   Column Family 列族 需要申明

   Column Qualifier 列  不需要申明

   Version :默认Timestamp 数据版本 (时间戳)

   Cell 最小单元

   HRegion

   StoreFile

   NameSpace 命名空间 类似 数据库的概念 HBase有两个特殊预定义的命名空间:

   default :没有明确指定命名空间将表自动落入此命名空间

   hbase:系统命名空间,用于包含HBase的内部表和元数据表

4.HBase的架构模型

HBase是基于Hadoop架构的分布式列式存储数据库,其架构模型主要包括:HMaster、RegionServer、ZooKeeper以及HDFS。

1. HMaster:

HMaster是整个HBase集群的管理者,负责管理表的元数据信息和RegionServer的负载均衡。在HBase中,每个表都有一个或多个Region,HMaster会将Region分配给不同的RegionServer,同时还会监控RegionServer的状态和负载情况,并安排RegionServer之间的数据迁移。

2. RegionServer:

RegionServer是具体存储数据的节点,每个RegionServer负责存储一部分Region。RegionServer内部包含多个HRegion对象,每个HRegion对应一段连续的rowkey范围,即一个Region。当有客户端请求时,RegionServer会根据rowkey范围查找对应的Region,然后进行数据读写操作。

3. ZooKeeper:

ZooKeeper是HBase集群的协调者,主要负责管理HMaster和RegionServer之间的通信以及元数据信息的一致性。在HBase中,ZooKeeper维护了整个集群的状态信息,如HMaster的位置、RegionServer的状态等,同时还会监控集群中各个节点的状态变化,并及时通知其他节点进行相应处理。

4. HDFS:

HDFS是Hadoop分布式文件系统,是HBase存储数据的底层支撑。HBase会将数据按照列族存储在HDFS中,每个列族对应一个HFile文件,HFile文件中则存储了实际的数据。

总的来说,HBase的架构模型是基于Hadoop的分布式存储框架,通过HMaster、RegionServer和ZooKeeper等组件实现分布式数据存储和管理,同时还利用HDFS实现底层数据的高可靠性和高性能读写。

5、读写流程

理解一:

写流程:

  1. 客户端通过HBase API写入数据,数据以Put对象的形式传递给HBase客户端;
  2. HBase客户端首先会将Put对象拆解成多个KeyValue对象,每个KeyValue对象表示一行数据中的一个列;
  3. HBase客户端会根据KeyValue的RowKey信息,将每个KeyValue对象分配到相应的RegionServer上;
  4. RegionServer接收到数据后,会根据操作类型(Put、Delete等)更新对应的MemStore和WAL,如果MemStore的大小达到阈值,就会触发Flush操作,将数据刷到磁盘上的StoreFile中;
  5. 最终,数据会被持久化到HDFS中。

读流程:

  1. 客户端通过HBase API读取数据,数据以Get对象的形式传递给HBase客户端;
  2. HBase客户端首先会根据Get的RowKey信息,确定需要查询的RegionServer列表;
  3. HBase客户端向每个RegionServer发起RPC请求,请求对应的数据;
  4. RegionServer查找内存中的MemStore和磁盘上的StoreFile,尝试找到满足条件的KeyValue;
  5. 如果是Scan操作,则会继续查找下一个满足条件的KeyValue,直到查找完毕或到达Scan的StopRow为止;
  6. 如果找到了满足条件的KeyValue,RegionServer会将数据返回给HBase客户端;
  7. HBase客户端将返回结果缓存到本地,同时也会将结果返回给客户端应用程序

理解二:

写流程

客户端通过HBase API发送写请求到HMaster节点,HMaster负责管理RegionServer节点。

HMaster将写请求转发到负责该数据表的RegionServer节点。

RegionServer接收到写请求后,将写入的数据缓存在内存中,并立即返回成功响应给客户端。

RegionServer将数据写入HLog(WAL),以保证数据在写入磁盘前的可靠性。

当HLog的大小达到一定阈值时,RegionServer将该HLog刷入磁盘。

当RegionServer的内存缓存达到一定阈值时,RegionServer会将缓存中的数据写入HFile(HBase的数据存储文件格式),然后从内存中删除数据。

HFile的数量达到一定阈值时,RegionServer会将多个HFile合并为一个更大的HFile,以减少HFile的数量,提高查询效率。

读取流程

客户端通过HBase API发送读请求到客户端的RegionServer节点。

如果数据在RegionServer的内存缓存中存在,则直接返回数据给客户端。

如果数据在内存缓存中不存在,则从HFile中读取数据。

如果HFile中缺少数据,则从HLog中读取数据,并将数据写入内存缓存和HFile中。

如果客户端需要读取的数据不存在,则返回空结果给客户端。

总之,HBase的读写流程是一个通过内存缓存、HLog、HFile等多个层次的数据处理和存储过程,通过不断地写入和读取数据,保证了数据的可靠性和高效性

6、数据的刷写、合并、切分

HBase的数据刷写、合并、切分是HBase的基本操作之一,它们主要是为了保证数据的高效存储和访问。下面我们分别介绍一下这三个操作:

1. 刷写数据(Flush):HBase中的数据都是写入到内存中,当内存写满或者达到一定的条件时,就需要将内存中的数据刷写到磁盘上,以避免数据的丢失。HBase会启动一个后台线程,定期地将内存中的数据刷写到磁盘上,同时,可以通过手动触发flush操作来立即将内存中的数据刷写到磁盘上。

2. 合并数据(Compaction):为了避免HBase中的数据分布过于分散,当一个Region中的数据过多时,HBase会将其划分成更小的Region,这个操作称为split。但是,如果Region中的小文件太多,也会影响查询效率,此时就需要将小的HFile合并成大的HFile。这个操作称为Compact。

3. 切分数据(Split):HBase中的数据是按Region进行分片的,每个Region都会对应一个HDFS上的HFile。当一个Region中的数据量过大时,HBase会自动将其划分成更小的Region。Region可以通过自动切分或手动切分来实现。手动切分需要用户自己选择一个key值,这个key值会被当成新Region的起始值,之前的数据会被划分到旧Region中,新的数据会被划分到新Region中。

7、HBase之表设计

HBase是一个NoSQL数据库,它的数据存储在分布式的HDFS文件系统上。在设计表的时候需要考虑以下几点:

1. 表的列族设计

在HBase中,表的列族是非常重要的一个概念。列族是物理存储上的概念,所有属于同一列族的列会被存储在同一行内。列族是不可更改的,因此在创建表时需要给出列族的定义。通常在设计时,会根据数据的访问模式和查询需求来决定列族的数量和列族中的列。对于类似于日志的数据,可以考虑只创建一个列族,而对于常规数据,可以根据其属性来设计不同的列族。

2. 表的行键设计

在HBase中,每行数据都有唯一的行键。因此在设计表时,需要考虑行键的设计。行键应该尽量短、唯一、且易于查询。一般情况下,行键可以采用类似于主键的设计方式,可以采用字典排序。

3. 列限定符设计

列限定符是指属于同一个列族中的列的名称。在设计时应该精细化定义列族和列限定符,以便于查询和统计。列限定符也应该尽量短、唯一且易于查询。

4. 数据的序列化方式

在HBase中,数据的序列化方式可以影响查询的效率。因此在设计表时,需要选择一个适合自己的序列化方式。常用的序列化方式有Protobuf、Avro、Thrift等。

综上所述,HBase的表设计需要考虑列族、行键、列限定符和数据的序列化方式。在实际应用中,还需要考虑各种查询需求、数据量、分布式系统的数据一致性等方面的因素。

8、HBase的常用优化

1. 增加Region数量:通过增加Region数量,可以减少Region Server的负载,提高读写性能。

2. 优化数据模型:在设计数据模型时,需要合理选择Row Key和Column Family,避免出现热点数据和大量的无效数据。

3. 调整堆内存大小:根据实际需求调整HBase Region Server进程的堆内存大小,避免出现OOM异常。

4. 合理设置HDFS块大小:HBase的存储是基于HDFS的,合理的HDFS块大小可以提高IO性能。

5. 使用本地磁盘:HBase支持使用本地磁盘作为数据存储,可以提高读写性能。

6. 合理使用预分区:在创建表时,合理使用预分区可以提高读写性能。

7. 压缩数据:开启HBase的数据压缩功能可以减少存储空间和IO操作,提高读写性能。

8. 调整Flush和Compaction参数:通过调整Flush和Compaction参数,可以优化写入性能和存储空间利用率。

9. 合理选择写入模式:在高并发写入场景下,可以选择异步写入模式,提高写入性能。

10. 监控和调优:实时监控HBase的状态,及时发现和解决性能瓶颈问题。

以上是个人学习总结,希望对让你对HBase有一定的理解!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值