《HBase权威指南》学习笔记
第一章 简介
背景:
GFS:集群存储海量数据,数据在节点间冗余复制,即使一台存储服务器发生故障,也不会影响可用性。
GFS的缺点:适合存储少许非常大的文件,而不适合存储大量小文件,因为文件的元数据信息存储在主节点的内存中,文件越多主节点压力越大。
BigTable:RDBMS在大规模处理中有缺点,可以摒弃关系型的特点,采用简单API进行CRUD,再加一个扫描函数。
表,列,单元格:
基本单位是column
多column组成row
若干列组成列族(column family)
一个row有唯一rowkey
每个column有多个版本,每一个单元格可以保留若干版本的数据
行序是按照字典顺序进行排序的,row-10要小于row-2
列族的作用:
- 构建数据的语义边界或者局部边界
- 有助于设置压缩或者指示他们存储在内存中
- 一个列族的所有列存储在同一个底层存储文件里面,这个文件叫做HFile
列族使用注意点:
- 列族不能修改的太频繁,数量也不能太多,在当前的实现中如果列族大于几十个会出现bug,实际情况可能还小的多
- 引用列的格式为 family:qualifier , family 就是列族名, qualifier就是列名,比如 log:time 是获取 log这个列族中的time列,列是无限的可以达到几百万
列的时间戳:
- 默认由系统指定,也可以手动指定
- 可以通过不同的时间戳区分版本
单元格的版本:
- 用户可以指定每个值所能存储的最大版本数
- 支持谓词删除(predicate deletion):比如只允许用户存储过去一周的值,不过这些值是未解释的字节数组
Hbase的一种应用场景:
自动分区:
- region是行键连续排列的存储区间
- 如果region太大就会动态拆分
- 如果region太小就会合并以节省空间
- region相当于传统数据库的分区表
- 每台服务器上的region最好是10-1000个
region是怎么分区的:
- 一开始是有一个region,当这个region大到一定的值的时候就会从中间键(middle key,region中间的那个行键)处将这个region拆分为大致相等的两个子region。
- 一个region服务器可以有多个region。
- Hbase不支持在线的region合并,但是可以离线合并
- region的拆分非常快,接近于瞬间,因为并没有改变存储的位置
- 如果一个region server的负载过大会触发region迁移,它会将region迁移到别的region server上
存储API:
协处理器(coprocessor): 可以在服务器的地址空间执行来自客户端的代码。用于实现轻量级的批处理作业,或者使用表达式分析或者汇总数据
通过包装器可以将表转换成MapReduce的输入输出目标
实现:
- HFile中的键值是经过排序的
- 文件内部是连续的块,块的索引信息存储在尾部
- HFile被加载到内存中时,索引会优先加载到内存中
- 每个块默认是64KB
- 存储文件通常保存在HDFS中
每次更新数据的时候发生了什么:
- 数据记录到提交日志(commit log),在HBase中称之为 预写日志(write-ahead log, WAL)(存储在HDFS系统上)
- 数据写入内存中的 memstore
- 写入的数据超过阀值,系统将这部分数据移出内存,作为HFile写入磁盘中
- 数据移出memstore,丢弃提交日志。采用滚动memstore可以实现不阻塞系统读写,即用空的新memstore获取更新数据,将旧的满的memstore转换成一个文件,由于memstore中的数据本来就排序好了,所以存储的时候不用再次排序
管家机制:
ZooKeeper:
HBase特点:
《HBase权威指南》学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- golang字符串常用函数
package utils import "fmt" import "strconv" import "strings" var str s ...
- 课程14:get和post是神马
http://www.codeschool.cn/lesson/14.html get和post是神马? get和post是http中两种最常用到的请求类型 简单理解get请求 get请求多用于获取信 ...
- ibatis中:org.springframework.jdbc.UncategorizedSQLException:异常
SQL 查询语句异常,可能是你的查询语句写错了,或者是你的映射的类和或数据中与表不对应,检查你的映射配置文件.
- poj1486 Sorting Slides
Sorting Slides Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4812 Accepted: 1882 De ...
- apk文件签名绕过
声明: 1.本文转载自:http://www.2cto.com/Article/201311/256406.html,为了留作日后参考上传博客 2.如有转载请复试上面连接,尊重原创 apk文件签名绕过 ...
- [DeeplearningAI笔记]序列模型1.5-1.6不同类型的循环神经网络/语言模型与序列生成
5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.5不同类型的循环神经网络 上节中介绍的是 具有相同长度输入序列和输出序列的循环神经网络,但是对于很多应用\(T_{x}和 ...
- table行拖拽
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript 获取函数形参
/** * 获取函数的形参个数 * @param {Function} func [要获取的函数] * @return {*} [形参的数组或undefind] */ function getFunc ...
- mysql-front导入数据失败:“在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符”
mysql-front导入sql文件失败,弹出框显示如下: 解决方法:在选择文件时,选择合适的字符集即可 参考:http://www.th7.cn/db/mysql/201604/185149.sht ...
- 使用Sass预定义一些常用的样式,非常方便
CSS预处理技术现在已经非常成熟,比较流行的有Less,Sass,Stylus,在开发过程中提升我们的工作效率,缩短开发时间,方便管理和维护代码,可以根据自己的喜好选择一款自己喜欢的工具开发,使用很接 ...