- 浏览: 61221 次
- 性别:
- 来自: 西安
最新评论
-
gmd2009:
...
memstore的flush流程分析 -
hongs_yang:
iteye上好像格式没法复制过来。可以去csdn上看,那上面有 ...
memstore的flush流程分析 -
hongs_yang:
复制到word上去看,
memstore的flush流程分析 -
qindongliang1922:
注意格式擦
memstore的flush流程分析 -
hongs_yang:
可以有一些意见发表的,后期我会慢慢发布一些hadoop/yar ...
hbase put 流程分析regionserver端
文章列表
从WordCount开始分析
编写一个例子程序
编写一个从HDFS中读取并计算wordcount的例子程序:
package org.apache.spark.examples
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
Spark on yarn执行流程源代码分析
目前的分析主要基于spark0.9.0的cdh5的版本进行分析,
源代码下载地址:https://github.com/cloudera/spark.git
下载方式:git clone url ./spark
进入spark目录,执行git checkout cdh5-0.9.0_5.0.0
源代码编译
使用sbt编译spark
运行sbt
UserScan的处理流程分析
前置说明
Userscan是通过client或cp中发起的scanner操作。
在Scan中通过caching属性来返回可以返回多少条数据,每次进行next
Major compaction时的scan操作
发起major compaction时,通过CompactSplitThread.CompactionRunner.run开始执行
-->region.compact(compaction, store)-->store.compact(compaction)-->
CompactionContext.
minor compaction时的scan操作分析
minor compaction时的scan主要是对store下的几个storefile文件进行合并,通常不做数据删除操作。
compaction的发起通过CompactSplitThread.requestCompactionInternal-->
CompactSplitThread.CompactionRunner.run-->region.
compact处理流程分析
compact的处理与split相同,由client端与flush时检查发起。
针对compact还有一个在rs生成时生成的CompactionChecker线程定期去检查是否需要做compact操作
region split流程分析
split region的发起主要通过client端调用regionserver.splitRegion或memstore.flsuh时检查并发起。
Client通过rpc调用regionserver的splitRegion方法
client端通过HBaseAdmin.split传入region name与split point(切分的rowkey,可以不传入),
通过meta得到此region所在的server,发起rpc请求,调用HRegionServer.splitRegion方法
public SplitRegionRespo ...
memstore的flush流程分析
memstore的flush发起主要从以下几个地方进行:
a.在HRegionServer调用multi进行更新时,检查是否超过全局的memstore配置的最大值与最小值,
如果是,发起一个WakeupFlushThread的flush请求,如果超过全局memory的最大值,需要等待flush完成。
b.在HRegionServer进行数据更新时,调用HRegion.batchMutate更新store中数据时,
如果region.memstore的大小超过配置的region memstore size时,发起一个FlushReg ...
Hlog的相关处理流程:
在对hbase中数据进行更新操作put/delete/append/increment操作时,记录操作日志供日志重播的相关处理。
Hlog的写入通过regionserver实例生成时生成的FSLog为的实例。
通过LogRoller
RegionServer端put数据流程分析:
client端通过MultiServerCallable.call调用rs的
数据写入(Put)处理流程分析:
Put通过生成一个HTable实例,并调用其put方法时,的执行流程,此部分分析分为client与regionserver两个部分,
client端:
Htable.put-->doPut,如果是put一个list时,会迭代调用doPut
privatevoiddoPut(Put put) throws InterruptedIOException,
RetriesExhaustedWithDetailsException {
检查上次提交是否出错,
日志重播分析
Hbase的日志重播分为启动时的日志重播与rs下线时的日志重播操作。
通过hbase.master.distributed.log.replay来控制日志的split是在region的reopen前执行还是reopen后执行
如果是true表示在reopen后执行,否则相反
Rs下线时的日志重播分析
master监听下线
master通过RegionServerTracker监听rs在zk上的节点,当节点被删除时(rs
RS下线的regionassign
上面在RS启动部分已经提到过,RS在zk中的地址注册为SESSION过期自动清理的路径(ephemeral)。
在
region assign的流程补充Master端:1.regionserver下线,zk中注册的rs节点下的server子路径session过期被删除, master触发RegionServerTracker.nodeDeleted监听事件,并调用ServerManager.expireServer2.把下线的server添加到deadServers列表中,同时从onlineServers列表中移出此server,3.触发ServerShutdownHandler.process方法,执行Hlog 的split操作。4.通过AssignmentManager.assign执行region的分 ...
HMBASE的REGION分配
Region assign分为meta的分配与userregion assign,同时包含hbase启动时与rs下线,因此从4个方面来说明regionassign
启动时的metaregion assign
针对master启动时的补充说明:
Hmaster.run.