Hbase in action部分章节阅读笔记
Hbase in action部分章节阅读笔记
- Chapter 2.2.3: Under the hood: the HBase write path
- Chapter 2.2.5:Under the hood: the HBase read path
- Chapter 4.2:De-normalization is the word in HBase land
- Chapter 4.5:I/O considerations
- Chapter 4.6:From relational to non-relational
Chapter 2.2.3: Under the hood: the HBase write path
HBase写路径
HBase
使用Put在HBase中记录新行或修改现有行,内部过程是一样的:HBase接收命令并持久化更改,或者如果写失败,则抛出异常。
写操作默认情况下操作两部分:前置写入日志(WAL)(也称为HLog),以及MemStore(图2.1)。HBase在这两个地方记录写操作的默认行为是为了保持数据的持久性。
MemStore
MemStore是一个写缓冲区,HBase在永久写之前在内存中积累数据。当MemStore填满时,它的内容被刷新到磁盘,形成一个HFile。HFile是HBase的底层存储格式。hfile属于列族,一个列族可以有多个hfile。但是一个HFile不能包含多个列族的数据。每个列族有一个MemStore。
WAL
假设托管一个尚未刷新的MemStore的服务器崩溃了,将丢失内存中但尚未持久化的数据。HBase防范通过在写入完成之前写入WAL。每个服务器的一部分HBase集群保持一个WAL来记录发生的变化,在新的WAL条目出现之前,写操作不会被认为是成功地写。这种保证使得HBase像文件系统备份一样持久。HBase宕机时,可以通过重放WAL来恢复尚未从MemStore刷新到HFile的数据。MemStore是内存的write buffer,到一定量会flush到磁盘上成为HFile,如果region server挂了,数据就丢失。而WAL可以用来恢复数据。
Chapter 2.2.5:Under the hood: the HBase read path
HBase实现了两个目标:快速访问数据,把数据排序和把数据尽可能多地保留在内存中。
LRU缓存
从HBase读数据必须汇总持久化到HFiles和Memstore中的数据。为了快速读取,HBase设置了LRU缓存。该缓存,也称作BlockCache(块缓存),保存在JVM堆中。BlockCache目的是把经常访问的来自HFile的数据缓存在内存中,避免读取磁盘。每一个列簇有一个BlockCache。
从HBase中读取一行需要首先检查MemStore是否有挂起修改。然后检查BlockCache,看看块是否包含这个行最近被访问。最后,访问磁盘上的相关hfile。
Chapter 4.2:De-normalization is the word in HBase land
去规范化
规范化是关系数据库世界中的一种技术,在这种技术中,每种类型的重复信息都被放到自己的表中。这有两个好处:当更新或删除发生时,您不必担心更新给定数据的所有副本的复杂性;通过使用一个副本而不是多个副本,可以减少存储占用。
去规范化是相反的概念。数据被重复存储在多个位置。这使得查询数据更加容易和快速,因为您不再需要JOIN子句。
当用户创建一个twit时,从关系表中获取所有关注者的列表,并将该twit添加到每个关注者的流中。要实现这一点,首先需要能够找到跟随任何给定用户的用户列表。换句话说,要回答“谁跟着我?”这个问题。在当前的表设计中,这个问题可以通过扫描整个表并寻找rowkey的后半部分是您感兴趣的用户的行来回答。
Chapter 4.5:I/O considerations
HBase表的排序特性有利有弊。当查看twit流表时,排序性质能够快速扫描一小组行,以找到应该在用户流中显示的最新twitt。但是,当将一组时间序列数据写入HBase表时,排序会造成损失。时间戳本质上是单调递增的。这不仅限制了单个区域能够处理的吞吐量,而且还面临超载的风险,而集群中的其他机器都处于空闲状态。
在许多用例中,不需要基于单个时间戳访问数据。需要运行一个在一定时间范围内计算聚合的作业,如果它对延迟不敏感,则可以跨多个区域执行并行扫描。
Rowkey设计
使用Hash rowkey有助于数据在regionserver之间均匀分布,一般可以使用MD5获取定长key。比较棘手的一个场景是在时间序列数据中,使用时间戳作为rowkey,始终在表底部插入数据,由于rowkey的有序性存储,表的最后一个region成为热点。而应用又需要根据时间范围进行扫描查询,所以不能简单将时间戳Hash,这时可以考虑“Salting”方法:
但是读取现在涉及到将扫描分布到所有区域并找到相关的行。因为它们不再存储在一起,一个简短的扫描是无法解决问题的。
Chapter 4.6:From relational to non-relational
从关系型到非关系型
关系数据库建模包括三个主要概念:
实体——这些实体映射到表。
属性——这些属性映射到列。
关系——这些映射到外键关系。
要将属性映射到HBase,必须区分(至少)两种类型:
标识属性
标识属性是唯一标识实体的一个实例(即一行)的属性。在关系数据库表中,此属性形成表的主键。在HBase中,标识属性是rowkey的一部分。
一个实体由多个属性标识。这映射到关系数据库系统中的复合键。在HBase中,标识属性组成rowkey。非标识属性
非标识属性基本上映射到HBase中的列限定符。这些属性不需要唯一性保证。
当有一个宽行(几十或数百列)的关系数据库表。可以将行中的所有值序列化为单个二进制blob,并将其存储为单个单元格中的值。
这占用了更少的磁盘空间,但也有缺点:行中的值现在是不透明的,并且不能使用HBase表所提供的结构。当存储占用(以及磁盘和网络I/O)非常重要,并且访问模式总是涉及读取整行时,这种方法是有很帮助的。关系
关系模型使用两种主要的关系:一对多和多对多。关系数据库将前者直接建模为外键,将后者建模为连接表。在HBase中没有这些的直接映射,通常归结为数据的非规范化。
HBase没有任何内置的连接或约束,您需要在HBase之外编写代码,迭代每个用户,然后为该用户执行独立的HBase查找,以找到他们最近的twits(或为每个追随者反规范化twits副本)。
HBase的列在设计时不是预定义的。它们可以是任何东西。嵌套实体
一对多关系在Hbase中被建模为单行,rowkey将对应于父实体。嵌套的值将包含子值,其中每个子实体将一个列限定符放到它们的标识属性存储的位置,其余的非标识属性存储在值中。真正的HBase行定义了父记录;子实体的记录被存储为单个列。
列族
关系数据库中没有列族,HBase中列族是作为用于单个行包含一系列不相交的列的一种方式,
列族建立了一对一的关系模型,其中有两个表具有相同主键,每个表有0或1行,有各自主键值索引
关系数据库声明的索引在Hbase中不存在。版本控制
如果在关系模式中,存在显式存储时间戳的地方,那么在很多情况下,这些可以包含到存储在HBase单元中的时间戳中。
Hbase in action部分章节阅读笔记相关推荐
- 《HBase原理与实践》阅读笔记
学习笔记(1-3章) 全书概述 1.HBase概述 1.1.Hbase发展历史 1.2.Hbase数据模型 1.3.Hbase体系结构 1.4.Hbase系统特性 2.Hbase基础数据结构与算法 2 ...
- 《Java编程思想》Java I/O系统章节阅读笔记
今天正好要写个小程序需要用到io操作,突然想起来java有个nio一直没用过,就找了点资料研究了一下,顺便做点笔记,以便日后查阅. ---------------------------------- ...
- C++ Concurrency in Action, Second Edition阅读笔记(一、二章)
来源:https://livebook.manning.com/book/c-plus-plus-concurrency-in-action-second-edition/chapter-1/v-7/ ...
- 【阅读笔记】《TDN: Temporal Difference Networks for Efficient Action Recognition》阅读笔记
<TDN: Temporal Difference Networks for Efficient Action Recognition> 论文连接:https://arxiv.org/ab ...
- Learning salient boundary feature for anchor-free temporal action localization AFSD阅读笔记及代码复现
论文地址:Lin_Learning_Salient_Boundary_Feature_for_Anchor-free_Temporal_Action_Localization_CVPR_2021_pa ...
- 《Spring in action,3th》阅读笔记
第一章 Spring核心 第二章 装配Bean 第三章 最小化Spring XML配置
- Do Deep Neural Networks Learn Facial Action Units When Doing Expression Recognition?阅读笔记
Do Deep Neural Networks Learn Facial Action Units When Doing Expression Recognition?阅读笔记 前言 Abstract ...
- K8s in Action 阅读笔记——【9】Deployments: updating applications declaratively
K8s in Action 阅读笔记--[9]Deployments: updating applications declaratively 集群配置: 本章介绍如何更新运行在Kubernetes集 ...
- [python Cookbook]阅读笔记
@toc] 前记:为了补充一下python语法知识,感谢网友的推荐阅读了pythonCookbook,这本书确实不错,以问题为导向,引导解决思路. 这个博文是从阅读笔记typora中直接复制过来的没有 ...
最新文章
- 微软收购 GitHub 两年后,大咖共论开源新生态
- java窗口坐标_如何在Java中获取窗口外部的鼠标单击坐标
- JAVA面向对象的特征
- 通过Visual Studio 2005的项目模板来加速开发过程
- jQuery EasyUI使用教程之基本的拖放
- 软考_2021年11月真题2__三点估算技术
- 淘宝商品数据爬取并分析数据
- RTKLIB源码之单点定位/相对定位后处理简化版—第一版
- 禅道linux客户端服务端,禅道11.0版本发布,主要集成禅道客户端
- AXD Debugger
- 稳压二极管和雪崩二极管的工作原理及选型学习总结
- 解决合并压缩包分卷无法解压 错误信息:文件格式未知或者压缩文件数据已经损坏
- [置顶]Gradle 实现 Android 多渠道定制化打包
- 推荐一个220V控制12V的电路板继电器-220v降压控制继电器
- html网页设计小作业(个人主页)
- pip install下载速度太慢
- MySQL优化系列3-Linux查看CPU、内存、磁盘、网络信息
- 银河麒麟 ARM架构 Qemu虚拟机
- 实现一个完整的前后端交互
- 掌握10条设计理念!让同事(客户)更好的了解设计
热门文章
- VBA批量处理PPT中图片尺寸
- 纯小白通过服务器搭建yolov5环境训练coco数据集
- EDID1.3 数据格式
- form表单提交后台获取表单信息
- lol登录服务器时显示乱码,win7系统登录LOL游戏出现乱码的解决方法
- AndroidStudio开发高德地图有些机型报java.lang.UnsatisfiedLinkError解决方案
- 云扩科技与帆软软件达成战略合作,携手共建RPA+BI新生态
- 同轴式二级圆柱齿轮减速器的设计(论文+DWG图纸) 装配图 低速轴 高速轴 中间轴 斜齿轮 轴承盖
- GEWorker界面展示及功能组成介绍,怎么使用GE-Worker?
- java取汉字拼音首字母含多音字及不常见的字