hbase读写流程
一. Hbase读流程
- META表记录着表的原信息,根据rowkey查询META表,获取所在region信息
- 客户端去相应的regionServer查询数据,先查询memStore(memstore是一个按key排序的树形结构缓冲区),有就返回,没有继续查找
- 查询regionServer的读缓存BlockCache是否存在rowkey的对应数据,有就返回,没有就继续查询。每次get一次时,hbase把相邻的一段数据也放到内存中缓存起来,方便顺序读
- 查询HFile中是否有相应记录
(1)hfile的block索引会放在内存中,block是一段氛围内的键值对,通过rowkey找到block
(2)下载hfile查找记录
二. 写流程
- client向region server提交写请求
- region server找到目标region
- region检查数据是否与schema一致
- 如果客户端没有指定版本,则获取当前系统时间作为数据版本
- 将更新写入WAL log (hlog)
- 将更新写入Memstore
判断Memstore的是否需要flush为Store文件。
每 一个put的操作实际上是RPC的操作,它将客户端的数据传送到服务器然后返回,这只适合小数据量的操作,如果有个应用程序需要每秒存储上千行数据到 HBase表中,这样处理就不太合适了。HBase的API配备了一个客户端的写缓冲区,缓冲区负责收集put操作,然后调用RPC操作一次性将put送 往服务器。默认情况下,客户端缓冲区是禁止的。可以通过自动刷写设置为FALSE来激活缓冲区。 table.setAutoFlush(false);void flushCommits () throws IOException这个方法是强制 将数据写到服务器。用户还可以根据下面的方法来配置客户端写缓冲区的大小。 void setWritaeBufferSize(long writeBufferSize) throws IOException;默认大小是 2MB,这个也是适中的,一般用户插入的数据不大,不过如果你插入的数据大的话,可能要考虑增大这个值。从而允许客户端更高效地一定数量的数据组成一组通 过一次RPC请求来执行。给每个用户的HTable设置一个写缓冲区也是一件麻烦的事,为了避免麻烦,用户可以在
三.Hbase优化
行健设计
(1)使用复合行健 (使用更多的条件查询) eg: 上述问题采用( 手机号倒置 : 时间戳倒置 )
(2)行健要尽量离散而不是连续 , 使得连续插入的记录分散到多个HregionServer中 , 查询时达到并发查
(3)尽量保证行健的数据长度短 , 减少Hfile加载到内存的内存空间表存储数据,按照行健存储,划分region时,也是按照region划分
热点问题 : hbase的查询插入集中在某几个region中,不能分散.
(时间戳 手机号) 存储
eg: 不能用时间戳作为行健, 时间戳单调递增, 添加数据时会全部写在一个region, 降低并发查询添加效率
可以把手机号倒置作为行健, 因为手机号末尾数字1-9等概率,可以做到分散存储布隆过滤器
(用一个数组,数组的每个元素的值是0或1,表示该位置是否存在数据, 数组角标是被判断集合元素值的hash值与数组长度取模)
用极小的空间判断一个元素不在一个集合中
(1)极小空间 : 一个位数组
(2)判断不在一个集合 : 这个位数组, 元素值只是0/1表示该位是否有元素; 元素哈希值对维数组长度取模
(3)把位数组模位置上的元素置1 . 当查询时发现该位置为0说明元素不在集合中 . 这种过滤器不能100%确定元素的存在, 但是能发现元素不在集合中【注】:客户端查数据,先查到数据属于哪个region,根据region找到hfile ,结合block的索引和hfile在磁盘中找到block块, 再根据行健,列祖,列标识符找到block中的kv键值对. hbase把查到的数据缓存在内存中. 使用bloom过滤器. 在查找结果缓存阶段,可以快速判断要查找的键值对是否已经在内存中
可以设置对每个行健设置bloom过滤器. 也可以对每个列设置bloom过滤器列族的块
(1)HFile读取数据的最小单位是block , 这个block默认大小是64k , 查找某一个值时 , 要遍历这个块中的所有
(2)如果存在大量随机读 , block块小一点好
(3)如果存在大量顺序读 , block块大一点好设置autoFlush=false
hbase读写流程的更多相关文章
- hbase读写流程分析
前言 最近被大佬问到一个问题,hbase查询数据在最坏的场景下需要进行几次rpc,当时就懵了..下面主要对client端代码进行分析.阅读文章和看源码更配~ 读数据 流程总览 1. 从zookeepe ...
- Hbase读写流程和寻址机制
写操作流程 (1) Client通过Zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据. (2) 数据被写入Region的MemStore,直到MemStore ...
- Hbase的读写流程
HBase读写流程 1.HBase读数据流程 HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在 ...
- HBase二级索引、读写流程
HBase二级索引.读写流程 一.HBse二级索引方案 1.1 基于Coprocessor方案 1.2 Phoenix二级索引特点 1.3 Phoenix 二级索引方案 二.HBase读写流程 2.1 ...
- HBase 数据读写流程
HBase 数据读写流程 2016-10-18 杜亦舒 读数据 HBase的表是按行拆分为一个个 region 块儿,这些块儿被放置在各个 regionserver 中 假设现在想在用户表中获取 ro ...
- Hbase架构和读写流程
转载自:http://www.cnblogs.com/muzili-ykt/p/muzili_ykt.html 在HBase读写时,相同Cell(RowKey/ColumnFamily/Column相 ...
- 【从零单排HBase 03】深入HBase读写
在了解HBase架构的基础上,我们需要进一步学习HBase的读写过程,一方面是了解各个组件在整个读写过程中充当的角色,另一方面只有了解HBase的真实请求过程,才能为后续的正确使用打下初步基础,毕竟, ...
- HDFS文件读写流程
一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而对于低延时数据访问.大量 ...
- 【转】linux IO子系统和文件系统读写流程
原文地址:linux IO子系统和文件系统读写流程 我们含有分析的,是基于2.6.32及其后的内核. 我们在linux上总是要保存数据,数据要么保存在文件系统里(如ext3),要么就保存在裸设备里.我 ...
随机推荐
- 第n小的质数
总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个正整数n,求第n小的质数. 输入 一个不超过10000的正整数n. 输出 第n小的质数. 样例输入 10 样例输出 29 代碼 ...
- PHP设置图片文件上传大小的具体实现方法
PHP默认的上传限定是最大2M,想上传超过此设定的文件,需要调整PHP.apache等的一些参数 我们简要介绍一下PHP文件上传涉及到的一些参数: •file_uploads :是否允许通过HTTP上 ...
- hadoop常用管理员命令
hadoop job -list 列出正在运行的job hadoop job -kill kill掉job hadoop fsck 检查HDFS坏快 hadoop dfsadmin -report检查 ...
- mysql数据库从库同步延迟的问题
在从服务器上执行show slave status;可以查看到很多同步的参数,我们需要特别注意的参数如下,希望文章对各位会有所帮助. 在从服务器上执行show slave status;可以查看到很多 ...
- zf2 中 new Express 的用法
在使用联表查询时,如查联表条件有多个也可以,但是连接条件在zf2中会自动给列加``符号,所以要加像id = 1 这样的,他自动给1加``就无示执行了,这时候可以使用new Express(''),他里 ...
- 利用zip(或者phar)协议进行本地文件包含
$include_file=$_GET[include_file];if ( isset( $include_file ) && strtolower( substr( $includ ...
- CSS实例:鼠标滑过超级链接文字时改变背景颜色
先讲简单的: 通过CSS可以设置超链接在不同时刻的颜色: <style> a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #0 ...
- HTML5服务器推送事件
目前客户端(浏览器)和服务端交互大致有以下几种方式: 1)form表单提交方式,适合访问量不大,对用户体验要求不高的web系统开发,或者页面整体刷新无伤大雅的场合,通信方向是客户端提交给服务端,是客户 ...
- 数据结构线性表(js实现)
最近在复习数据结构的过程中,发现基本上数据结构都是用C来实现的,自己之前学习的时候也是用C去写的,由于目前对js更为熟悉一些,所以这里选择使用js去实现其中的某些算法和结构.实际上算法和语言关系不大, ...
- ASP.NET MVC在服务端把异步上传的图片裁剪成不同尺寸分别保存,并设置上传目录的尺寸限制
我曾经试过使用JSAjaxFileUploader插件来把文件.照片以异步的方式上传,就像"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01- ...