ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:23.02KB ,
资源ID:3807959      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3807959.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(HBase与BigTable的比较.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

HBase与BigTable的比较.docx

1、HBase与BigTable的比较HBase与BigTable的比较(翻译) 博客分类: Hadoop HBaseHadoopMapreduce数据结构配置管理知,HBase是Google的BigTable架构的一个开源实现。但是我个人觉得,要做到充分了解下面两点还是有点困难的:一 HBase涵盖了BigTable规范的哪些部分?二 HBase与BigTable仍然有哪些区别?下面我将对这两个系统做些比较。在做比较之前,我要指出一个事实:HBase是非常接近BigTable论文描述的东西。撇开一些细微的不同,比如HBase 0.20使用ZooKeeper做它的分布式协调服务,HBase已经基本

2、实现了BigTable所有的功能,所以我下面的篇幅重点落在它们细微的区别上,当然也可以说是HBase小组正在努力改进的地方上。比较范围本文比较的是基于七年前发表的论文(OSDI06)所描叙的Google BigTable系统,该系统从2005年开始运作。就在论文发表的2006年末到2007年初,作为Hadoop的子项目的HBase也产生了。在那时,HBase的版本是0.15.0. 如今大约2年过去了,Hadoop 0.20.1和HBase 0.20.2都已发布,你当然希望有一些真正的改进。要知道我所比较的是一篇14页的技术论文和一个从头到脚都一览无余的开源项目。所以下面的比较内容里关于HBas

3、e怎么做的讲得比较多点。在文章的结尾,我也会讨论一些BigTable的如今的新功能,以及HBase跟它们比较如何。好,我们就从术语开始。术语有少数几个不同的术语被两个系统用来描述同样的事物。最显著的莫过于HBase中的regions和BigTable中的tablet。自然地,它们各自把一连串的行(Rows)切分交给许多Region server或者tablet server管理。特性比较接下来的就是特性比较列表,列表中是BigTable跟HBase的特性比较。有的是一些实现细节,有的是可配置的选项等。让人感到有困惑的是,将这些特性分类很难。特性BigTableHBase说明读/写/修改的原子性

4、支持,每行支持,每行因为BigTable不像关系型数据库,所以不支持事务。最 接近事务的就是让对每行数据访问具有原子性。HBase同样实现了”行锁”的API,让用户访问数据时给一行或 者几行数据加锁。词典顺序的行排序支持支持所有行都按照词典顺序排序数据块支持支持支持在数据存储文件中,数据是由更小的数据块构成的。这使从大的存储文件读取数据更快。数据块的大小是可 配置的,典型配置是64K。数据块压缩支持,按Column Family支持,按Column FamilyGoogle使用BMDiff和Zippy做两步处理。BMDiff工作得很好是因为存储文件中相邻的key-value对的内容经常非常相似

5、。因为数据支持多个版本,几个版本的内容会被排序然后被存在一起,它们之间有很 多相同的内容。或者row key也会被用这样的方式处理,比如如果用URL来作为row key,而这些URL来自统一个网站,那么row key也会有很多相似之 处。Zippy使用的是改进的LZW算法。HBase使用的是Java支持的标准的GZip,以及一点点GPL licensed LZO格式支持。Hadoop也有想使用BMDiff和Zippy的征兆。Column Family数量限制最多几百小于100理论上行数和列数是无限的,可是列族(column family)却不是。这个只是设计上的一些折中考率.Column Fa

6、mil命名格式可打印可打印HBase这样做的主要原因是Column Famil的名称会被作为文件 系统中的目录名称Qualifier命名的格式任意任意任意的字节数组Key/Value对的格式任意任意任意的字节数组访问控制支持无BigTable支持column family级别的访问控制。HBase暂不支持Cell多版本支持支持多版本支持是基于时间戳。版本数目限制可以基于cloumn family级别自 由配置自定义时间戳支持支持两个系统都支持用户设定时间戳,如果用户不指定,则 使用当前时间作为时间戳。数据TTL支持支持除了数据可以有多个版本,用户还可制定TTL(time-to-live),当数

7、据到期后会被清除批量写入支持支持都支持批量表操作值计数器支持支持两者都可使用特定的列作为原子计数器。HBase实现是:当计数器的值要增长时,它必须获得行锁。行过滤器支持支持两者都支持扫描行时支持行过滤器客户端脚本执行支持不支持BigTable使用Sawzall使客户端可以处理存储的数据。MapReduce支持支持支持两者都有方便的工具类让MapReduce Job扫描 表。底层文件系统GFSHDFS,S3, S3N, EBSBigTable工作在GFS之上,HBase可以使用任何文件系统,只要有该文件系统的代理或者驱动即可。存储文件格式SSTableHFile块索引在文件最后在文件最后两者都有

8、相似的块结构化的存储文件格式,并且块索引 被放在文件的最后内存映射支持不支持BigTable可以让存储文件直接映射到内存。锁服务ChubbyZooKeeperZooKeeper被HBase用来协调任务并非当成锁服务。总体说来,HBase使用ZooKeeper达到了BigTable使用Chubby的效果,只有语义有点细微区别。单个Master是不是HBase近来支持多个Master。多个Master是”热”待命模式工作,它们都侦听ZooKeeper上的Master节点。Tablet/Region数目10-100010-1000两个系统都推荐每个Region server分配相同数目的region

9、。当然这决定于很多因素,由于两个系统都使用普通电脑,出于负载考虑,它们推荐相同的数目Tablet/Region大小100-200MB256MB在两个系统中,单个Region大小是可配置的,在HBase中,默认大小为256MBRoot位置1st META / Chubby-ROOT- / ZooKeeperHBase会使用一个只有单个Region的自身表来存储Root表。二者启动时都会把Root region所在机器的 地址放到ZooKeeper或者Chubby中。客户端Region信息缓存支持不支持二者客户端都支持Region位置信息缓存并且有相应的机制去除 过时的缓存和更新缓存Meta预读支

10、持不支持(?)BigTable的一个设计就是会预读超过1个Meta Region信息并将之放入客户端缓存。Region事件记录支持支持Region相关事件(切分,分配,再分配)都会记录在Meta表中存储位置分组(Locality Groups)支持不支持这不是很确定,但是看起来BigTable中的任何东西都有 个位置分组的属相。如果多个列族的位置分组相同,那么它们将被存放在一起,并且拥有相同的配置参数。单个列族就可能是一个拥有一个成员的位置分组。HBase不支持这种选项,并将不同的列族分开存储。完全内存Column Family存储支持支持这是为需要高速存取小表准备的KeyValue缓存支持不

11、支持缓存热点Cell数据数据块缓存支持支持数据块从存储文件读入到在可配置的缓存中布隆过滤器(Bloom Filters)支持支持这些过滤器会消耗一些内存,但是可以快速检查一个指定的cell是否在一个Region Server上存在Write-Ahead Log (WAL)支持支持每个Region Server都会记录被它管理的所有Region上的数据改动Secondary Log支持不支持出于性能考虑,一旦WAL性能下降,BigTable还有别的log可以使用忽略Write-Ahead Log?支持在大量数据导入时,HBase的客户端可以选择忽略WAL快速Region切分支持支持切分regio

12、n是快速的,因为切分出来的子region暂时还会去读取原存储文件直到一个compaction将数据写入region的自有的存储文件BigTable 新特性OSDI06 BigTable论文发表已有几年,BigTable当然也有改进。杰夫.迪恩一个在Google的家伙在近来的一些演讲和演示中提到了 BigTable的新特性。我们就来瞧瞧部分新特性吧。特性BigTableHBase说明客户端隔离支持不支持BigTable可以内在地被用来服务很多单独的客户端,并且使它们的数据隔离不互相影响协同处理(Coprocessors)支持暂不支持BigTable在region中运行的代码可以随着region的

13、被切分,代码也被会切分到新的region上运行。数据错误安全支持不支持BigTable使用CRC校验码确认数据是否被安全写入。HBase没有这个特性,问题是:Hadoop是否会包含这个特性?数据中心间数据复制支持暂不支持HBase的一个issue:HBASE-1295就是关于这个特性的。变化和差异上面讨论的一些特性比较可以看出有些特性差异并不是可以简单归结为”是或否”类的问题,对这类问题我将在下面单独探讨。锁服务下面的来自BigTable论文BigTable用Chubby来完成一些不同的任务:保证在任何时候只有一个活动的Master;存储BigTable引导区地址;发现tablet serve

14、r以及在table server死亡时做善后工作;存储BigTable的schema信息(每个表的列族信息);存储访问控制列表。如果Chubby在一段较长的时候变得不可用,那么BigTable系统就会变得不可用。 BigTable如何使用Chubby跟HBase如何使用ZooKeeper有很多异曲同工之处。但有一个区别就是:HBase并不把 Schema信息存储在ZooKeeper中。它们都非常依赖锁服务的正常运作。根据我自身的经验以及我阅读HBase邮件列表所得到的,我们经常低估当 ZooKeeper无法取得足够的资源去作出实时回应时的后果。宁可让ZooKeeper集群运行在相对较老旧的但是

15、什么别的事都不干的机器上,而不是运 行在已被Hadoop或者HBase进程搞得不堪重负的机器上。一旦你的ZooKeeper没有足够的资源提供服务,就会引发多米诺骨式的效 应,HBase将会挂掉包括master节点。更新:在跟ZooKeeper开发小组讨论后,我想指出的是这并不真正意义上是ZooKeeper的一个问题。因为如果运行ZooKeeper的机 器负荷很重,那么存取ZooKeeper上的资源很可能会超时。在这种情形下,HBase的Region Server甚至Master可能会认为协调服务已经坏了,它们就会让自己停工关闭。帕特里克.亨特已经 通过邮件和发帖对此作出回应。你可以读他的邮件或

16、者帖子,然后检查自己的ZooKeeper是否有能力处理负荷。我个人建议是 将ZooKeeper集群跟HBase集群分开。你可以把ZooKeeper集群运行在一组空闲的稍微有点过时 但是性能还相当不错的机器上。这样你可以单独监控ZooKeeper集群和HBase集群中的机器,而不必有以下的烦恼:当一个机器的CPU负荷100%的 时候,你搞不清楚这个负荷究竟来自哪个进程或者有什么后果。另外一个重要区别是:ZooKeeper并不是一个像Chubby一样的锁服务系统,但是目前为止,这并不是HBase所 关心的。ZooKeeer提供一个分布式的协调服务,让HBase可以选举出Master节 点。它也可以

17、提供用以表示状态或者某个动作需要的信号量。当Chubby生成一个锁文件来表示一个tablet活动的,与此相对应的一个Region server会在ZooKeeper中生成一个节点来表示自己的存在。这个节点创建以后,只要ZooKeeper不挂,它会一直存在。在BigTable中,当一个tablet server的锁文件被删除时就表示与这个tablet server的租约失效。在HBase中,因为ZooKeeper相对少点限制的架构,这种行为会被处理得有所不同。它们只是语义上有所差别,并不意味着谁优谁劣,仅仅有所不同而已。在Chubby中,第一层级的文件包含着根tablet的位置信息。根table

18、t包含着一个特别的名叫METADATA(元数据)表的所有的tablet的位置信息。每个METADATA的tablet包含着一组用户表的tablet的位置信息。根tablet仅仅是METADATA表中第一个tablet,但是它被特别的看待它从不会被切分,这是为了保证tablet的位置层级不会超过3层。 就如上面所说的,在HBase中,根region是一个只有单个region的表。要说有什么区别的话,那就是根region并不是meta表中的第一个 不可切分的region。它们是相同的功能,只是实现上有差别。METADATA表存储着tablet的位置信息,跟在起始row key和末尾row key以

19、及表名之后。 HBase的做法有点不同,它也会为每个region存储起始的row key和末尾row key,但是末尾的row key并不是属于当前的region的,它会是另一个region的起始row key.Master的行为为了侦测一个tablet server是否不再为它的tablets服务,master会定期地查看每个tablet server锁文件的状态。当一个tablet server报告它丢失了锁文件,或者master经过几次尝试后未能联系上tablet server, master就会尝试在tablet server的锁文件上获得独占锁。如果master可以获得这个锁,还有C

20、hubby是良好工作的,这时如果tablet server已经死亡或者已经把错误上报给Chubby,这时master就可以确定该tablet server不可能恢复,于是会删除它的锁文件。一旦一个tablet server的锁文件被删除,本来被该tablet server服务的tablets会被移到没被分配的tablets集合中去。为了保证master和Chubby之间网络畅通,只要master的Chubby session过期,master将会自杀。 直到0.20.2版本,HBase的行为都相当不同。Region server利用heartbeat协议给master定期报告,master接到

21、报告就知道region server还活着。Master启动Master启动有以下步骤:(1)Master从Chubby中获取唯一的master锁,用来防止多个master的初始化(2)Master 扫描Chubby中的server目录找到活动的server.(3) Master跟多个活动的tablet server通讯,收集tablets的分配情况(4)Master扫描METADATA表得知所有的tablets集合。(4)Master如果发现有tablet并没有分配到tablet server,它会将之放入未被分配tablets集合,这样这个tablet就会被认为是可以被分配的。 就如我上面

22、提到的,HBase实际上会等待所有的region server上报它负责的region情况。当然,它也会扫描.META. 表去了解有哪些region以及它们是分配到哪些region server上了。ZooKeeper仅仅用来发布-ROOT- region所在的region server的地址。Tablet/Region切分在切分通知被丢失时(因为tablet server挂了或者master挂了)的情况下,当master要求tablet server装载被切分的那个tablet时,master会发现新的tablet. Tablet server会将此次切分通知master,因为它会发现在ME

23、TADATA中找到的tablet只是master要求它装载的tablet的一部分。Master节点会单独利用.META.表去发现一个region去切分,但是切分事件消息被丢失的情况。Master会按往常一样扫描.META.去发 现,哪些region并没有被分配。一旦发现没有被分配的region,master会用默认的策略将之分配到一个region server上。压紧(Compaction)随着写动作的执行,内存表的大小会不断增长。当内存表的容量到达一个临界点时,内存表将被冻结,一个新的内存表将会被创建,被冻结的内存表将被会转换成SSTable并被写入到GFS中。这种minor compact

24、ion操作有2个目的:1降低tablet server的内存用量,2当一个tablet server死而复生从commit log读取数据时,减少数据总量。当压紧动作发生时,认可继续执行读写操作。HBase也有相应的操作,不过被命名为”flush”。对应BigTable的”minor compaction”,HBase会把最近生成的很多较小的存储文件重写为一个包含较多数据的大文件。我们将限制此类文件的数目,方式是定期地在后台执行合并压紧操作。合并压紧操作就是读取几个SSTable和内存表的内容,然后写到一个新的SSTable中去。一旦合并压紧操作完成,老的SSTable和内存表就将可被丢弃。这

25、个动作跟HBase中的”minor compaction”差不多。读取所有的SSTable,重新写成一个SSTable的合并压紧操作被称为是major compaction相应的在HBase中,一个major compaction就是把所有的存储文件(HFile)重写成一个新的文件。文件不可修改要知道文件一旦被写入将不能修改,BigTable有如下的假定:唯一可以被修改的数据结构就是读写都可以的内存表(memtable)。为了避免同时读写内存表的冲突,我们在写内存表的数据行的时候,会先复制一个副本,这样读写就可以并行处理了。 我相信HBase中的做法跟此类似,但不是很确定。可以确定是,根据HDFS的架构,文件一旦被写入就是不能被修改的。我唯一的建议就是你自己去阅读BigTable的相关资料以形成自己的见解。这篇帖子的灵感来自一个念头:BigTable究竟实现了哪些特 性,HBase涵盖了BigTable的哪些特性?写这片帖子的困难毫无疑问是我们对BigTable的细节所知不多。但是关于它的论文数量即便是 2006年的论文列表都给人留下难以磨灭的印象。HBase作为一个开源项目,而且项目的贡献者是为数不多的有着全职工作的人,现在虽不能说跟 BigTable相提并论,但怎么说都我都认为现在的成果是一个巨大的成就。看看0.21和0.22的路线图,将来它们之间不大的差距将会变得更加缩小。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2