Hbase初探

 

淘宝的搜索团队的HBase笔记,图文并茂;原来一淘的存储系统就是基于HBase的。

http://www.searchtb.com/2011/01/understanding-hbase.html

数据平台团队的HBase介绍,也很详细

http://www.tbdata.org/archives/1509

现在几乎大部分的互联网公司都在用hadoop系列啊,很值得研究

 

 

HBase是基于Bigtable论文的面向列的分布式存储系统,其存储设计是基于Memtable/SSTable的。整个存储分为两部分,一部分为内存中的MemStore(Memtable),另外一部分为磁盘(这里是HDFS)上的HFile(SSTable)。

 

 HFile是HBase实际的文件存储格式,它是基于的文件格式,替换了早期的MapFile,改进了性能。

然后HBase会进行控制,当MemStore写满了以后进行刷磁盘操作。

而HLog是HBase的日志格式实现,主要是在写入的时候进行write-ahead-log,主要为recovery而做。

http://forchenyun.iteye.com/blog/828549

http://hi.baidu.com/wewe_39/blog/item/64453f175f68044bf2de3269.html

 

很不错的hbase ppt,详细描述了hbase数据读写的核心过程

http://blog.bluedavy.com/?p=233

http://nlslzf.iteye.com/blog/799258

http://hbase.iteye.com/blog/1002252

以下就是hbase架构的核心,LSM数据结构

 本质上,在MapReduce的工作方式中,数据流式地读出和写入硬盘,MapReduce是以硬盘的传输速率不断地对这些数据进行排序和合并。 与之相比,访问关系数据库中的数据,其速率则是硬盘的寻道速率(寻道指移动磁头到盘面上的指定位置读取或写入数据的过程)。为什么要强调这一点?请看看寻道时间和磁盘传输率的发展曲线。寻道时间每年大约提高5%,而数据传输率每年大约提高20%。寻道时间的进步比数据传输率慢——因此采用由数据传输率决定性能的模型是有利的。MapReduce正是如此。

源码学习,hbase使用了跳跃列表来存储keyvalue,org.apache.hadoop.hbase.regionserver.KeyValueSkipListSet底层使用了ConcurrentSkipListMap实现,是一个有序的列表(MemStore位于内存中,也就是LSM中对应的C0),并且有log(n)的操作效率。这里的跳跃列表就是LSM中的有序树。

在org.apache.hadoop.hbase.regionserver.Store.internalFlushCache(SortedSet<KeyValue>, long, TimeRangeTracker)中把内存中的有序集合迭代取出keyvalue刷到磁盘中(StoreFile位于磁盘中,对应LSM中的C1,C2,......Cn,都是有序集合),也就形成了HBase存储的行天然有序的特点。在org.apache.hadoop.hbase.regionserver.Store.compact(List<StoreFile>, boolean, long)进行Cn的合并,小文件合成大文件,提高读数据吞吐量。

 参考LSM算法http://hi.baidu.com/hill007299/blog/item/d32a862bc3ac1e84033bf6a5.html

你可能感兴趣的:(hadoop,hbase,存储系统,lsm)