`
chgliu
  • 浏览: 5265 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

HBase源码分析(向我的师傅致敬)

阅读更多
     HBase是构建在Hadoop软件簇之上的数据库软件。它的目的是解决针对大数据随机、实时读写访问的问题,面临的环境是需要处理总计十亿级数目的行*百万级数目的列的大表集合。其理论基础来自Google的贡献:Bigtable: A Distributed Storage System for Structured Data。然后今年大家有福了,在六月份的SIGMOD’11上HBase的开发者Facebook发表了论文:Apache Hadoop Goes Realtime at Facebook(工业界的成果很少能上这么学术的会议)。
    其实,HBase下面的HDFS也提供对大数据处理和访问,但是HDFS中数据访问的特性却和Hbase完全相反——顺序、批处理类型的访问。HDFS是通过存储大文件来极大地减少磁盘磁臂寻道时间(这正是磁盘时间开销的大头),从而增大了数据访问的吞吐率;而HBase往往面临小文件的问题。正所谓巧妇难为无米之炊,你给俺糙米,还敢叫老娘做糯米糍粑!而HBase正需要从HDFS中获得数据,调和这两种南辕北辙的存取方式貌似是不可能的。但是神奇的事情发生了,HBase在HDFS上工作得很high。我承认我乱了。。。因此,本次就好好分析Google和Facebook的那两篇文章,以期找到相关的线索。
    Bigtable: A Distributed Storage System for Structured Data一文讨论了“简单数据模型”和Bigtable的设计:
简单数据模型
    Bigtable是一个稀疏、多维的有序map,这个map的索引由行key、列key和时间戳共同组成。Map中的每个value都是未经处理过的序列。

    map的每一行有行key,它可以是小于64KB的任意字符串。这些key基本是以字典序排列。一个大表的数据按照一定的行key范围进行分割,分割的结果是从一个table得到多个tablet,这些tablet分布地存储在不同的机器上。那么,用户为了访问需要的数据不可避免地要从多个机器上进行读操作。从效率角度考虑,一次操作需访问的机器数越少越好,这就需要对行key作一些处理,使相关度高的key尽量落在同一个行key范围中。比如文章中举例,对于一个存Web页面的table,同一个国际顶级域名下的网页相关度高,其中同一域名下的网页相关度也比较高,因此先按顶级域名分割,再按域名分割就是很好的分区方法。这样就把类似maps.google.com/index.html处理成com.google.maps/index.html当作行key。
    每一行是一次读/写原子操作的单元,每个tablet是分布存储和负载均衡操作的单元。
列簇
     Bigtable每列拥有一个列key,按照需求将一些列key组合在一起称为列簇。当有数据要存入列中时,要预先建立该列所在的列簇。每个列簇中的列key以family:qualifier进行表示(其中,family必须是可打印字符,qualifier可以是任意字符串)。属于一个列簇的列中的value都是同样类型的,便于压缩。
     列簇是访问控制和磁盘/内存存取的单元。
时间戳
     每个value中存储着同样数据的多个版本,每个版本由时间戳来索引。这个时间戳可以由管理Bigtable的软件来设置,也可由发起访问的客户端程序来定义。
     在同一时间内一份数据能保存的版本数是有限制的,因为当数据拥有的版本数超过了预设的阈值时,Bigtable会自动地定期垃圾回收最久的几个版本的数据。
Bigtable
     Bigtable的实现分三部分:a.供客户端连接Bigtable进行相关操作的函数库;b.master server;c.tablet server。master负责table分片tablet的分发,管理tablet server的添加和移除以及平衡tablet server负载,垃圾回收过期的数据。tablet server管理一定数量的tablet,客户端对tablet的操作请求都是由tablet server来处理,即客户端的数据不会经由master server。这样极大地减轻master的负担,对于一个单主节点的分布式存储系统来说,是非常有效的。
tablet层次结构
                                                      [METADATA tablet]-->[UserTable1]
[Chubby file]-->[Root tablet]-->|METADATA tablet|-->[UserTable2]
            (第一个元数据tablet)         |METADATA tablet|-->[...............]     
                                                      [METADATA tablet]-->[UserTableN]
    tablet的层次结构类似3层B+树。当然,要找到这个结构需要从维护Bigtable的Chubby集群里找到root tablet,它是B+树的根。root tablet包含其它所有METADATA tablet的地址,其实它和其它METADATA tablet存放在一起,可以算作第一个METADATA tablet,区别是处理方式不同(作为B+根节点),而且是无法分割的。
    位于B+树的的二层是METADATA tablet,它包括真正存放数据的tablet地址,这些地址的索引是由对应tablet所在table标识符和该tablet最后一行数据的编码而成。
    B+树的第三层就是访问的数据。
    客户端会缓存METADATA tablet,在命中的情况下,tablet的位置信息可以直接从内存中获得,而无需访问底层文件系统。
tablet分配策略
   
提供tablet服务
   
tablet数据封装  
    再来看看另一篇热乎乎的文章。Apache Hadoop Goes Realtime at Facebook一文主要描述了。

提供:
1.类图;
2.顺序图
3.时序图
分享到:
评论

相关推荐

    HBase源码分析与开发实战

    HBase源码分析与开发实战视频技术讲解高阶视频教程以及课件,内部讲解资料 内容非常详细 值得想要提高薪水的人去学习了解

    HBase源码分析

    HBase源码分析揭示了HBase在RPC通信机制方面的一些关键技术点,这包括了角色分配、通信信道建立、通信接口协议定义、对象序列化、传输控制和会话管理,以及在传输过程中可能出现的错误处理和重试机制。 HBase中的...

    hbase源码包和测试用例

    HBase的源码分析有助于理解其内部工作原理。例如,`HRegionServer`是数据服务的主要组件,负责Region的管理和数据操作;`HMaster`负责Region的分配和负载均衡;`HStore`管理Column Family,包含一系列的`HStoreFile...

    hbase源码分析

    ### HBase源码分析 #### 一、HBase性能测试要点与分析 ##### 1.1 测试环境 - **硬件配置**: - 客户端:1台 - RegionServer:5台 - Master:1台 - ZooKeeper:3台 - **软件配置**: - CPU:每台服务器配备8...

    HBase源码(hbase-2.4.9-src.tar.gz)

    HBase源码(hbase-2.4.9-src.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File ...

    hbase 源码包

    HBase 0.94.4的源码分析有助于我们深入了解其内部机制,从而更好地进行系统设计和优化。无论是对于开发者还是管理员,掌握HBase的核心原理都将极大地提升在大数据领域的实践能力。通过不断学习和实践,我们可以更好...

    【No0057】HBase源码解析与开发实战.txt

    ### HBase源码解析与开发实战 #### 一、HBase简介 HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了...

    HBase实战源码

    源码分析是理解HBase工作原理和技术细节的重要途径。HBase在大数据领域扮演着关键角色,它能够处理海量数据并提供实时访问。下面,我们将深入探讨HBase的核心概念和源码中的关键组件。 1. **HBase架构**:HBase基于...

    Hbase权威指南 随书源代码 源码包 绝对完整版

    Hbase权威指南 随书源代码 源码包 绝对完整版 maven工程,带pom文件,可以直接作为一个完整工程导入eclipse等ide。

    hbase源码带中文注释

    通过分析源码,可以了解到HBase如何进行远程调用和数据序列化。 7. **HBase Prefix Tree**: 这是一个优化HBase查询性能的模块,利用前缀树数据结构来加速范围查询。源码分析有助于提升对空间和时间复杂度的理解。 ...

    hbase权威指南源码

    通过分析和实践《HBase权威指南》的源码,读者不仅可以深化理论知识,还能掌握实际操作技巧,为解决实际项目中的问题提供有力支持。对于想深入理解HBase工作原理和优化技巧的开发者来说,这份源码是一份宝贵的资源。

    hbase-0.98.1源码包

    源码包“hbase-0.98.1-src.tar.gz”提供了HBase 0.98.1版本的完整源代码,对于理解其内部工作原理、进行二次开发或调试是非常有价值的。 HBase的核心概念包括: 1. 表:HBase中的表由行和列族组成,表名全局唯一。...

    hadoop2.x、Hive、HBase源码解析+企业级应用

    hadoop2.x、Hive、HBase源码解析+企业级应用视频,本人花钱买的视频,全部的还没有看,如果感觉老师讲的不好,请不要碰我,谢谢

    Hbase源码笔记资料.zip

    hive编译,jars,HBaseScanner构建.pptx,HBase之RegionServer命令启动流程.pptx,扩展.docx,尚硅谷大数据技术之HBase.xmind,尚硅谷大数据技术之HBase.pdf等等 很全。

    HBase性能深度分析

    ### HBase性能深度分析 HBase,作为BigTable的一个开源实现,因其卓越的分布式数据库特性在大数据处理领域占据了重要地位。然而,随着HBase在各行业的广泛应用,用户对其性能表现的关注日益增强,尤其是实时数据...

    hbase-0.94.13 jar和源码

    通过分析源码,开发者可以深入理解分布式数据库的设计思想,而jar包则使开发者能够快速构建基于HBase的应用。不过需要注意的是,0.94.13已经是较旧的版本,最新的稳定版本可能会包含更多的功能和改进,因此在生产...

Global site tag (gtag.js) - Google Analytics