Replication核心原理 hbase.replication.source.service 配置说明了使用哪个类来作为 Hbase 的 Replication 实现类。...hbase.replication.source.service 这个默认配置实现就是 org.apache.hadoop.hbase.replication.regionserver.Replication...ReplicationTracker 主要用于跟踪 Zookeeper 中 /hbase/replication 中 znode 的状态,Hbase 的 Replication 是通过 zk 来协助完成的...用于监控 Hbase Replication。...很可能是考虑到了性能方面的影响,Hbase 的Replication 方案是异步传输。
一,基本功能介绍 -root-表在HBase 0.9.6以后的版本被移除了。...Hbase 0.9.6以后,移除了-root-表,用hbase:meta表代替了.meta表,hbase:meta表存的位置直接存储于Zookeeper上。...info:server:存储hbase:meta表的regionserver的server:port info:serverstartcode:该Regionserver拥用hbase:meta表的起始时间...Hbase:meta所在的regionserver宕机后会重新分配给其它的regionserver。每次修改都会更新RS的wal的。 2,hbase:meta和用户region信息不一致怎么处理。...A),hbase提供的有修复指令。 B),可以根据源码去实现自己的修补指令。 元数据和用户实际的表信息不一致是很常见的现象,所以这两点后面会详细介绍。
作者:熊训德 腾讯云工程师 本文档从源码角度分析了,hbase 作为 dfs client 写入hdfs 的 hadoop sequence 文件最终刷盘落地的过程。...之前在《wal线程模型源码分析》中描述wal的写过程时说过会写入hadoop sequence文件,hbase为了保证数据的安全性,一般都是写入同为hadoop生态的hdfs(Hadoop Distribute...下图是《Hbase权威指南》中描述Hbase底层存储结构的顶层结构图。...wal包中是作为wal向datanode的writer,它在FSHLog是使用工厂模式createWriterInstance()实例化,然后调用init()方法初始化: 从源码中可以看到真正写实例是...相关推荐 Hbase WAL线程模型源码分析 HBase跨版本数据迁移总结 Hbase的WAL在RegionServer基本调用过程
作者介绍:熊训德 腾讯云工程师 Hbase 的 WAL 机制是保证 hbase 使用 lsm 树存储模型把随机写转化成顺序写,并从内存 read 数据,从而提高大规模读写效率的关键一环。...源码分析 下面将从源码角度分析其中具体实现过程和细节。...Disruptor通过 java.util.concurrent.ExecutorService 提供的线程来触发 Consumer 的事件处理,可以看到hbase的wal中只启了一个线程,从源码注释中也可以看到...小结 Hbase的WAL机制是保证hbase使用lsm树存储模型把随机写转化成顺序写,并从内存read数据,从而提高大规模读写效率的关键一环。...wal的多生产者单消费者的线程模型让wal的写入变得安全而高效,本文档从源码入手分析了其线程模型为以后更好开发和研究hbase其他相关知识奠定基础。
hbase的源码终于搞一个段落了,在接下来的一个月,着重于把看过的源码提炼一下,对一些有意思的主题进行分享一下。...现在我们讲一下HTable吧,为什么讲HTable,因为这是我们最常见的一个类,这是我们对hbase中数据的操作的入口。 1.Put操作 下面是一个很简单往hbase插入一条记录的例子。...//自己处理去吧... } 这个是带正则表达式的模糊查询的scan查询,Scan这个类是包括我们查询所有需要的参数,batch和caching的设置,在我的另外一篇文章里面有写《hbase
在讲源码之前,先说一下它的分类和作用。...先说一下怎么使用吧,下面分别是它们是shell命令,可以在hbase的shell里面执行。...1、创建CompactionContext 2、判断是否是非高峰时间,下面是这两个参数的值 int startHour = conf.getInt("hbase.offpeak.start.hour",...hbase.hstore.compaction.ratio 高峰时段,默认值是1.2 hbase.hstore.compaction.ratio.offpeak 非高峰时段...咱们可以将它这个参数hbase.hstore.blockingStoreFiles设置得大一些,弄出来一个比较大的数字。 Split 好,我们接着看requestSplit。
HFile概述 HFile是HBase中实际存数据的文件,为HBase提供高效快速的数据访问。它是基于Hadoop的TFile,模仿Google Bigtable 架构中的SSTable格式。...,先从入口看起,那就是StoreFile.Writer的append方法,先看怎么写入的,然后它就怎么读了,不知道怎么使用这个类的,可以看看我写的这篇文章《非mapreduce生成Hfile,然后导入hbase...Path hfilePath = getRelativeTablePath(path); this.tempPath = new Path(new Path(rootDir, HConstants.HBASE_TEMP_DIRECTORY
二,源码相关的重要类 1,HTable 重点是Hbase类初始化的时候提交的请求的任务的线程池的初始化 HConnectionImplementation的getThreadPool方法。...三,scan的源码实现 Scan的源码实现过程,主要是帮助大家更好的阅读源码。...其实,应该关注点比较多,贴源码比较累赘,我这是大致骨架都有了,大家可以根据这个骨架结合源码去看,节省时间。...2,对于filter的使用,请大家先参考hbase权威指南,后面浪尖再接个各个filter和源码讲解。...对于hbase 1.0.0,列举以下几种,方便大家自己去阅读相关源码。
单个BufferedMutator也能够很高效用于大数据量的在线系统,来成批的写puts入hbase表。...catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 三,源码介绍...BufferedMutatorImpl 用来和hbase表交互,类似于Htable,但是意味着批量,异步的puts。...四,总结 Hbase的JAVA API客户端,写操作有三种实现: 1,HTablePool 源码请看hbase权威指南。 ? 2,HConnection 这种方式要自己实现一个线程池。...客户端读写数据的操作,我们就讲这两篇,后面开始讲HBase的MR建立二级索引的实现及原理源码。然后就开始讲解管理类操作的实现。
导语 本文档主要从源码的角度分析了,hbase的写缓存的读写以及flush过程。...hbase的mvcc机制将结合行锁在后面的hbase效率的源码分析中具体分析。可先参考: http://m.blog.csdn.net/article/details?...读的角度 hbase的读需要从要读三个位置,blockcache、memstore和hfile着手。...稍微需要注意的是,在flush的时候有可能会失败,这时候意味着memstore未被持久化,则wal需要去重做,会启动一个单独且唯一的线程去做这个,从源码注释上看,当前只有regionserver重启会发生这种事情...至此,memstore的读写已经刷入源码分析就结束了,可以看到memstore作为hbase写缓存为了实现快速顺序写做出的设计努力。下一篇文档将分析哪些情况下memstore会被刷写。
它就想是给数据库做备份,尤其是做删除动作之前,不管是hbase还是hdfs,请经常做Snapshot,否则哪天手贱了。。。 直接进入主题吧,上代码。...这个方法里面也没干啥,就是检查一下是否可以对这个表做备份或者恢复的操作,然后就会重建这个工作目录,这个工作目录在.hbase-snapshot/.tmps下面,每个snapshot都有自己的目录。 ...MemStore当中保存的是KeyValue的集合,写入其实就是一个循环,调用StoreFile.Writer的append方法追加,具体的可以看我的那篇博客《非mapreduce生成Hfile,然后导入hbase...IOException("Failed to create reference file:" + referenceFile); } } } } 在工作目录在.hbase-snapshot...这个要到下一章,从snapshot中恢复,才能弄明白了,这个和hbase的归档文件机制有关系,hbase删除文件的时候,不是直接删除,而是把它先放入archive文件夹内。
问题分析 思路:分离读写scan请求,各种处理各自的 源码内部 WriteQueues; Queues; ScanQueues; 优化参数 hbase.regionserver.handler.count...线上:0.2 hbase.ipc.server.callqueue.read.ratio : 默认为0,服务器端设置读写业务分别占用的队列百分比以及handler百分比。...线上:0.6 hbase.ipc.server.call.queue.scan.ratio:默认为0,服务器端为了将get和scan隔离设置了该参数。...线上:0.1 hbase.ipc.server.call.queue.scan.ratio 默认0 scan请求直接打入read队列长时间不释放,导致正常read超时告警 源码理解 HRegionServer...x 0.1(hbase.ipc.server.callqueue.handler.factor) = 10,读写请求队列总个数 写队列个数 10 x 0.5hbase.ipc.server.callqueue.read.ratio
看源码很久了,终于开始动手写博客了,为什么是先写负载均衡呢,因为一个室友入职新公司了,然后他们遇到这方面的问题,某些机器的硬盘使用明显比别的机器要多,每次用hadoop做完负载均衡,很快又变回来了。...hbase.master.balancer.stochastic.moveCost,默认值是100 localityCost hbase.master.balancer.stochastic.localityCost...hbase.master.balancer.stochastic.readRequestCost,默认值是5 WriteRequestCostFunction hbase.master.balancer.stochastic.writeRequestCost...hbase.master.balancer.stochastic.storefileSizeCost,默认值是5 Storefile的默认值是5,那么低。。。...根据虚拟的集群状态生成RegionPlan,这里就不说了 List plans = createRegionPlans(cluster); 源码的分析完毕,要想减少存储内容分布不均匀
HLog概述 hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢复,下面先看看HLog的图。...this.optionalFlushInterval); } } 它这里是有一个判断条件的,如果判断条件不成立就立即同步,等待this.optionalFlushInterval时间,默认的同步间隔是1000,它是通过参数hbase.regionserver.optionallogflushinterval
compactionChecker用于周期性地检查当前是否有compact请求,实现类是ScheduledChore检查周期由参数threadWakeFrequency控制,默认值是10s,也可以在参数hbase.server.thread.frequency...从chore方法中可以直观的看到major compact是通过isMajorCompaction()方法判断的这是很多判断条件的合成,其中最为重要的一个是hbase.hregion.majorcompaction...因此,通过设置hbase.hregion.majorcompaction = 0可以关闭CompactionChecke触发的major compaction,但是无法关闭用户调用级别的majorcompact
在上一章中提到了编码压缩,讲了一个简单的DataBlockEncoding.PREFIX算法,它用的是前序编码压缩的算法,它搜索到时候,是全扫描的方式搜索的,如此一来,搜索效率实在是不敢恭维,所以在hbase...下面我们就具体说一下在hbase的工程里面它是什么样子的,下面是一个例子: * Example inputs (numInputs=7): * 0: AAA * 1: AAA * 2: AAB
else { //是hfile的情况 HFileLink.create(conf, fs, familyDir, regionInfo, hfileName); } } 在hbase
因为major compact很影响hbase的读写性能,所以在不同版本是否major compact其实社区一直都在寻求优化,可根据需要选择不同的实现类RatioBasedCompactionPolicy...有关不同Policy的算法性能影响及适合场景可参考文章: http://hbasefly.com/2016/07/25/hbase-compaction-2/ hbase1.1.3版本使用的实现类是RatioBasedCompactionPolicy...requestCompaction方法,但这两个方法都会调用CompactSplitThread的requestCompactionInternal方法: 这个是requestCompactionInternal方法原型: 从源码中可以看到...的读写性能均有一定影响,有关对性能影响以及相关调优可参考: http://hbasefly.com/2016/07/13/hbase-compaction-1/ http://hbasefly.com/...2016/07/25/hbase-compaction-2/
这一章是server端开始的第一章,有兴趣的朋友先去看一下hbase的架构图,我专门从网上弄下来的。 按照HMaster的run方法的注释,我们可以了解到它的启动过程会去做以下的动作。...IOException { //该参数默认为false if (this.distributedLogReplay) { // In log replay mode, we mark hbase...currentMetaServer, regions); } else { // In recovered.edits mode: create recovered edits file for hbase...文件恢复是通过hbase.master.distributed.log.replay参数来设置,默认是false,走的recovered.edit模式。...经过分配过的region,hmaster在启动的时候默认会沿用上一次的结果,就不再变动了,这个是由一个参数来维护的hbase.master.startup.retainassign,默认是true。
领取专属 10元无门槛券
手把手带您无忧上云