hbase 学习笔记一---基本概念
Apache HBase 是Hadoop database的简称,hbase 是一个分布式,可扩展的,面向大数据存储的数据库。
region 是部分数据,所以是所有数据的一个自己,但region包括完整的行,所以region 是行为单位 表的一个子集。
每个region 有三个主要要素:
- 它所属于哪张表
- 它所包含的的第一行(第一个region 没有首行)
- 他所包含的最后一行(末一个region 没有末行)
当表初写数据时,此时表只有一个region ,当随着数据的增多,region 开始变大,等到它达到限定的阀值大小时,变化把region 分裂为两个大小基本相同的region,
而这个阀值
就
是
storefile 的设定大小(参数:hbase.hregion.max.filesize 新版本默认10G
)
,在第一次分裂region之前,所有加载的数据都放在原始区域的那台服务器上,随着表的变大
(但region 也是由block组成,具体这个block和hdfs block什么样的关系后面再说,
region是属于单一
的regionserver,除非这个regionserver 宕机,或者其它方式挂掉,再或者执行balance时,才可能会将这部分region的信息转移到其它机器上。
)
2、加锁
中的
一个列,那也会对正行加锁。
3、Hbase元数据表
表
可能会因为超过region的大小而进行分裂,所以-ROOT-才会保存.META.表的region索引,-ROOT-表是不会分裂的
。而.META. 表中则
包含所有用户region(user-space region)
的列表。表中的项使用region 名作为键。region名由所属的表名、region的起始行、创建的时间 以及对其整体进行MD5 hash值。
4、访问流程
- 客户端client 首先连接到ZooKeeper 这是就要先查找-ROOT-的位置。
- 然后client通过-ROOT- 获取所请求行所在范围 所属的.META.region的位置。
- client接着查找.META.region来获取user-space region 所在的节点和位置。
- 接着client 就可以直接和管理者那个region的RegionServer 进行交互。
会再
从表中去查询了,但如果变动了怎么办?却是存在这个问题,这样的话client 会出现错误,那此时region毫无疑问是移动了,这时,client 会再次从.META.查找region 的
新位置
并再次将其放入到缓存中去,周而复始。同样道理如果.META.的region移动了,client 也才会去-ROOT-表查询.META.region的新位置。
- mapred.map.max.attempts map 任务最大尝试次数 默认是4
- mapred.reduce.max.attempts reduce 任务最大尝试次数 默认是4
Zookeeper简单说就是协调和服务于分布式应用程序的服务。
- 保证任何时候,集群中只有一个master
- 存贮所有Region的寻址入口。
- 实时监控RegionServer的状态,将Region server的上线和下线信息实时通知给Master
- 存储Hbase的schema,包括有哪些table,每个table有哪些column family
这个参数的作用是当单个Region内所有的memstore大小总和超过指定值时,flush该region的所有memstore。RegionServer的flush是通过将请求添加一个队列,模拟生产
消费模式来异步处理的。那这里就有一个问题,当队列来不及消费,产生大量积压请求时,可能会导致内存陡增,最坏的情况是触发OOM。
上面说到,当该Region下所有的MemStore 之和超过指定值时,就触发flush,而前面又说了在一个Region下 每个Column Family 一个HStore ,那多个Column Family 这
样
问题出来了,如果一个
HStore数据量大,而另外一个HStore 仅有几条数据,会同时 flush吗? 对,这就说明了一个问题,在Hbase表设计的时候尽量设置单一ColumnFamily的
表,否则Hbase不能很好
的处理上面类似的问题。
hbase.regionserver.global.memstore.upperLimit 默认 0.4 也就是40%
为了防止MemStore占用总内存过大,当RegionServer所有Region达到总heap内存的40%,Hbase会Block所有的更新,来flush所有的MemStore,并释
放MemStore占用的内存
hbase.regionserver.global.memstore.lowerLimit 默认是 0.35 也就是 35%
这个参数表示,当该RegionServer 下所有的MemStore达到 总Heap 内存的35%时,触发flush个别占用内存大的MemStore,这是会做block,写更新还
8、HBase数据存储
一是HFile Hadoop的二进制文件,实际上是StoreFile对HFile 做了一个
轻
量级包装,所
以StoreFile 的底层就是Hfile。
二是HLog File 也就是HBase的WAL (Write Ahead Log),实际上在hadoop内部以Sequence File 的形式存在。什么是Sequence File 会在后面的Hadop章节中做介绍,现在
了解
它
是一个由二进制序列化过的key/value的字节流组成的文本存储文件。
下面是HFile 的存储格式,也是官方的一个图。
Magic内容就是一些随机数字,目的是防止数据损坏,而KeyValue 再次放大 看第二张图,KeyValue的结构图:
开始是两个固定长度的数值,分别表示Key的长度和Value的长度。紧接着是Key,开始是固定长度的数值,表示RowKey的长度,紧接着是RowKey,然后是固定长度的数值,表示
Family的长度,然后是Family,接着是Qualifier,然后是两个固定长度的数值,表示Time Stamp和Key Type(Put/Delete)。Value部分没有这么复杂的结构,就是纯粹的二进制数据。
HLog File 机构不做详细的说明了,是SequenceFile 文件,仅做一下HLogFile是如果工作的介绍一下:
hbase 学习笔记一---基本概念的更多相关文章
- JavaScript:学习笔记(2)——基本概念与数据类型
JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...
- HBase学习笔记之HBase的安装和配置
HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...
- HBASE学习笔记(四)
这两天把要前几天的知识点回顾一下,接下来我会用自己对知识点的理解来写一些东西 一.知识点回顾 1.hbase集群启动:$>start-hbase.sh ===>hbase-daemon.s ...
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- Docker:学习笔记(1)——基础概念
Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...
- OpenFlow Switch学习笔记(一)——基础概念
OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...
- HBase学习笔记之BulkLoad
HBase学习之BulkLoad bulkload的学习以后再写文章. 参考资料: 1.https://blog.csdn.net/shixiaoguo90/article/details/78038 ...
- HBase学习笔记之HBase原理和Shell使用
HBase学习指南之HBase原理和Shell使用 参考资料: 1.https://www.cnblogs.com/nexiyi/p/hbase_shell.html,hbase shell
- HBase学习笔记——概念及原理
1.什么是HBase HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. ...
随机推荐
- chrome调试、移动端调试
chrome 32版本后,添加 DevTools for Mobile 插件就可远程手机调试 DevTools for Mobile插件安装https://support.google.com/chr ...
- Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型
Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', ...
- firefox较慢
Ctrl+Shift+Delete,清楚缓存.浏览历史.下载,效果不是很明显. 地址栏输入about:support,打开配置文件夹,删掉配置文件夹里的places.sqlite,urlclassif ...
- uva 10453 - Make Palindrome(dp, 记录路径)
题目 题意: 给一个字符串 ,判断最少插入多少个字符 使字符串成为回文串, 并输出回文串. 思路:先用dp判断需要个数, 再递归输出路径. #include <iostream> #inc ...
- HDU 4869 Turn the pokers (2014 Multi-University Training Contest 1)
Turn the pokers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- ActivityManager: Warning: Activity not started, its current task has been brought to the front 的的问题
运行android程序的时候提示:ActivityManager: Warning: Activity not started, its current task has been brought t ...
- 转:MVC 下导航超链接本页面高亮的一种解决方案
前言 导航高亮一直是一个让大家头疼的问题. 纯 Javascript 的话可以判断当前页面的地址和链接地址是否有关系. 这样的弊端就是自由度太低,MVC 下会出一定的问题 (MVC 下有默认的 Con ...
- 数据库语言(二):SQL语法实例整理
连接表达式: select * from student join takes on student.ID = takes.ID; 通过on后面的谓词作为连接条件,相同的属性可以出现两次,也就是等价于 ...
- OracleBulkCopy的批量数据导入
private void button1_Click(object sender, EventArgs e) { OpenFileDialog afd = new OpenFileDialog(); ...
- 硬盘结构介绍--mbr及分区
硬盘刚买来使用时需要经过分区然后格式化才能够使用,硬盘经过分区后,分区软件便会写一个主引导扇区,这个扇区位于硬盘的 0 磁道 0 柱面第1扇区(即0区)(注意:该扇区为隐含扇区,0道0面的全部扇区均为 ...