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控制台最常用的命令就是 console.log()了,然后还有一些其他类似的命令,如: console.info() 提示信息 console.error() ...
- 一个简单的ORM制作(SQL帮助类)
一个简单的ORM制作大概需要以下几个类: SQL执行类 CURD操作类 其他酱油类 先从SQL执行类说起,可能会涉及数据库的迁移等问题,所以需要定义一个接口以方便迁移到其他数据库, 事务没提供命名,若 ...
- [POJ 3498] March of the Penguins
March of the Penguins Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 4378 Accepted: ...
- apache开源项目 -- tajo
一.体系架构 Tajo采用了Master-Worker架构(下图虚线框目前还在计划中),Master-Worker-Client之间的RPC通信是使用Protocol buffer + Netty来实 ...
- 用实例分析H264 RTP payload
用实例分析H264 RTP payload H264的RTP中有三种不同的基本负载(Single NAL,Non-interleaved,Interleaved) 应用程序可以使用第一个字节来识别. ...
- JazzyViewPager开源项目的简析及使用
JazzyViewPager是一个重写的ViewPager,能是ViewPager滑动起来更加的炫酷. 开源地址:https://github.com/jfeinstein10/JazzyViewPa ...
- android下ListView的奇异异常大集合(持续更新)
使用ListView的addFooterView或者addHeaderView报错或者不知名的异常:at android.widget.ListView.clearRecycledState(List ...
- js如何判断是否在iframe中及防止网页被别站用 iframe嵌套 (Load denied by X-Frame-Options)
1. js如何判断是否在iframe中 //方式一 if (self.frameElement && self.frameElement.tagName == "IFRAME ...
- Linux下利用ioctl函数获取网卡信息
linux下的ioctl函数原型如下: #include <sys/ioctl.h> int ioctl(int handle, int cmd, [int *argc, int argv ...
- hdu 2087-剪花布条(KMP)
题意: 求文本串最多可以分成几个模式串. 分析: KMP #include <map> #include <set> #include <list> #includ ...