• Hbase 读写 原理


    客户端读取信息流程
    
    (1)client要读取信息,先查询下client 端的cache中是否存在数据,如果存在,刚直接返回数据。如果不存在,则进入到zookeeper,查找到里面的相应数据存在的Root表中的地址。
    
     
    
    (2)BlockCache;设计用于读入内存频繁访问的数据,每个列族都有
    
     
    
    (3)通过数据存在ROOT表中地址找到.META,最终找到HRegion。找到HRegion后,它会先访问MemStore中是否存在数据,如果存在,则直接读取。如果没有,就再到HFile中查找数据,并将数据放到MemStore
    
     
    
    (4)最后数据返回到客户端显示。
    
     
    
     
    存储数据流程
    
    由于Hbase中默认的刷写方式是隐式刷写,所以你在put()数据时,它会自动保存到HRegion上,但当你批量处理数据时,它会将数据先保存到client端的cache中。当你关闭隐式刷写时,你put()的数据则会保存到client cache中,直到你调用刷写命令时,才会保存到HRegion中。
    
     
    
    在HRegion部分的存储:要写入的数据会先写到HMemcache 和Hlog 中,HMemcache 建立缓存,Hlog 同步Hmemcache和Hstore 的事务日志,发起Flush Cache 时,数据持久化到Hstore 中,并清空HMemecache。
    
     
    
    hbase正常写入数据时,会写入两个地方:预写式日志(WAL_or_Hlog)和Memstore(内存里的写入缓冲区), 首先写入cache,并记入WAL,然后才写入MemStore,(都写入才认为动作完成)保证数据的持久化,Hbase中的数据永久写入之前都在MemStore,当MemStore填满后,其中的数据就会写入硬盘生成HFile,
    
     
    
    HBase写数据,如果在写入HStore是发生系统异常,就可以从HLog中恢复数据,重新写 HStore中。
    
     
    
    Hbase的删除不会立即删除内容,会先打删除标签,直到执行一次大合并(major compaction),被删除的空间才会被释放
    
     
    
     
    
    代码层次分析: HTable.put(put)
    
    获取HTable对hTable->hTable.put(put)->put的数据存LinkedList<Row>->若AutoFlush=true,立即发送请求到服务器端,更新hbase;若AutoFlush=false,当缓冲区数据大于指定的HeadSize时,发送服务器更新hbase。
    
     
    
    实际底层是开启多个线程来执行更新数据。
  • 相关阅读:
    SQL大圣之路笔记——SQL 字段中英文字母如何区分大小写
    Python(二十五)
    Python(二十四)
    Python(二十二)
    Python(二十一)
    Python(二十)
    Python(十九)
    Python(十八)
    python(十七)
    python(十六)
  • 原文地址:https://www.cnblogs.com/alamps/p/8446909.html
Copyright © 2020-2023  润新知