文章目录

  • HFile 结构
  • 读流程
  • 合并读取数据优化

HFile 结构

在了解读流程之前,需要先知道读取的数据是什么样子的。

HFile 是存储在 HDFS 上面每一个 store 文件夹下实际存储数据的文件。里面存储多种内容。包括数据本身(keyValue 键值对)、元数据记录、文件信息、数据索引、元数据索引和一个固定长度的尾部信息(记录文件的修改情况)。
键值对按照块大小(默认 64K)保存在文件中,数据索引按照块创建,块越多,索引越大。每一个 HFile 还会维护一个布隆过滤器(就像是一个很大的地图,文件中每有一种 key,就在对应的位置标记,读取时可以大致判断要 get 的 key 是否存在 HFile 中)。

KeyValue 内容如下:
rowlength -----------→ key 的长度
row -----------------→ key 的值
columnfamilylength --→ 列族长度
columnfamily --------→ 列族
columnqualifier -----→ 列名
timestamp -----------→ 时间戳(默认系统时间)
keytype -------------→ Put

由于 HFile 存储经过序列化,所以无法直接查看。可以通过 HBase 提供的命令来查看存储在 HDFS 上面的 HFile 元数据内容。

[root@hadoop102 hbase]$ bin/hbase hfile -m -f /hbase/data/命名空间/表名/regionID/列族/HFile 名

例:

hbase hfile -m -f /hbase/data/bigdata/student/811866d967083e21953306315078fbcb/info/0e6969de9f8d4f3a99262b3eaf3b75d0

Hbase中Region/Store/StoreFile/Hfile之间的关系

读流程


(1)首先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server;
(2)访问对应的 Region Server,获取 hbase:meta 表,将其缓存到连接中,作为连接属性 MetaCache,由于 Meta 表格具有一定的数据量,导致了创建连接比较慢; 之后使用创建的连接获取 Table,这是一个轻量级的连接,只有在第一次创建的时候会检查表格是否存在访问 RegionServer,之后在获取 Table 时不会访问 RegionServer;

(3)创建 Table 对象发送 get 请求。
(4)优先访问 Block Cache,查找是否之前读取过,并且可以读取 HFile 的索引信息和布隆过滤器。
(5)不管读缓存中是否已经有数据了(可能已经过期了),都需要再次读取写缓存和store 中的文件。
(6)最终将所有读取到的数据合并版本,按照 get 的要求返回即可。

合并读取数据优化

每次读取数据都需要读取三个位置,最后进行版本的合并。效率会非常低,所有系统需要对此优化。
(1)HFile 带有索引文件,读取对应 RowKey 数据会比较快。
(2)Block Cache 会缓存之前读取的内容和元数据信息,如果 HFile 没有发生变化(记录在 HFile 尾信息中),则不需要再次读取。
(3)使用布隆过滤器能够快速过滤当前 HFile 不存在需要读取的 RowKey,从而避免读取文件。(布隆过滤器使用 HASH 算法,不是绝对准确的,出错会造成多扫描一个文件,对读取数据结果没有影响)

HBase2.x(十一)HBase 读流程相关推荐

  1. HBase读写流程、flush、文件合并、region拆分

    HBase存储原理(架构) HBase依赖于Zookeeper和Hadoop的,所以在启动HBase前需要启动Zookeeper和Hadoop. HMaster用于管理整个HBase集群,即管理每个H ...

  2. 如何像海豚一样在数据海洋里遨游?|Hbase数据处理流程详解

    写在前面:我是「且听风吟」,目前是某上市游戏公司的大数据开发工程师,热爱大数据开源技术,喜欢分享自己的所学所悟,现阶段正在从头梳理大数据体系的知识,以后将会把时间重点放在Spark和Flink上面. ...

  3. Rocksdb 写流程,读流程,WAL文件,MANIFEST文件,ColumnFamily,Memtable,SST文件原理详解

    文章目录 前言 Rocksdb写流程图 WAL 原理分析 概述 文件格式 查看WAL的工具 创建WAL 清理WAL MANIFEST原理分析 概述 查看MANIFEST的工具 创建 及 清除 MANI ...

  4. HDFS读流程,写流程,放置策略

    1.HDFS写流程 [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ hdfs dfs -put LICENSE.txt / 19/02/20 21:30:22 WA ...

  5. F2FS源码分析-2.3 [F2FS 读写部分] F2FS的一般文件读流程分析

    F2FS源码分析系列文章 主目录 一.文件系统布局以及元数据结构 二.文件数据的存储以及读写 F2FS文件数据组织方式 一般文件写流程 一般文件读流程 目录文件读流程(未完成) 目录文件写流程(未完成 ...

  6. Hadoop-HDFS(一)读流程

    个人理解,各位大牛可以把自己的理解分享一下!小弟会认真看每一个大牛的留言 HDFS读流程 . 如图(图是别人的)所示:1.使用HDFS提供的客户端Client 向NameNode(个人理解为数据的管理 ...

  7. TiDB读流程概述,一张图搞明白

    tidb的三大模块的功能就不赘述了,先要有这些知识的基础,不然看着肯定会有疑惑: 对比tibd的SQL读流程其实和MySQL的主流程主提一样,因为tidb也是兼容MySQL协议的,如果你多MySQL的 ...

  8. HBase读取流程(源码角度)

    HBase数据读取流程 1.hbase数据读取流程简单描述 ​ 一般来说,在描述hbase读取流程的时候,简单的描述如下: ​ 1.客户端从zookeeper中获取meta表所在的regionserv ...

  9. hadoop 读流程和写流程

    hadoop HDFD读流程 hadoop HDFD写流程package com.lhj.hadoop;import java.io.BufferedReader; import java.io.IO ...

最新文章

  1. python 类的魔术方法_python中类的魔术方法
  2. R语言ggplot2可视化:ggplot2可视化密度图(显示数据密集区域)、ggplot2可视化密度图(对数坐标):log10比例的收入密度图突出了在常规密度图中很难看到的收入分布细节
  3. 《转载》IOS高级开发~开机启动无限后台运行监听进程
  4. node.js入门 - 2.创建一个简单聊天室
  5. let const 命令
  6. stm32命名规则,型号说明
  7. C#中TransactionScope的使用方法和原理
  8. python if elif else_Python3使用独立的if语句与使用if-elif-else结构的不同之处
  9. php服务划分,云计算提供的服务分为哪三个层次
  10. 给刚博士毕业的年轻学者9点建议,最后一条:抓紧结婚,生娃!
  11. 安徽大学计算机科学与技术学院刘峰,刘峰
  12. Hibernate集合属性的元素为组件(三)
  13. 智能优化算法:人工电场优化算法-附代码
  14. 现在一行代码允许长度,80太少,120才算正常
  15. win10便签常驻桌面_Win10用户的印象笔记便签深度体验 | 大使专栏
  16. word中 设置标题级别 的 快捷键
  17. linux如何运行rpm,LINUX下RPM的使用方法
  18. boost创建线程池_linux下boost的一个扩展线程池-threadpool-的学习
  19. 字符数组动态开辟空间和静态开辟空间
  20. DDR扫盲——DDR与DDR2、DDR3的区别

热门文章

  1. Python *和**用法
  2. nodejs的安装及终端的使用
  3. 删除一个字符串中的所有数字字符
  4. (二)TCP客户端/服务器通信------select函数
  5. laradock、phpstrom、xdebug配置实现断点调试
  6. 火爆全网的条形竞赛图,Python轻松实现
  7. 2021年复旦大学961真题回顾
  8. 二.MUI框架 开始体验MUI
  9. 万能遥控器小制作(二)
  10. Java--如何创建目录或文件