IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hbase基础 -> 正文阅读

[大数据]Hbase基础

1.HBase简介

HBASE 理论

  • HBase是一个基于Hadoop的分布式、面向列的开源数据库,对大数据实现了随机定位和实时读写。
  • HBase是基于Google的Bigtable技术实现的,Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop的HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase利用Hadoop的MapReduce来处理HBase中的海量数据;Google Bigtable利用Chubby进行协同服务,HBase利用Zookeeper进行协同服务。
  • HBase具有以下特点。
    读取数据实时性强:可以实现对大数据的随机访问和实时读写。
    存储空间大:可以存储十亿行、百万列、上千个版本的数据。
    具有可伸缩性:可以通过增删节点实现数据的伸缩性存储。
    可靠性强:HBase的RegionServer之间可以实现自动故障转移。
    面向列:面向列(族)的存储和权限控制,列(族)独立检索。
    数据类型单一:HBase中的数据都是字符串,没有类型。

2.HBase的数据模型

HBase是一个面向列的数据库,数据模型主要有命名空间(Namespace)、表(Table)、行键(Rowkey)、列族(Column Family)、列(Column)、时间戳(Timestamp)、单元格(Cell)。

2.1 Namespace

Namespace可以对表进行逻辑分组,类似于关系数据库系统中的数据库。

2.2 表

表由Rowkey和列族组成,按Rowkey的字典顺序进行排序。

2.3 Rowkey

Rowkey是每一行数据的唯一标识。Rowkey可以使用任意字符串表示,Rowkey的最大长度为64KB,实际应用中Rowkey长度一般为10~1000 Byte。在HBase 内部,Rowkey保存为字节数组。

2.4 列族

列族是列的集合,在创建表时必须要声明列族。一个列族的所有列使用相同的前缀(列族名称)。HBase所谓的列式存储就是指数据按列族进行存储,这种设计可以方便地进行数据分析。

2.5 列

列以键值对的形式进行存储。列的值是字节数组,没有类型和长度限定。列的格式通常为column family:qualifier。例如,name:tom列和name:jack列都是列族name的成员,:后的内容通常称为Qualifier(限定符),Qualifier可以是任意的字节数组,相同列族中的Qualify的名称是唯一的,列的数量可以达到百万级别。

2.6 Cell

Cell是指由行键、列族、版本唯一确定的单元。Cell中的数据全部以字节码形式存储。

2.7 时间戳和版本

每个Cell通常保存着同一份数据的多个版本(Version),多个版本之间用时间戳来区分。时间戳的类型是64位的整型。
时间戳可以被自动赋值和显式赋值。自动赋值是指在数据写入时,HBase可以自动对时间戳进行赋值,该值是精确到毫秒的当前系统时间。显式赋值是指时间戳可以由客户显式指定。
为了方便地进行数据的版本管理,HBase提供了两种数据版本回收方式:
①保存数据的最后n个版本,
②保存最近一段时间内的版本(例如,最近7天的版本)。
用户可以针对列族进行自定义设置。
在这里插入图片描述

3 HBase的架构

在这里插入图片描述
由HBase架构图可知,HBase主要涉及4个模块: Client(客户端)、Zookeeper、HMaster(主服务器)、HRegionServer(区域服务器)。其中,HRegionServer 模块包括HRegion、Store、MemStore、StoreFile、HFile、HLog等组件

3.1 Client

客户端包含访问HBase的接口,并维护Cache来加快对HBase的访问,比如Region的位置信息。
Client通过RPC机制与HBase的HMaster和HRegionServer进行通信,Client与HMaster进行管理类通信,Client与HRegionServer进行数据读写类通信。

3.2. Zookeeper

Zookeeper在HBase中主要有以下两个方面的作用。
(1)HRegionServer主动向Zookeeper集群注册,使得HMaster可以随时感知各个HRegionServer的运行状态(是否在线),避免HMaster出现单点故障问题。
(2)Hmaster启动时候会将HBase系统表加载到Zookeeper集群,通过Zookeeper集群可以获取当前系统表hbase:meta的存储所对应的HRegionServer信息。其中,系统表是指Namespace hbase下的表namespace和meta。

3.3. HMaster

HMaster在功能上主要负责Table和Region的管理工作,包括:
①管理用户对Table的增、删、改、查操作;
②管理HRegionServer的负载均衡,调整Region分布;
③在Region Split后,负责新Region的分配;
④在HRegionServer停机后,负责失效HRegionServer上的Regions迁移。Region是HBase数据管理的基本单位。数据的move、balance、split,都是按照Region来进行操作的。
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。

3.4. HRegionServer

HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,每个Column Family就是一个集中的存储单元。因此将具备共同IO特性的Column放在一个Column Family中,会提高存储效率。
HRegionServer主要有以下几个方面的作用。
(1)维护HMaster分配的HRegion,处理对这些HRegion的IO请求。
(2)负责切分在运行过程中变得过大(默认超过256M)的HRegion。

3.4.1 HRegion

HRegion是Hbase中分布式存储和负载均衡的最小单元。一个HRegion由一个或者多个Store组成。
每个表开始只有一个HRegion,随着表中数据不断增多,HRegion会不断增大,当HRegion增大到一定阈值(默认256MB)时,HRegion就会等分为两个新的HRegion。不同的HRegion可以分布在不同的HRegionServer上,但同一个HRegion拆分后也会分布在相同的HRegionServer上。

3.4.2 Store

一个Store由MemStore(1个)和StoreFile(零至多个)组成。一个Store保存一个Columns Family。Store是HBase存储的核心。

3.4.3 MemStore

MemStore存储在内存中。当MemStore的大小达到一定阈值(默认128MB)时,MemStore会被刷新写入(Flush)磁盘文件,即生成一个快照。当关闭HRegionServer时,MemStore会被强制刷新写入磁盘文件。
以下是MemStore 刷新写入StoreFile文件的条件。
(1)达到 hbase.regionserver.global.MemStore.upperLimit,默认是0.4 或者是 HeapSize的40%。
(2)达到 hbase.hregion.MemStore.flush.size,默认是128MB。
(3)达到 hbase.hregion.preclose.flush.size,默认是5MB,并且确保HRegion已经关闭。

3.4.4. StoreFile

StoreFile是指MemStore中的数据写入磁盘后得到的文件。StoreFile存储在HDFS上。
综上所述,HRegion的组件之间的关系为:一个HRegion由一个或者多个Store组成。一个Store由MemStore(1个)和StoreFile(零至多个)组成,一个Store保存一个Columns Family;StoreFile存储在HDFS上,MemStore存储在内存中。

3.4.4 HBase的文件存储格式主要有HFile和HLog两种

HFile

HFile是HBase中Key-Value数据的存储格式。HFile文件是Hadoop的二进制格式的文件,StoreFile底层存储使用的就是HFile文件。
一个 HFile文件通常分解成多个块,关于HFile文件的操作都是以块为单位进行的。HFile文件的块大小可以在列族级别进行配置,最小块大小推荐设置在8 ~ 1024KB之间。较大的块有利于顺序读写数据,由于需要解压更多的数据,不便于数据的随机读取。较小的块有利于随机读写,但需要占用更多内存,数据写入文件时相对较慢。
HFile分为如下六个部分:
(1)Data Block段:保存表中的数据,这部分可以被压缩。
(2)Meta Block段(可选的):保存用户自定义的键值对,可以被压缩。
(3)File Info段:HFile的元信息,不被压缩,用户也可以在这一部分添加自己的元信息。
(4)Data Block Index段:Data Block的索引,每条索引的key是被索引的block的第一条记录的key。
(5)Meta Block Index段(可选的):Meta Block的索引。
(6)Trailer:这一段是定长的。保存了每一段的偏移量,读取一个HFile时,会首先读取Trailer,Trailer保存了每个段的起始位置,然后,DataBlock Index会被读取到内存中。
为了应对灾难恢复,每个Region Server维护一个HLog,HLog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。

HLog

HLog是HBase中WAL(Write-Ahead-Log,预写日志)文件的存储格式。WAL文件是HBase的RegionServer在处理数据过程中用来记录操作内容的一种日志文件。WAL文件在物理存储上是Hadoop SequenceFile文件。
HBase在处理数据时,先将数据临时保存在内存中,当数据量达到设置的阈值后,将数据写入磁盘,这样做可以减少小文件。如果存储在内存中的数据由于设备故障等原因未及时写入磁盘,就会出现数据丢失的情况。WAL文件可以很好地解决这种数据丢失的问题。在每次操作数据之前都会写入日志文件,如果设备出现故障,HBase可以通过日志文件恢复数据。

4.HBase的存储流程

  1. 当客户端提交变更操作(如插入put,删除delete,计数新增incr),首先客户端会连接上Zookeeper找到Root表的存储位置,然后根据Root表所提供的Meta表的位置找到对应的Region所在的HRegionServer。数据变更信息会先通过HRegionServer写入一个commit log,也就是WAL。当写入WAL成功后,数据变更信息会存到MemStore中。当MemStore达到设定的maximum value(hbase.hregion.memstore.flush.size,默认64MB)后,MemStore就会开始进行Flush操作,将其内容持久化到一个新的HFile中。在Flush操作过程中,MemStore通过滚动机制继续对用户提供读写服务。随着Flush操作的不断进行,HFile文件越来越多。当HFile文件超过设定的数量后,Hbase的HouseKeeping机制就会通过Compaction特性将HFile小文件合并成一个更大的HFile文件。在Compaction的过程中,会进行版本的合并以及数据的删除。由于storeFiles是不变的,用户执行删除操作时,并不能简单地通过删除其键值对来删除数据内容。Hbase提供了一个delete marker机制(也称为tombstone marker),会告诉HRegionServer那个指定的key已经被删除了。这样其它用户检索这个key的内容时,因为已经被标记为删除,所以也不会检索出来。在进行Compaction操作中就会丢弃这些已经打标的记录。经过多次Compaction后,HFile文件会越来越大,当达到设定的值时,会触发Split操作。
    将当前的Region根据RowKey对等切分成两个子Region,当期的那个Region被废弃,两个子Region会被分配到其他HRegionServer上。所以刚开始时一个表只有一个Region,随着不断的split,会产生越来越多的Region,通过HMaster的LoadBalancer调整,Region会均匀遍布到所有的HRegionServer中。
  2. 当HLog满时,HRegionServer就会启动LogRoller,通过执行rollWriter方法将那些所有sequence number均小于最大的那个sequence number的logfile移动到.oldLog目录中等待被删除。如果用户设置了Deferred Log Flush为true,HRegionServer会缓存有关此表的所有变更,并通过LogSyncer调用sync()方法定时将变更信息同步到filesystem。默认为false的话,一旦有变更就会立刻同步到filesystem。
    3.在一个HRegionServer中只有一个WAL(Write-Ahead-Log,预写日志),所有Region共享此WAL。HLog会根据Region提交变更信息的先后顺序依次顺序写入WAL中。如果用户设置了setWriteToWAL(false)方法,则有关此表的所有Region变更日志都不会写入WAL中。这也是上图中Region将变更日志写入WAL的那个垂直向下的箭头为什么是虚线的原因。

HBase和HDFS区别

1.Hbase和HDFS的联系。

(1)HBase中管理的文件大部分存储在HDFS中。
(2)HBase和HDFS都具有良好的容错性和扩展性,都可以扩展到成百上千个节点。

2.HBase和HDFS的区别。

(1)HDFS是一个分布式的文件系统,适合对大规模数据进行批量处理,但不支持数据随机查找,不支持数据更新,不适合增量数据处理。
(2)HBase是构建在Hadoop之上的大型数据库,可以实现数据的随机定位和实时读写,实现了处理数据的低延迟。

与RMDB(传统结构化数据库)比较

1.HBase

1、分布式存储,面向列。
2、动态扩展列。
3、普通商用硬件支持,扩容成本低。

2.RMDB

1、数据结构固定。
2、需要预先定义好数据结构。
3、需要大量IO,扩展成本大。

HBase应用场景

HBase适合具有如下需求的应用:
海量数据(TB、PB)
高吞吐量
需要在海量数据中实现高效的随机读取
需要很好的性能伸缩能力
能够同时处理结构化和非结构化的数据
不需要完全拥有传统关系型数据库所具备的ACID特性

ACID原则

ACID原则是数据库事务正常执行的四个特性,分别指原子性、一致性、独立性及持久性。

事务的原子性(Atomicity):指一个事务要么全部执行,要么不执行.

事务的一致性(Consistency):指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。

独立性(Isolation):事务的独立性也有称作隔离性,是指两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致。

持久性(Durability):事务的持久性是指事务执行成功以后,该事务所对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故的回滚。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-14 22:40:05  更:2022-06-14 22:40:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 23:22:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码