hbase 写入过程

原创 2016年08月30日 23:00:53

1.基本原理

hbase客户端通过rpc调用将put、delete数据请求提交到对应的regionserver,regionserver对请求进行处理,并将数据最终写入hfile中,进行持久化保存。
hbase为了保证随机读取的性能,所以hfile里面的rowkey是有序的。当客户端的请求在到达regionserver之后,为了保证写入rowkey的有序性,所以不能将数据立刻写入到hfile中,而是将每个变更操作保存在内存中,也就是metastore中。metastore能够很方便的支持操作的随机插入,并保证所有的操作在内存中是有序的。当metastore达到一定的量之后,会将metastore里面的数据flush到hfile中,这样能充分利用hadoop写入大文件的性能优势,提高写入性能。
由于metastore是存放在内存中,如果regionserver因为某种原因死了,会导致内存中数据丢失。所有为了保证数据不丢失,hbase将更新操作在写入metastore之前会写入到一个write ahead log(WAL)中。WAL文件是追加、顺序写入的,WAL每个regionserver只有一个,同一个regionserver上所有region写入同一个的WAL文件。这样当某个regionserver失败时,可以通过WAL文件,将所有的操作顺序重新加载到metastore中。

2.流程

整个写入顺序图流程如下:

这里写图片描述

  • 客户端查找对应region
    客户端根据要操作rowkey,查找rowkey对应的region。查找region的过程为通过zk获取到hbase:meta表所在region。通过查找hbase:meta可以找到要更新的表每个region的startkey、endkey以及所处机器。由于hbase的rowkey有序分布在region上,所以通过每个region的startkey、endkey可以确定当前要操作rowkey的region信息。
    由于通过zk、hbase:meta查找region信息比较耗时,所以客户端会缓存表的region信息。在请求region失效时,会重新加载表的region信息。
  • regionserver写入WAL文件
    在将操作写入metastore之前,会将操作先写入到WAL文件中。WAL文件的是顺序保存操作记录的,所有每次新操作直接追加到regionserver对应的WAL文件尾部即可。
  • regionserver写入metastore
    将操作写入到WAL之后,hbase会将操作写入到metastore中。在metastore是一个排序的跳跃表,能够保证rowkey按照hfile的顺序进行排序。执行快速查找。
  • regionserver最终flush入hfile
    regionserver将操作写入的hfile不是同步发生的,是需要在metastore的内存达到一定的量(两种情况: 1.metastore的内存达到设置刷新值得90%,2:regionserver上所有region的metastore的内存占用量达到总内存的设置占用量,如0.4)之后,才会将metastore里面所有的操作写入到hfile中。同时会记录已经写入的操作的顺序id,便于WAL的日志清理线程删除WAL中无用日志信息。

参考文章:
hbase写路径

目前这篇文章中没有详细的介绍WAL文件的roll、clean的过程以及metastore的数据格式,接下来文章会详细的这些。

hbase 读写过程

Hbase在生态系统中的位置 Hbase存储的逻辑视图 Hbase的存储格式 Hbase写数据流程 Hbase快速响应数据   Hbase在生态系统中的位置   HBase位于结构化存储...

hbase 数据写入过程习知

一,客户端client    1,  Htable API 调用put方法发送写入请求,zookeeper查找系统表.ROOT.定位.mete.表存储位置,  2,  到定位的HRS(hregions...

HBase - 数据写入流程解析

众所周知,HBase默认适用于写多读少的应用,正是依赖于它相当出色的写入性能:一个100台RS的集群可以轻松地支撑每天10T的写入量。当然,为了支持更高吞吐量的写入,HBase还在不断地进行优化和修正...

HBase数据的读写流程总结

HBase数据的读写流程 HMaster; Region Server Region

HBase写入数据的过程

写入数据的详细过程? 见此地址 http://my.oschina.net/u/1464779/blog/265137 怎么确认写入操作成功呢? 只要在WAL(write ahead...

HBase编码过程中性能优化

  • 2015年05月19日 17:58
  • 30KB
  • 下载

hbase集群写不进去数据的问题追踪过程

hbase从集群中有8台regionserver服务器,已稳定运行了5个多月,8月15号,发现集群中4个datanode进程死了,经查原因是内存 outofMemory了(因为这几台机器上部署了spa...

C#通过thrift连接hbase过程

  • 2013年12月12日 23:45
  • 218KB
  • 下载

Hadoop,Hbase,nutch搭建过程遇到的问题

问题如下:在使用Nutch进行抓取的时候,程序卡在Injection urlDir下面不向下走了,查看nutch下面的hadoop.log没有报任何错误。 查看 Hbase 文件logs日志下...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hbase 写入过程
举报原因:
原因补充:

(最多只允许输入30个字)