`
brianf
  • 浏览: 37437 次
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
HBase通过租约来控制每个scanner的操作时间。 1. 租约线程初始化: HRegionServer的run方法会调用一次preRegistrationInitialization方法,再调用initializeThreads时,会new lease this.leases = new Leases((int) conf.getLong( HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY, HConstants.DEFAULT_HBASE_REGIONSERVER_LEASE_PERIOD), ...
HFile和Hlog是HBase中两大文件存在格式,HFile用于存储数据,Hlog用于保证数据写入HFile中。 两者都有自己的cleaner逻辑。HFileCleaner和LogCleaner都是继承CleanerChore类 public class HFileCleaner extends CleanerChore<BaseHFileCleanerDelegate> public class LogCleaner extends CleanerChore<BaseLogCleanerDelegate> 需要说明的是LogCleaner 除了默认的org.apac ...
在分享replication时,有同事提出replication延时怎么样,(基于0.94.3) 本文主要代码分析一下Hlog生成及对relication的影响。具体replication请参考 http://brianf.iteye.com/blog/1776936 首先分析hlog什么时候产生: 在生成HLog对象时,会调用HLog的rollWriter(),此时由于this.writer为null,所以通过rollWriter方法会创建第一个hlog文件,之后会调用replicaton相关的参见http://brianf.iteye.com/blog/1776936 // r ...
1. Cache 读写 调用逻辑: hmaster.handleCreateTable->HRegion.createHRegion-> HRegion. initialize->initializeRegionInternals->instantiateHStore ->Store.Store->new CacheConfig(conf, family)-> CacheConfig.instantiateBlockCache->new LruBlockCache 传入参数 /** * Configurable constructor ...
随着HBase的大规模应用,HBase的容灾显得特别的重要。 本文主要从代码层面分析HBase replication (基于HBase0.94.3) 分为正常replication处理逻辑和RS Fail两块。 1.正常replication处理逻辑 首先是HLog的rollwrite方法,调用prelogRoll, 在ZK上加上新的Hlog 再调用postlogRoll,调用Replication的postLogRoll /** * Gateway to Replication.  Used by {@link org.apache.hadoop.hbase.regio ...

HBase大集群

为什么HBase没有大集群? 因为如果一个HBase集群很大,有很多应用在上面,这些应用的应用场景可能不同,如有些是读,有些写,有些写的多,有些读的多,有些很重要,有些不重要,如果不加以区分,那么这个集群就无法运行下去。 如何做? 对多租户(Multi-tenancy)的这种情况,对资源进行隔离显得尤为重要,比如可以用虚拟的group来代表若干台RS,将这个虚拟的Group给某个应用,不同的group之间互不影响 ,比如各自有不同的Memstore大小,不同的参数。 待续···
HBase  MVCC(Multi Version Consistencey Control) mvcc多版本并发控制,是相对锁来说对并发处理的一种方法, 在HBase中,当writernumber > reade number 表明这个memstore在写,如此时读需要等待。 1. MVCC初始化 在HRegion 的initializeRegionInternals方法中,初始化 Return the largest memstoreTS found across all storefiles in the given list. Store files that were c ...
如果一个文件正在写,那么NN不会执行Replication,因为此时file处于under_construction。 但是如果HDFS 在做某个block的Replication时会读这个block,且正读了一半block,有client过来append这个文件会怎么样???
什么时候split? 当某store所有文件总大小大于某个值时split,注意,并不是判断某个storefile大小大于某个值。 什么时候compact? 检查整个region内所有store中任一个store 的总storefile是不是太多了(大于hbase.hstore.blockingStoreFiles(7)),太多了则会先进行compact。 flush会遍历这个region的所有store,并一个个执行。 compact遍历这个region找到符合条件的store进行compact. 1. 在flush之后会判断是否需要split和compact 这里的split有一个判断条 ...
HBase rpc 0.94中 例如在client put数据时,会调用htable的flushCommits,再调HConnectionImplementationr的processBatch,再调processBatchCallback 中,在这里异步调用线程,并使用future取得结果,最终执行的是call方法。 // step 2: make the requests Map<HRegionLocation, Future<MultiResponse>> futures = new HashMap ...
我们都知道compact分为两类,一类叫Minor compact ,一类叫Major compact, 两者有什么区别呢? 两者的区别在于:Minor compact只是进行文件merge操作,而Major compact除了做文件Merge操作,还会将其中的delete项删除。 引用There are two types of compactions: minor and major. Minor compactions will usually pick up a couple of the smaller adjacent StoreFiles and rewrite them as o ...
zookeeper中,任何节点的写都会影响到整体的读。 这个怎么理解呢,任何一个节点的更改,都会block各个follow的queue,只有此次两阶级提交完成之后,follow收到leader的commit后,这台机器上的后继的操作才能进行。 情景假设 leader:A follow: B,C client向及提交一个更改请求,后面两阶段提交(leader发propose, 等待follow ack,leader收到ACK后,向所有follow发送commit), 在两阶段提交中,C接到A的propose,然后放入队列后,这时假设client向C发出读请求,这时C会将读请求放入队列,要等到前面 ...
在HBase上传时,会通过配置参数hbase.client.keyvalue.maxsize来检查是否符合要求,如果没有设置此值,那么HBase不会限制大小 ,如果是这样,可以会在compact时候一次加载导致OOM。 可能的解决办法是设置一个合适的值给hbase.client.keyvalue.maxsize。
1. Put及flush a.       Client提交put,若设置autoflush=false,则直接提交到regionserver,若为true,则等到2M或者执行hbase.flushcommits()提交给rs. b.       Put到Regionserver层次,先判断则这台regionserver的 所有memstore的总占用内存是否大于最 ...
Global site tag (gtag.js) - Google Analytics