HBase相关源码学习(PUT)

    xiaoxiao2021-04-12  30

    客户端:

    1、调用client端的putAPI

    2、客户端client的缓存会将这些puts缓存起来,缓存的大小可以在hbaseconf中配置

    3、当客户端的缓存满或者用户主动调用flush API或者HBase的配置为auto flush;满足3者任何一个时,客户端会将puts操作发送至server

    4、如何将每个put操作发送至正确的Server端呢?主要通过Region定位来获取,可以参见子页面

    5、获取到每个put操作对应的RegionServer后,客户端会根据ServerNamegroupBy这些puts,分别发送到对应的RegionServer

     

    发送失败时,会将失败的puts操作尝试重发,直到成功或者超过重试次数,若超过重试次数,将这些失败的puts操作重新添加到client端的buffer

     

     

    服务端:

    1checkAndRowMutate

    1.1 checkReadOnly

    1.2checkResources(如果memstore已经满了,先进行一次flush

    1.3startRegionOperation(获取读锁Region级别防止关闭等操作)

    1.4获取行锁getRowLock

    1.5获取updatesLocks(获取Region级别更新锁,防止过程中flush

    1.6processRowsWithLocks

    1.7判断是否有reput的协处理器

    1.8FSWALEntry写入wal(详细操作参见WAL落地分析)

    1.9将数据写入memstore

    1.10释放updatesLocks(释放后就可以做flush了)

    1.11释放行锁

    1.12wal刷写到磁盘(详细操作参见WAL落地分析)

    1.13是否有postput的协处理器

    1.14释放读锁

    1.15是否需要flush(详细操作参见FLUSH分析)

     

    转载请注明原文地址: https://ju.6miu.com/read-667973.html

    最新回复(0)