HBase与BigTable的比较
- 格式:doc
- 大小:16.20 KB
- 文档页数:12
第一章1.试述信息技术发展史上的3次信息化浪潮及具体内容。
2.试述数据产生方式经历的几个阶段答:运营式系统阶段,用户原创内容阶段,感知式系统阶段。
3.试述大数据的4个基本特征答:数据量大、数据类型繁多、处理速度快和价值密度低。
4.试述大数据时代的“数据爆炸”的特性答:大数据时代的“数据爆炸”的特性是,人类社会产生的数据一致都以每年50%的速度增长,也就是说,每两年增加一倍。
5.数据研究经历了哪4个阶段?答:人类自古以来在科学研究上先后历经了实验、理论、计算、和数据四种范式。
6.试述大数据对思维方式的重要影响答:大数据时代对思维方式的重要影响是三种思维的转变:全样而非抽样,效率而非精确,相关而非因果。
7.大数据决策与传统的基于数据仓库的决策有什么区别答:数据仓库具备批量和周期性的数据加载以及数据变化的实时探测、传播和加载能力,能结合历史数据和实时数据实现查询分析和自动规则触发,从而提供对战略决策和战术决策。
大数据决策可以面向类型繁多的、非结构化的海量数据进行决策分析。
8.举例说明大数据的基本应用答:9.举例说明大数据的关键技术答:批处理计算,流计算,图计算,查询分析计算10.大数据产业包含哪些关键技术。
答:IT基础设施层、数据源层、数据管理层、数据分析层、数据平台层、数据应用层。
11.定义并解释以下术语:云计算、物联网答:云计算:云计算就是实现了通过网络提供可伸缩的、廉价的分布式计算机能力,用户只需要在具备网络接入条件的地方,就可以随时随地获得所需的各种IT资源。
物联网是物物相连的互联网,是互联网的延伸,它利用局部网络或互联网等通信技术把传感器、控制器、机器、人类和物等通过新的方式连在一起,形成人与物、物与物相连,实现信息化和远程管理控制。
12.详细阐述大数据、云计算和物联网三者之间的区别与联系。
第二章1.试述hadoop和谷歌的mapreduce、gfs等技术之间的关系答:Hadoop的核心是分布式文件系统HDFS和MapReduce,HDFS是谷歌文件系统GFS的开源实现,MapReduces是针对谷歌MapReduce的开源实现。
林⼦⾬⼤数据技术原理及应⽤第四章课后作业答案⼤数据技术原理与应⽤第四章课后作业黎狸1.试述在Hadoop体系架构中HBase与其他组成部分的相互关系。
HBase利⽤Hadoop MapReduce来处理HBase中的海量数据,实现⾼性能计算;利⽤Zookeeper作为协同服务,实现稳定服务和失败恢复;使⽤HDFS作为⾼可靠的底层存储,利⽤廉价集群提供海量数据存储能⼒; Sqoop为HBase的底层数据导⼊功能,Pig 和Hive为HBase提供了⾼层语⾔⽀持,HBase是BigTable的开源实现。
2.请阐述HBase和BigTable的底层技术的对应关系。
3.请阐述HBase和传统关系数据库的区别。
4.HBase有哪些类型的访问接⼝?HBase提供了Native Java API , HBase Shell , Thrift Gateway , REST GateWay , Pig , Hive 等访问接⼝。
5.请以实例说明HBase数据模型。
6.分别解释HBase中⾏键、列键和时间戳的概念。
①⾏键标识⾏。
⾏键可以是任意字符串,⾏键保存为字节数组。
②列族。
HBase的基本的访问控制单元,需在表创建时就定义好。
③时间戳。
每个单元格都保存着同⼀份数据的多个版本,这些版本采⽤时间戳进⾏索引。
7.请举个实例来阐述HBase的概念视图和物理视图的不同。
8.试述HBase各功能组件及其作⽤。
①库函数:链接到每个客户端;②⼀个Master主服务器:主服务器Master主要负责表和Region的管理⼯作;③③许多个Region服务器:Region服务器是HBase中最核⼼的模块,负责存储和维护分配给⾃⼰的Region,并响应⽤户的读写请求9.请阐述HBase的数据分区机制。
每个⾏区间构成⼀个分区,被称为“Region”,分发到不同的Region服务器上。
10.HBase中的分区是如何定位的?通过构建的映射表的每个条⽬包含两项内容,⼀个是Regionde 标识符,另⼀个是Region服务器标识,这个条⽬就标识Region和Region服务器之间的对应关系,从⽽就可以知道某个Region被保存在哪个Region服务器中。
四种重要的⾮关系型数据库Hbase列式存储以流的⽅式在列中存储所有的数据。
对于任何记录,索引都可以快速地获取列上的数据;列式存储⽀持⾏检索,但这需要从每个列获取匹配的列值,并重新组成⾏。
HBase(Hadoop Database)是⼀个⾼可靠性、⾼性能、⾯向列、可伸缩的分布式存储系统,利⽤HBase技术可在廉价PC Server上搭建起⼤规模结构化存储集群。
HBase是Google BigTable的开源实现,模仿并提供了基于Google⽂件系统的BigTable数据库的所有功能。
HBase可以直接使⽤本地⽂件系统或者Hadoop作为数据存储⽅式,不过为了提⾼数据可靠性和系统的健壮性,发挥HBase处理⼤数据量等功能,需要使⽤Hadoop作为⽂件系统。
HBase仅能通过主键(row key)和主键的range来检索数据,仅⽀持单⾏事务,主要⽤来存储⾮结构化和半结构化的松散数据。
Hbase中表的特点:⼤,稀疏,⾯向列Hadoop⽣态系统中的各层系统HBase位于结构化存储层;HDFS为HBase提供了⾼可靠性的底层存储⽀持;MapReduce为HBase提供了⾼性能的计算能⼒;Zookeeper为HBase提供了稳定服务和失败恢复机制;Pig和Hive还为HBase提供了⾼层语⾔⽀持,使得在HBase上进⾏数据统计处理变的⾮常简单;Sqoop则为HBase提供了⽅便的RDBMS数据导⼊功能,⽅便数据迁移;Hbase在互联⽹存储的⼏个应⽤场景:1.抓取增量数据使⽤HBase 作为数据存储,抓取来⾃各种数据源的增量数据,如抓取⽤户交互数据,以备之后进⾏分析、处理2.内容服务传统数据库最主要的使⽤场合之⼀是为⽤户提供内容服务,如URL短链接服务,可以HBase为基础,存储⼤量的短链接以及和原始长链接的映射关系3.信息交换Facebook的短信平台每天交换数⼗亿条短信,HBase可以很好的满⾜该平台的需求:⾼的写吞吐量,极⼤的表,数据中⼼的强⼀致性Hbase与传统关系型数据库区别:数据类型HBase只有简单的字符串类型,所有类型都由⽤户⾃⼰处理,它只保存字符串;关系数据库有丰富的类型选择和存储⽅式。
HBase学习报告0 引言随着互联网的发展,用户的使用量和使用范围变得越来越广,因此会产生大量的数据,对于这些数据的储存、处理,传统的数据库表现出越来越多的问题,从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,查询效率随着数据量的增长变得越来越低。
面对这些问题,一些新型的数据库应运而生,对海量数据的存储和处理提出了解决方案,HBase就是其中之一。
1 HBase简介Hbase是Apache Hadoop的数据库,能够对大数据提供随机、实时的读写访问,具有开源、分布式、可扩展及面向列存储的特点。
HBase的目标是处理大型的数据,具体来说就是使用普通的硬件配置即可处理成千上万行的列和行组成的大数据。
HBase是一个分布式的,多版本的,面向列的存储模型。
它可以使用本地文件系统。
也可以使用HDFS文件存储系统,但是,为了提高系统的健壮性和可靠性,并充分发挥HBase的大数据处理能力,使用HDFS作为文件存储系统更合适,使用MapReduce来处理海量数据,利用Zookeeper作为协同服务。
另外,HBase的存储结构是松散性数据,它使用简单的key和value的映射关系,但又不是简单的映射关系,这种关系为超大规模的高并发的海量数据实时响应系统提供了一个很好的解决方案。
HBase的存储的数据从逻辑上来看就像是一张很大的表,并且,它的数据可以根据需求动态地增加。
HBase还具有这样的特点:它向下提供了存储,向上提供了运算。
这样的特点使它将数据存储和并行计算完美地结合在了一起。
2 HBase体系结构HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion服务器群和HBase Master服务器构成。
HBase Master服务器负责管理所有的HRegion服务器,而HBase中的所有服务器都是通过ZooKeeper来进行协调并处理HBase服务器运行期间可能遇到的错误。
HBase Master本身并不储存HBase中的任何数据。
HBase与BigTable的比较众说周知,HBase是Google的BigTable架构的一个开源实现。
但是我个人觉得,要做到下面两点还是有点困难的:一HBase涵盖了BigTable规范的哪些部分二HBase与BigTable仍然有哪些区别下面我将对这两个系统做些比较。
在做比较之前,我要指出一个事实:HBase是非常接近BigTable论文描述的东西。
撇开一些细微的不同,比如HBase 0.20使用ZooKeeper做它的分布式协调服务,HBase已经基本实现了BigTable所有的功能,所以我下面的篇幅重点落在它们细微的区别上,当然也可以说是HBase小组正在努力改进的地方上。
比较范围本文比较的是基于七年前发表的论文(OSDI’06)所描叙的Google BigTable系统,该系统从2005年开始运作。
就在论文发表的2006年末到2007年初,作为Hadoop的子项目的HBase 也产生了。
在那时,HBase的版本是0.15.0. 如今大约2年过去了,Hadoop 0.20.1和HBase 0.20.2都已发布,你当然希望有一些真正的改进。
要知道我所比较的是一篇14页的技术论文和一个从头到脚都一览无余的开源项目。
所以下面的比较内容里关于HBase怎么做的讲得比较多点。
在文章的结尾,我也会讨论一些BigTable的如今的新功能,以及HBase跟它们比较如何。
好,我们就从术语开始。
术语有少数几个不同的术语被两个系统用来描述同样的事物。
最显著的莫过于HBase中的regions 和BigTable中的tablet。
自然地,它们各自把一连串的行(Rows)切分交给许多Region server 或者tablet server管理。
特性比较接下来的就是特性比较列表,列表中是BigTable跟HBase的特性比较。
有的是一些实现细节,有的是可配置的选项等。
让人感到有困惑的是,将这些特性分类很难。
BigTable 新特性OSDI’06 BigTable论文发表已有几年,BigTable当然也有改进。
什么是HBase?HBase 介绍⼀、什么是HBase?1.HBase – Hadoop Database,是⼀个⾼可靠性、⾼性能、⾯向列、可伸缩、实时读写的分布式数据库2. HBASE是Google Bigtable的开源实现,但是也有很多不同之处。
⽐如:Google Bigtable使⽤GFS作为其⽂件存储系统,HBASE利⽤Hadoop HDFS作为其⽂件存储系统;Google运⾏MAPREDUCE来处理Bigtable中的海量数据,HBASE同样利⽤Hadoop MapReduce来处理HBASE中的海量数据;Google Bigtable利⽤Chubby作为协同服务,HBASE利⽤Zookeeper作为协同服务。
3.HBase是⼀个分布式存储、数据库引擎,可以⽀持千万的QPS、PB级别的存储,这些都已经在⽣产环境验证,并且在⼴⼤的公司已经验证。
特别是阿⾥(淘宝、天猫、蚂蚁⾦服)、⼩⽶⽶聊、⼩⽶云、⼩⽶推送服务)、京东、滴滴内部都有数千、上万台的HBase集群。
Hbase PMC。
阿⾥1个。
Hbase Committer。
阿⾥4个,⼩⽶4个。
2016年双11,HBase承载访问量达到了上百GB/秒(写⼊)与上百GB/秒(读取),相当于全国⼈民⼀秒收发⼀条短信,在业务记录、安全风控、实时计算、⽇志监控、消息聊天等多个场景发挥重要价值。
⼆、哪些是HBase的特点?1.存储数据量⼤:⼀个表可以有上亿⾏,上百万列。
2.⾯向列:⾯向列表(簇)的存储和权限控制,列(簇)独⽴检索。
3.稀疏:对于为空(NULL)的列,并不占⽤存储空间,因此,表可以设计的⾮常稀疏。
4.⽆模式:每⼀⾏都有⼀个可以排序的主键和任意多的列,列可以根据需要动态增加,同⼀张表中不同的⾏可以有截然不同的列。
5.数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号⾃动分配,版本号就是单元格插⼊时的时间戳。
6.数据类型单⼀:HBase中的数据都是字符串,没有类型。
Bigtable/HBase的特点:1.Fundamentally Distributed(分布式存储)该项目从最初规划上,就是为海量数据服务的,当然分布式存储的思想也是扎根于其血脉中。
分布式系统主要需要考虑两个方面:partitioning(分区存储,也可以理解为通常说的Sharding)、replication(数据复制,主要是将数据复制成多份以提高可用性)。
2.Column Oriented(列式存储)和普通的RDBMS不一样,普通的RDBMS通常是行式存储的,一行数据是连续存在一段磁盘空间上的。
而列式存储是将各个列分别进行连续的存储。
也正是因此,它对于处理字段中的NULL字段,能够不占用过多的空间。
同时能够支持灵活松散的列定义。
也就是我们通常所说的schema-less。
3.Sequential write(顺序写磁盘)BigTable型系统的一个特点是其对写性能进行的优化。
它的写都是通过先记一条操作日志,然后直接写在内存中的数据集合,然后其集合按条件或定时将数据flush到磁盘。
这里涉及到的记操作日志或者数据flush到磁盘都会顺序的磁盘操作。
故而避免了磁盘随机操作造成的无谓的磁盘寻道时间。
4.Merged read(读操作数据合并)上面说到写操作是通过定时将数据直接flush到磁盘进行的,每次flush都会生成一个数据块,那可能造成一个数据在多个数据块中的情况,而在读的时候就需要将这多个版本中的值进行合并。
其中在判断一个数据块是否包含指定值时使用了bloom-filter算法。
5.Periodic Data Compaction(定期数据合并)同样是上面说到的,一个数据可能存在于多个数据块,如果我们不做处理,随着时间的推移,数据块会越来越多。
所以BigTable型系统会进行定时的数据合并。
在上面讲到的将内存中的数据直接flush到磁盘的过程中,flush之前进行了一次数据的排序操作,既是说存在磁盘中的块中的数据,都是顺序的,那么对一堆顺序的数据进行排重合并,其实和我们熟知的多路归并排序很相似。
首先,向大家介绍在2006年OSDI大会上发表BigTable论文,也就是《Bigtable: A Distributed Storage System for Structured Data》里面所提到的一些特性:I.新特性在2009的LADIS大会上,Google院士jeff dean有一个非常精彩的Talk,称为“Design Lessons and Advice from Building Large Scale Distributed Systems”,在这次Talk中他提到了很多BigTable的新特性:表2. 在LADIS 2009大会上的Talk中提到的特性No CommentsPosted in PaaS相关技术, YunTable开发日记, 《云计算核心技术剖析》, 云计算II.Bigtable:一个分布式的结构化数据存储系统15 Jul为了方便部分博友和我自己,我特地将BigTable的中文版论文转载到人云亦云,原文地址在Google Labs,译者为alex。
III.摘要Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。
Google 的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance。
这些应用对Bigtable提出的要求差异非常大,无论是在数据量上(从URL到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。
尽管应用需求差异很大,但是,针对Google的这些产品,Bigtable还是成功的提供了一个灵活的、高性能的解决方案。
本论文描述了Bigtable提供的简单的数据模型,利用这个模型,用户可以动态的控制数据的分布和格式;我们还将描述Bigtable 的设计和实现。
IV. 1 介绍在过去两年半时间里,我们设计、实现并部署了一个分布式的结构化数据存储系统—在Google,我们称之为Bigtable。
云计算的关键技术摘要:云计算是一种新兴的计算模型,它是在网格计算的基础上发展而来的,它是指通过网络以按需、易扩展的方式来获得所需的信息服务,因此,云计算又常常被称为云服务。
本文介绍了云计算的发展历史,总结了云计算的关键技术:数据存储技术(Google File system)、数据管理技术(BigTable)、编程模型和任务调度等,分析了云计算和网格计算以及传统超级计算的区别,并指出了云计算的广阔发展前景。
关键词:云计算;编程模型;数据存储;数据管理;任务调度正文: 云计算(cloud computing)是一种新近提出的计算模式。
是分布式计算(Dist uted computing)、并行计算(Parallelcomputing)和网格计算(Grid computing)的发展。
目前,亚马逊、微软、谷歌、IBM、英特尔等公司纷纷提出了“云计划”。
例如亚马逊的Aws(Amazon web services)⋯,IBM和谷歌联合进行的“蓝云”计划等。
这对云计算的商业价值给予了巨大的肯定。
同时学术界也纷纷对云计算进行深层次的研究。
例如谷歌同华盛顿大学以及清华大学合作,启动云计算学术合作计划(Academic cloud ComputingInitiative),推动云计算的普及,加紧对云计算的研究。
卡内基梅隆大学等对数据密集型的超级计算(Data Intensive supercomputing,DIsc) 进行研究,本质上也是对云计算相关技术开展研究。
云计算有着广泛的应用前景。
如表1所示。
云计算在天文学、医学等各个领域有着广泛的应用前景。
趋势科技和瑞星等安全厂商纷纷提出了“安全云”计划。
在云计算关键技术研究过程中,主要对依赖于以下的技术支持,他们分别是数据存储技术(Google File system)、数据管理技术(BigTable)、编程模型和任务调度模型等,我们逐一进行介绍。
一.数据存储技术:为保证高可用、高可靠和经济性,云计算采用分布式存储的方式来存储数据,同时利用冗余存储的方式来保证存储数据的可靠性,即为同一份数据存储多个副本,这样避免当前的数据系统崩溃还有备用的数据可以马上回复工作。
HBase是一个开源的、分布式的非关系型数据库(NoSQL)。
HBase 通过对列进行逻辑分组,将数据存储在表中,并通过行键进行快速访问。
HBase的数据模型和操作语句与传统的关系型数据库有很大的不同。
在HBase中,通过两张表数据对比语句,可以对不同表中的数据进行比较和分析。
一、HBase中的两张表数据对比语句的基本概念在HBase中,通过编写对比语句,可以对两张表中的数据进行对比。
对比语句主要包括以下几个方面的内容:1. 数据筛选条件:对比语句中需要指定数据筛选条件,以确定需要比较的数据范围。
可以根据行键、列族、列限定符、时间戳等条件进行数据筛选。
2. 对比方式:对比语句需要指定数据的对比方式,例如数据的差异性、一致性等。
3. 对比结果展示:对比语句的结果需要进行展示,以便用户对对比结果进行分析和理解。
可以采用表格、图形等形式展示对比结果。
二、HBase中的两张表数据对比语句的使用方法使用HBase中的两张表数据对比语句,可以通过HBase的Shell命令行或者基于HBase的编程接口进行实现。
以下是使用HBase Shell进行两张表数据对比的基本步骤:1. 连接HBase数据库:首先使用HBase Shell连接到HBase数据库。
2. 编写对比语句:在HBase Shell中,可以编写对比语句,指定数据筛选条件、对比方式等内容。
3. 执行对比语句:执行编写好的对比语句,获取对比结果。
4. 分析对比结果:对比结果以表格或者其他形式展示在Shell中,用户可以根据对比结果进行分析和处理。
三、HBase中的两张表数据对比语句的应用场景HBase中的两张表数据对比语句可以应用于以下几个场景:1. 数据同步对比:在数据同步过程中,可以使用对比语句对源表和目标表的数据进行对比,以确定数据同步的准确性和完整性。
2. 数据一致性检查:对于数据分布在多个表中的场景,可以使用对比语句对数据的一致性进行检查,以确保数据的一致性和完整性。
HBase简介什么是HBase?HBase,是Hadoop Database,是⼀个⾼可靠性、⾼性能、⾯向列、可伸缩的分布式存储系统。
使⽤HBase技术可以在廉价的PC服务器上搭建起⼤规模结构化的存储集群。
它底层的⽂件系统使⽤HDFS,使⽤Zookeeper来管理集群的HMaster和各Region server 之间的通信,监控各Region server的状态,存储各Region的⼊⼝地址等。
何时⽤HBase?⾸先想想传统的关系型数据库都有哪些特点,⼤概的特点有:⽀持事务,ACID(原⼦性、⼀致性、隔离性和持久性)特性;⾏式存储;SQL语句使⽤起来⽐较⽅便;⽀持索引、视图等;接下来我们考虑⼀个场景:我们想要构建⼀个社交⽹站,我们可能会选择易于操作的LAMP(Linux、Apache、Mysql、PHP)模型来快速的搭建⼀个原型。
随着⽤户数的不断增加,每天有越来越多的⼈开始访问,这时候,共享的数据库服务器压⼒会越来越⼤,可以选择增加应⽤服务器,但因为这些应⽤服务器共享中央数据库,所以,随着数据库的CPU 和I/O负载升⾼,这种⽅案势必不可长久。
这时候,我们可能会增加从服务器,以便并⾏读取,将读写分离。
这样做是因为考虑到⽤户访问产⽣的读次数⽐写⼊次数更多,但是如果⽤户数⽬增加很快,产⽣的内容越来越多,导致读写数⽬相差没那么⼤,这种⽅案也就不能长久。
接下来的常见做法就是增加缓存,⽐如使⽤Memcached。
这样,读操作存⼊到内存中的数据库系统中,但⼜没办法保证数据⼀致性,因为⽤户更新数据到数据库,⽽数据库不会主动更新缓存中的数据,⽽且,这种⽅案只能解决读请求的压⼒,对于写请求,还是没有解决。
所以需要更多的服务器,更快的磁盘,会导致硬件成本快速升⾼。
⽽且,随着⽤户的增多,⽹站功能势必增加,业务功能都会使⽤sql语句进⾏查询,⽽表数据过多会导致join操作变慢,所以会不得不采⽤⼀些逆范式的⽅式来设计数据库,这样导致⽆法使⽤存储过程。
云计算核心技术八大项云计算核心技术八大项导语:云计算在近几年市场相当红火,下面店铺要给大家提供的是云计算核心技术八大项,大家可以参考阅读,更多详情请关注店铺。
云计算是一种以数据和处理能力为中心的密集型计算模式,它融合了多项ICT技术,是传统技术“平滑演进”的产物。
其中以虚拟化技术、分布式数据存储技术、编程模型、大规模数据管理技术、分布式资源管理、信息安全、云计算平台管理技术、绿色节能技术最为关键。
1、虚拟化技术虚拟化是云计算最重要的核心技术之一,它为云计算服务提供基础架构层面的支撑,是ICT服务快速走向云计算的最主要驱动力。
可以说,没有虚拟化技术也就没有云计算服务的落地与成功。
随着云计算应用的持续升温,业内对虚拟化技术的重视也提到了一个新的高度。
与此同时,我们的调查发现,很多人对云计算和虚拟化的认识都存在误区,认为云计算就是虚拟化。
事实上并非如此,虚拟化是云计算的重要组成部分但不是全部。
从技术上讲,虚拟化是一种在软件中仿真计算机硬件,以虚拟资源为用户提供服务的计算形式。
旨在合理调配计算机资源,使其更高效地提供服务。
它把应用系统各硬件间的物理划分打破,从而实现架构的动态化,实现物理资源的集中管理和使用。
虚拟化的最大好处是增强系统的弹性和灵活性,降低成本、改进服务、提高资源利用效率。
从表现形式上看,虚拟化又分两种应用模式。
一是将一台性能强大的服务器虚拟成多个独立的小服务器,服务不同的用户。
二是将多个服务器虚拟成一个强大的服务器,完成特定的功能。
这两种模式的核心都是统一管理,动态分配资源,提高资源利用率。
在云计算中,这两种模式都有比较多的应用。
2、分布式数据存储技术云计算的另一大优势就是能够快速、高效地处理海量数据。
在数据爆炸的今天,这一点至关重要。
为了保证数据的高可靠性,云计算通常会采用分布式存储技术,将数据存储在不同的物理设备中。
这种模式不仅摆脱了硬件设备的限制,同时扩展性更好,能够快速响应用户需求的变化。
HBase与BigTable的比较
HBase是Google的BigTable架构的一个开源实现。
但是我个人觉得,要做到充分了解下面两点还是有点困难的:一HBase涵盖了BigTable规范的哪些部分?二HBase与BigTable仍然有哪些区别?下面我将对这两个系统做些比较。
在做比较之前,我要指出一个事实:HBase是非常接近BigTable论文描述的东西。
撇开一些细微的不同,比如HBase 0.20使用ZooKeeper做它的分布式协调服务,HBase已经基本实现了BigTable所有的功能,所以我下面的篇幅重点落在它们细微的区别上,当然也可以说是HBase 小组正在努力改进的地方上。
比较范围本文比较的是基于七年前发表的论文(OSDI’06)所描叙的Google BigTable系统,该系统从2005年开始运作。
就在论文发表的2006年末到2007年初,作为Hadoop的子项目的HBase 也产生了。
在那时,HBase的版本是0.15.0. 如今大约2年过去了,Hadoop 0.20.1和HBase 0.20.2都已发布,你当然希望有一些真正的改进。
要知道我所比较的是一篇14页的技术论文和一个从头到脚都一览无余的开源项目。
所以下面的比较内容里关于HBase怎么做的讲得比较多点。
在文章的结尾,我也会讨论一些BigTable的如今的新功能,以及HBase跟它们比较如何。
好,我们就从术语开始。
术语有少
数几个不同的术语被两个系统用来描述同样的事物。
最显著的莫过于HBase中的regions和BigTable中的tablet。
自然地,它们各自把一连串的行(Rows)切分交给许多Region server或者tablet server管理。
特性比较接下来的就是特性比较列表,列表中是BigTable跟HBase的特性比较。
有的是一些实现细节,有的是可配置的选项等。
让人感到有困惑的是,将这些特性分类很难。
特性
BigTable
HBase
说明读/ 写/ 修改的原子性
支持,每行
支持,每行
因为BigTable 不像关系型数据库,所以不支持事务。
最接近事务的就是让对每行数据访问具有原子性。
HBase 同样实现了”行锁”的API ,让用户访问数据时给一行或者几行数据加锁。
词典顺序的行排序
支持
支持
所有行都按照词典顺序排序
数据块支持
支持
支持
在数据存储文件中,数据是由更小的数据块构成的。
这使从大的存储文件读取数据更快。
数据块的大小是可配置的,典型配置是64K 。
数据块压缩
支持,按Column Family
支持,按Column Family
Google 使用BMDiff 和Zippy 做两步处理。
BMDiff 工作得很好是因为存储文件中相邻的key-value 对的内容经常非常相似。
因为数据支持多个版本,几个版本的内容会被排序然后被存在一起,它们之间有很多相同的内容。
或者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 Famil 命名格式
可打印
可打印
HBase 这样做的主要原因是Column Famil 的名称会被作为文件系统中的目录名称Qualifier 命名的格式
任意
任意
任意的字节数组
Key/Value 对的格式
任意
任意
任意的字节数组
访问控制
支持
无
BigTable 支持column family 级别的访问控制。
HBase 暂不支持Cell 多版本
支持
支持
多版本支持是基于时间戳。
版本数目限制可以基于cloumn family 级别自由配置自定义时间戳
支持
支持
两个系统都支持用户设定时间戳,如果用户不指定,则使用
当前时间作为时间戳。
数据TTL
支持
支持
除了数据可以有多个版本,用户还可制定TTL
(time-to-live ),当数据到期后会被清除批量写入
支持
支持
都支持批量表操作
值计数器
支持
支持
两者都可使用特定的列作为原子计数器。
HBase 实现是:当计数器的值要增长时,它必须获得行锁。
行过滤器
支持
支持
两者都支持扫描行时支持行过滤器
客户端脚本执行
支持
不支持
BigTable 使用Sawzall 使客户端可以处理存储的数据。
MapReduce 支持
支持
支持
两者都有方便的工具类让MapReduce Job 扫描表。
底层文件系统
GFS
HDFS,S3, S3N, EBS
BigTable 工作在GFS 之上,HBase 可以使用任何文件系统,只要有该文件系统的代理或者驱动即可。
存储文件格式
SSTable
HFile 块索引
在文件最后
在文件最后
两者都有相似的块结构化的存储文件格式,并且块索引被放在文件的最后
内存映射
支持
不支持
BigTable 可以让存储文件直接映射到内存。
锁服务Chubby
ZooKeeper
ZooKeeper 被HBase 用来协调任务并非当成锁服务。
总体说来,HBase 使用ZooKeeper 达到了BigTable 使用Chubby 的效果,只有语义有点细微区别。
单个Master 是
不是
HBase 近来支持多个Master 。
多个Master 是”热”待命模式工作,它们都侦听ZooKeeper 上的
Master 节点。
Tablet/Region 数目
10-1000
10-1000
两个系统都推荐每个Region server 分配相同数目的region 。
当然这决定于很多因素,由于两个系统都使用普通电脑,出于负载考虑,它们推荐相同的数目Tablet/Region 大小
100-200MB
256MB
在两个系统中,单个Region 大小是可配置的,在HBase 中,默认大小为256MB Root 位置
1st META / Chubby
-ROOT- / ZooKeeper
HBase 会使用一个只有单个Region 的自身表来存储Root 表。
二者启动时都会把Root region 所在机器的地址放到ZooKeeper 或者Chubby 中。
客户端Region 信息缓存
支持
不支持
二者客户端都支持Region 位置信息缓存并且有相应的机制去除过时的缓存和更新缓存Meta 预读
支持
不支持(?)
BigTable 的一个设计就是会预读超过1 个Meta Region 信息并将之放入客户端缓存。
Region 事件记录
支持
支持
Region 相关事件(切分,分配,再分配)都会记录在Meta 表中存储位置分组(Locality Groups )
支持
不支持
这不是很确定,但是看起来BigTable 中的任何东西都有个位置分组的属相。
如果多个列族的位置分组相同,那么它们将被存放在一起,并且拥有相同的配置参数。
单个列族就可能是一个拥有一个成员的位置分组。
HBase 不支持这种选项,并将不同的列族分开存储。
完全内存Column Family 存储
支持
这是为需要高速存取小表准备的
KeyValue 缓存
支持
不支持
缓存热点Cell 数据数据块缓存
支持
支持
数据块从存储文件读入到在可配置的缓存中
布隆过滤器(Bloom Filters)
支持
支持
这些过滤器会消耗一些内存,但是可以快速检查一个指定的cell 是否在一个Region Server 上存在Write-Ahead Log (WAL)
支持
每个Region Server 都会记录被它管理的所有Region 上的数据改动Secondary Log
支持
不支持
出于性能考虑,一旦WAL 性能下降,BigTable 还有别的log 可以使用忽略Write-Ahead Log
?
支持
在大量数据导入时,HBase 的客户端可以选择忽略WAL 快速Region 切分
支持
支持
切分region 是快速的,因为切分出来的子region 暂时还会去读取原存储文件直到一个compaction 将数据写入region 的自有的存储文件。