??云主机低折扣年付还赠送90天?? 广告位招租 - 15元/月全站展示
??伍彩集团官网直营彩票 ??言情小说??
??私有威屁恩(独享/安全/稳定/高速/低价) ??Google Facebook Youtube 科学上网
广告位招租 - 15元/月全站展示 广告位招租 - 15元/月全站展示
Hadoop 原理学习(5)HBase 架构与工作原理3 - HBase 读写与删除原理

转载   2018-05-30   浏览量:399


246天天彩免賛該料大全:一、前言

彩票开奖查询 www.kbyp.net 在 HBase 中,Region 是有效性和分布的基本单位,这通常也是我们在维护时能直接操作的最小单位。比如当一个集群的存储在各个节点不均衡时,HMaster 便是通过移动 Region 来达到集群的平衡?;蛘吣骋桓?Region 的请求过高时,通过分裂 Region 来分散请求?;蛘呶颐强梢灾付?Region 的 startKey 和 endKey 来设计它的数据存放范围等等。

所以,HBase 在读写数据时,都需要先找到对应的 Region,然后再通过具体的 Region 进行实际的数据读写。

目录表(Catalog Tables)

客户端在访问 Region 中的数据之前,需要先通过 HMaster 确定 Region 的位置,而 HMaster 则将所有 Region 的元信息都保存在 hbase:meta 中。

hbase:meta

Meta 表是一个特殊的 HBase 表,它保存了集群中所有 Region 的列表,它的地址被存储在 Zookeeper 中。其表结构如下:

- RowKey:
    - Region Key 格式([table],[region start key],[region id])
- Values:
    - info:regionInfo (序列化的.META.的HRegionInfo实例)
    - info:server(保存.META.的RegionServerserver:port)
    - info:serverStartCode(保存.META.的RegionServer进程的启动时间)

根据 Meta 表中的数据,可以确定客户端所访问的 RowKey 所处的实际位置。

META table

二、读取与缓存元数据(首次读取或写入)

客户端第一次读取或写入 HBase 时将发生以下步骤:

1) 客户端从 Zookeeper 获取存储 META 表的 Region 服务器地址;
2) 客户端查询 META 表所在服务器来获取与想要访问的行键相对应的 RegionServer 地址,然后客户端将这些信息与 META 表位置一起缓存;
3) 客户端从对应的 RegionServer 获取指定行;

对于之后的读取,客户端使用缓存的信息来检索 META 的位置和已经读取过的行键位置信息。随着时间的推移,它将不需要查询 META 表,直到由于某个 Region 已经移动或丢失,客户端才会重新查询并更新缓存。

write and read first

三、HBase 写入原理

在初次读取写入时,客户端已经缓存了 META 表的信息,同时因为在 HBase 中数据是按行键有序排列的,所以客户端能过通过将要写入数据的行键和缓存信息直接找到对应的 RegionServer 和 Region 位置。那么当客户端发出 Put 请求直到数据真正写入磁盘,它将主要经过以下步骤:

1) 将数据写入预写日志 WAL
2) 写入并排序 MemStore 缓存数据
3) 刷新缓存中的数据,并写入到 HFile磁盘

1. 将数据写入预写日志 WAL

当客户端发出 Put 请求时,HBase 首先会将数据写入预写日志:

  • 编辑 WAL 文件,将数据附加到 WAL 文件的末尾(满足 HDFS 只允许追加的特性);
  • 如果服务器崩溃,那么将通过 WAL 文件恢复尚未保存的数据;

write WAL

2. 写入并排序 MemStore 缓存数据

一旦数据写入 WAL 成功后,数据将被放入 MemStore 中,然后将 Put 请求确认返回给客户端??突Ф私邮盏饺啡闲畔⒑?,对于客户端来说,此次操作便结束了。

写入并排序 MemStore 缓存数据

数据放入 MemStore 中后,HBase 不会立即刷新数据到磁盘,而是先更新存储数据使其作为有序的 KeyValues 结构,与存储在 HFile 中的结构相同,并等待 MemStore 累积到足够的数据时才会刷新数据以写入磁盘。

写入并排序 MemStore 缓存数据

3. 刷新缓存中的数据,并写入到 HFile磁盘

当 MemStore 累积到足够的数据时,整个有序的数据集将被写入 HDFS 中的一个新的 HFile 文件。至此,客户端从发出 Put 请求到数据持久化的过程才算是真正的完成。

可能影响性能的因素

  • 因为每一个列族都有一个 MemStore,而当发生刷新时,属于同一个 Region 下的所有 MemStore 都将刷新,这可能导致性能下降,并影响最终的 HFile 文件大?。℉DFS 不适合存储小文件),所以列族的数量应该被限制以提高整体效率。

四、HBase 读取原理

根据 HBase 的 RegionServers 的结构可知:在 HBase 中,与一行数据相对应的 KeyValue 单元格可能位于多个位置,比如:行单元格(row cells)已经保存在 HFiles 中,最近更新的单元格位于 MemStore 中,最近读取的单元格位于 BlockCache 中。所以当客户端读取一行数据时,HBase 需要将这些数据合并以得到最新的值。

读取合并

HBase 将通过以下步骤来合并 BlockCache、MemStore 和 HFile 中的数据:

1) 首先,扫描程序查找 BlockCache 中的行单元格(读取缓存)。最近读取的 keyValue 被缓存在这里,并且当需要使用内存时,清除掉最近使用最少的数据;
2) 然后,扫描器在 MemStore 中查找包含最近写入内存中的缓存数据;
3) 如果扫描器在 MemStore 和 BlockCache 中没有找到所有的行单元格,HBase 将使用 BlockCache 索引和 Bloom 过滤器将 HFile 加载到内存中,它可能包含目标行单元格。

注:Bloom 过滤器确定的结果并不一定总是准确的,但是否定的结果却一定保证准确。

Merge

可能影响性能的因素

  • 刷新数据时,一个 MemStore 可能会产生多个相同的 HFile 文件(为什么会产生多个相同的文件?),这意味着读取时可能需要检查多个文件,这可能会影响性能。这种行为被称为读取放大;
  • 客户端使用扫描全表数据操作时,可能会检查更多的文件,所以不建议使用扫描全表操作;

五、HBase 删除原理

HBase 的删除操作并不会立即将数据从磁盘上删除,这主要是因为 HBase 的数据通常被保存在 HDFS 之中,而 HDFS 只允许新增或者追加数据文件,所以删除操作主要是对要被删除的数据打上标记。

HFile 中保存了已经排序过的 KeyValue 数据,KeyValue 类的数据结构如下:

{
    keylength,
    valuelength,
    key: {
        rowLength,
        row (i.e., the rowkey),
        columnfamilylength,
        columnfamily,
        columnqualifier,
        timestamp,
        keytype (e.g., Put, Delete, DeleteColumn, DeleteFamily)
    }
    value
}

当执行删除操作时,HBase 新插入一条相同的 KeyValue 数据,但是使 keytype=Delete,这便意味着数据被删除了,直到发生 Major_compaction 操作时,数据才会被真正的从磁盘上删除。

参考链接

注:此文章主要为学习的笔记,其中大量的翻译了参考链接中的资料,并有改动,如有需要,请阅读原文。

转载自:https://blog.csdn.net/t894690230/article/details/80515426



HBase之Rowkey设计总结及方舟实战篇
一、引言HBase由于其存储和读写的高性能,在OLAP即时分析中越来越发挥重要的作用,在易观精细化运营产品--易观方舟也有广泛的应用。作为Nosql数据库的一员,HBase查询只能通过其Rowkey来查询(Rowkey用来表示唯一一行记录),Rowkey设计的优劣直接影响读写性能。HBase中的数据是按照Rowkey的ASCII字典顺序进行全局排序的,有伙伴可能对ASCII字典序印象不够深刻,下面...
HBase的java编程实例-写入词频统计
下面代码需要新建一个文本文件作为读取内容importjavaioBufferedReader;importjavaioFileReader;importjavautilList;importjavautilArrayList;importorgapachehadoopconfConfigura
Hbase regionserver 逐个挂掉的问题分析
最近遇到一个比较诡异的问题,一个regionserver由于GC的原因,导致与zookeeper链接超时,最终被踢出集群。但是,接下来的现象,才是噩梦的开始?。?!
hbaseshell基本操作简介(代码)
hbaseshell基本操作简介(代码)。之前介绍了hbase的安装,现在来简介下hbase的基本操作:1启动hbase
Hbase操作命令大全
Hbase操作命令大全。一Hbase操作命令;二Namespace操作。
Hbase之Shell基本命令
Hbase之Shell基本命令?;久睿喊沧巴旰罂梢栽阡榔髦惺淙胂旅娴腢RL来测试安装是否成功:http:localhost:60010hbase目录输出日志文件所在位置:$HBASE_HOMElogs进入hbaseshellconsole$HBASE_HOMEbinhbaseshell如果有kerberos认证,需要事先使用相应的ke
HBase:架构,Compaction合并操作
HBase:架构,Compaction合并操作。compaction合并操作:compaction操作将小文件合并成大文件,加快查询速度,减少文件数量,减少资源占用。compaction分为两种:
Hbase对数据表的增删改查和对数据的增删改查
Hbase对数据表的增删改查和对数据的增删改查。
HBase的复制函数CopyToTable
HBase的复制函数CopyToTable。在日常的生产环境中,通常需要将一张已有的hbase表格直接复制给在hbase中的另一张表格,那么可以通过命令行直接调用CopyToTable来实现。首先在hbase中有一张表,如下:
HBase计算表的总count
HBase计算表的总count。