《第五章非系型数据库》由会员分享,可在线阅读,更多相关《第五章非系型数据库(107页珍藏版)》请在金锄头文库上搜索。
1、CloudComputingAutumn,2011Chapter5NoSQLDatabaseXuJungang1 12024/8/23CloudComputing,GUCAS2提纲1.关系数据库的瓶颈2.云计算对数据库技术的要求3.NoSQL数据库4.BigTable5.HBase3关系数据库的产生l1970年IBM研究员EdgarFrankCodd发表了业界第一篇关于关系数据库理论的论文ARelationalModelofDataforLargeSharedDataBanks,首次提出了关系模型的概念。l后来Codd又陆续发表多篇文章,奠定了关系数据库的基础。关系模型有严格的数学基础,抽象级
2、别比较高,而且简单清晰,便于理解和使用。关系型数据库的概念关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。SQL是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。4关系操作关系模块中常用的操作包括:5数据查询数据操作投影增加连接删除并修改除更新差关系型数据库的优点操作方便:通过应用程序和后台连接,方便了用户对数据的操作,特别是没有编程基础的人。易于维护:丰富的完整性,包括实体完整性、参照完整性和用户定
3、义完整性,大大降低了数据冗余和数据不一致的概率。便于访问数据:提供了诸如视图,存储过程,触发器,索引等对象。更安全,更快捷:权限分配和管理,使其较以往的数据库在安全性上要高的多,6关系型数据库的瓶颈(1)关系数据库所采用的二维表格数据模型不能有效地处理多维数据,不能有效处理互联网应用中半结构化和非结构化的海量数据,如Web页面、电子邮件、音频、视频等7关系型数据库的瓶颈(2)高并发读写的性能低关系数据库达到一定规模时,非常容易发生死锁等并发问题,导致其读写性能下降非常严重。Web2.0网站数据库并发负载非常高,往往要达到每秒上万次读写请求。关系型数据库勉强可以应付上万次SQL查询,但硬盘I/O
4、往往无法承担上万次的SQL写数据请求。8关系型数据库的瓶颈查询效率低各种等待9关系型数据库的瓶颈(3)支撑容量有限类似人人网,新浪微博,Facebook,Twitter,Friendfeed(已被Facebook收购)这样的网站,每天用户产生海量的用户动态信息。(a)以Facebook为例,一个月就要存储1350亿条(未得到确认)用户动态,对于关系数据库来说,在一张1350亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。(b)再例如大型Web网站或IM的用户登录系统,例如腾讯,MSN,动辄数以亿计的帐号,关系数据库也很难应付。10关系型数据库的瓶颈(4)数据库的可扩展性和可用性低
5、当一个应用系统的用户量和访问量与日俱增的时候,传统的关系型数据库却没有办法像WebServer那样简单地通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供不间断服务的系统来说,对数据库系统进行升级和扩展往往需要停机维护和数据迁移11关系型数据库的瓶颈12关系型数据库的瓶颈(5)建设和运维成本高企业级关系数据库的价格很高,并且随着系统的规模增大而不断上升。高昂的建设和运维成本无法满足云计算应用对数据库的需求。132024/8/23CloudComputing,GUCAS14提纲1.关系数据库的瓶颈2.云计算对数据库技术的要求3.NoSQL数据库4.BigTable5.HBase1
6、4大量Web2.0网站15大量Web2.0网站16Types of Cloud Service Provider云服务提供商类型SaaSSoftware as a ServiceSoftware as a Service软件即服务PaaSPlatform as a ServicePlatform as a Service平台即服务IaaSInfrastructure as a ServiceInfrastructure as a Service基础设施即服务17AaaSArchitectureasaServiceBaaSBusinessasaServiceCaaSComputingasaSer
7、viceDaaSDataasaServiceDBaaSDatabaseasaServiceEaaSEthernetasaServiceFaaSFrameworksasaServiceGaaSGlobalizationorGovernanceasaServiceHaaSHardwareasaServiceIMaaSInformationasaService IaaSIaaS Infrastructure or Integration as a ServiceInfrastructure or Integration as a ServiceIDaaSIdentityasaServiceLaaSL
8、endingasaServiceMaaSMashupsasaServiceOaaSOrganizationorOperationsasaService SaaSSaaSSoftware or Storage as a ServiceSoftware or Storage as a Service PaaSPaaSPlatform as a ServicePlatform as a ServiceTaaSTechnologyorTestingasaServiceVaaSVoiceasaServiceEverything as a Service任何事物都是一种服务任何事物都是一种服务引用自:ht
9、tps:/ : aAgeAge : 20GenderGender : MBirthdayBirthday : 1990-10-1HobbyHobby :travelNameName : bAgeAge : 40BirthdayBirthday : 1970-8-24TelTel : 12345678NameName : cAgeAge : 30GenderGender : MNoSQLAnExampleofNoSQL22SQLPKNoSQLSQLNoSQL-重量级轻量级贵便宜商业开源成熟时尚、风险企业通用特定领域、互联网23Availability可用性Partition Tolerance分
10、区容错性Consistency一致性RDBMSRDBMSNoSQLNoSQL数据一致更新,所有数据变动都是同步的尽管有一些信息丢失,系统依旧继续运转某个节点的宕机不会影响其他节点继续完成操作CAP理论24CAP理论Consistency(一致性): 数据一致更新,所有数据变动都是同步的Availability(可用性):某个节点的宕机不会影响其他节点继续完成操作Partition tolerance(分区容错性):尽管有一些信息丢失,系统依旧继续运转可靠性定理:定理:一个分布式系统不可能满足一致性,可用性和分一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。区
11、容错性这三个需求,最多只能同时满足两个。忠告忠告:架构师不要将精力浪费在如何设计能满足三者的架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。完美分布式系统,而是应该进行取舍。25关系数据库的ACID特性Atomicity(原子性):一个事务中所有操作都必须全部完成,要么全部不完成。Consistency(一致性): 在事务开始或结束时,数据库应该在一致状态。Isolation(隔离性):事务将假定只有它自己在操作数据库,彼此不知晓。Durability(持久性):一旦事务完成,就不能返回。跨数据库事务:两阶段提交协议(Two-phase commit,2PC)结论:
12、关系型数据库通过把更新操作写到事务型日志里实结论:关系型数据库通过把更新操作写到事务型日志里实现了较高的可靠性,但带来的是写性能的下降现了较高的可靠性,但带来的是写性能的下降26BASE模式BASE模型是反ACID模型,完全不同于ACID模型,牺牲高一致性,获得可用性或可靠性:Basically Available(基本可用):支持分区失败。Soft state(软状态):状态可以有一段时间不同步。Eventually consistent(最终一致):最终数据是一致的就可以了,而不是时时高一致。BASEBASE思想主要强调基本的可用性,如果你需要高可用性,思想主要强调基本的可用性,如果你需要
13、高可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲也就是纯粹的高性能,那么就要以一致性或容错性为牺牲27Web 1.0时代Web 2.0时代28WhyNoSQL?对于Web2.0网站来说,关系数据库的很多主要特性却往往无用武之地。例如:1. 数据库事务一致性需求数据库事务一致性需求: 很多Web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载之外另一个沉重的负担。2. 数据库的写实时性和读实时性需求数据库的写实时性和读实时性需求: 对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很
14、多Web应用来说,并不要求这么高的实时性,比方说某人发一条消息之后,过几秒乃至十几秒之后,他的订阅者才看到这条动态信息是完全可以接受的。29关系数据库适合这样的场景?对于Web2.0网站来说,关系数据库的很多主要特性却往往无用武之地。例如:3. 对复杂的对复杂的SQL查询,特别是多表关联查询的需求查询,特别是多表关联查询的需求:(1)任何大数据量的Web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。(2)特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。
15、因此,关系数据库在这些越来越多的应用场景下显得就不那么合适了。30NoSQL的优势和劣势优势扩展简单读写快速成本低廉劣势不提供对SQL支持产品不够成熟很难实现数据的完整性。缺乏强有力的技术支持。开源数据库从出现到用户接受需要一个漫长的过程。31NoSQL分类(按功能)Column-oriented:列式存储,通常不支持join操作,与传统关系型数据库的行式存储相比他的存储是列式的,这样会让很多统计聚合操作更简单方便。Key/Value:有点类似常见的HashTable,一个Key对应一个Value,但是它能提供非常快的查询速度、大的数据存放量和高并发操作,非常适合通过主键对数据进行查询和修改等
16、操作。Document-oriented:Document和Key/value是非常相似的,也是一个Key对应一个Value,但是这个Value主要以JSON(JavaScriptObjectNotations)或者XML等格式的文档来进行存储。这种存储方式可以很容易地被面向对象的语言所使用。32Column-orientedVerticaBigTableHypertableHBaseCassandraNoSQL分类(按功能)33Key-ValueRedisScalarisMemcacheDBBerkeleyDBDynamoVoldemortTokyoCabinetKAINoSQL分类(按功能
17、)34Document-orientedMongoDBTerrastoreCouchDBSimpleDBRiakNoSQL分类(按功能)35按CAP的组合分类满足满足C和和A的系统,通常在可扩展性上不太强大:的系统,通常在可扩展性上不太强大:TraditionalRDBMSslikePostgres,MySQL,etc(relational)Vertica(column-oriented)AsterData(relational)Greenplum(relational)36按CAP的组合分类满足满足C和和P的系统,通常性能不是特别高的系统,通常性能不是特别高:BigTable(column-
18、oriented/tabular)Hypertable(column-oriented/tabular)HBase(column-oriented/tabular)MongoDB(document-oriented)Terrastore(document-oriented)Redis(key-value)Scalaris(key-value)MemcacheDB(key-value)BerkeleyDB(key-value)37按CAP的组合分类满足满足A和和P的系统,通常可能对一致性要求低一些的系统,通常可能对一致性要求低一些:Dynamo(key-value)Voldemort(key-v
19、alue)TokyoCabinet(key-value)KAI(key-value)Cassandra(column-oriented/tabular)CouchDB(document-oriented)SimpleDB(document-oriented)Riak(document-oriented)38RowStoreandColumnStoreInrowstoredataarestoredinthedisktuplebytuple.Whereincolumnstoredataarestoredinthediskcolumnbycolumn39RowStoreandColumnStoreS
20、ocolumnstoresaresuitableforread-mostly,read-intensive,largedatarepositoriesRow Store Column Store(+)Easytoadd/modifyarecord(+)Onlyneedtoreadinrelevantdata(-)Mightreadinunnecessarydata(-)Tuplewritesrequiremultipleaccesses40列式数据库是革命性的传统行式数据行式数据库c5c4c3c2c1c9c8c7c6r1r2r3r4r5列式数据列式数据库c5c4c3c2c1c9c8c7c6r1
21、r2r3r4r5数据按列存储数据按列存储 每一列单独存放每一列单独存放数据即是索引数据即是索引只访问查询涉及的列只访问查询涉及的列 大量降低系统大量降低系统IOIO每一列由一个线索来处理每一列由一个线索来处理 查询的并发处理查询的并发处理数据类型一致,数据特征相似数据类型一致,数据特征相似 方便压缩方便压缩数据是按行存储的数据是按行存储的没有索引的查询使用大量没有索引的查询使用大量I/OI/O建立索引和物化视图需要花费大量时间和资源建立索引和物化视图需要花费大量时间和资源面对查询的需求,数据库必须被大量膨胀才能满面对查询的需求,数据库必须被大量膨胀才能满足性能要求足性能要求41Key/Valu
22、e数据模型域(Domain)+数据项(Item)域类似于“表”,但无结构;作用是容纳所有的数据项在同一个域中存储的数据项可以存在很大的差异42Key/ValuePKRelationalDatabase43SQLPKAPI关系数据库的数据创建、更新、删除和获取都使用SQL完成,SQL查询可以从单个表或是通过多个表的Join操作来获取数据,SQL查询包括聚集、复杂的数据过滤等功能,传统关系数据库还包括将一些数据处理逻辑嵌入到数据存储中的实现。例如存储过程、触发器等。Key/Value数据的创建、更新、删除和获取都是用API方法调用。44Key/Value应用AmazonDynamo,Yahoo!P
23、NUTS等均是使用Key/Value数据结构同时也有一些Key/Value的变体,如GoogleBigtable,FacebookCassandra,HyperTable等4545Key/value的优缺点优点便于扩展,适用于云计算环境与应用程序代码的兼容性更好缺点数据完整性约束移至应用程序目前的很多Key/Value数据存储系统之间不兼容46DocumentorienteddatabaseAdocument-oriented databaseisacomputerprogramdesignedforstoring,retrieving,andmanagingdocument-oriented
24、,orsemistructureddata,information.Document-orienteddatabasesareoneofthemaincategoriesofso-calledNoSQLdatabasesandthepopularityofthetermdocument-orienteddatabase(ordocumentstore)hasgrownwiththeuseofthetermNoSQLitself.DocumentsencodingsincludeXML,YAML,JSONandBSON,aswellasbinaryformslikePDFandMicrosoft
25、Officedocuments(MSWord,Excel,andsoon).47DocumentorienteddatabaseDocumentsareaddressedinthedatabaseviaauniquekeythatrepresentsthatdocument.thiskeyisasimplestring.Insomecases,thisstringisaURIorpathRetrievalSupportsimplekey-document(orkey-value)lookupofferanAPIorquerylanguagethatwillallowyoutoretrieved
26、ocumentsbasedontheircontents48AnJSONSampleDoc_id:ObjectId(4c4ba5c0672c685e5e8aabf3),author:roger,date:SatJul24201019:47:11GMT-0700(PDT),text:”MongoSF,tags:”SanFrancisco,”MongoDB4950提纲1.关系数据库的瓶颈2.云计算对数据库技术的要求3.NoSQL数据库4.BigTable5.HBase2024/8/23CloudComputing,GUCAS50BigTable设计动机从商业上考虑,Google不会把自己最宝贵的数
27、据资源放在别家的数据库上,尤其是Oracle。对商业数据库来说数据规模太大,即使能实现,花费也将会很高。存储的数据种类多种多样,海量的服务请求,市面上的商用数据库无法满足Google存储和处理数据的需求为了与GFS和MapReduce相配套,Google从2004年初开始研发“大表”BigTable,以实现结构化数据的分布式存储51BigTable设计目标面对以上几个方面的需求和考虑,Google便开始着眼于一种能够处理大规模数据的数据库系统,这就是BigTable。Google设计实现的BigTable需要完成一下几个基本要求:广泛的适用性:满足Google不同产品高可扩展性:根据需要随时扩
28、容高可用性:要保证几乎所有情况下系统都不能宕机52BigTable的提出Google发表论文BigTable:ADistributedStorageSystemforStructuredDataBigTable是一种为了管理结构化数据而设计的分布式存储系统,这些数据可以扩展到非常大的规模,例如在数千台商用服务器上的达到PB(Petabytes)规模的数据。53BigTable数据模型BigTable本质上是一个稀疏的、分布式的、持久化存储的多维度排序Map(由key,value组成)。每个BigTableCell(单元格)的组成:行(Row)列(Column)时间戳(TimeStamp)通过它
29、们进行三维定位,Cell的内容本身是一个字符串。54 分布式多分布式多分布式多分布式多维维维维稀疏稀疏稀疏稀疏图图图图. . ( (行行行行, , 列列列列, , 时间戳时间戳时间戳时间戳) ) CellCell内容内容内容内容BigTable管理的数据的存储结构为:-string.BigTable的基本元素是:行(row),列(column),子表(tablet)和时间戳(timestamp)。对对GoogleGoogle大多数大多数应应用良好匹配用良好匹配. .55其中:lTablet是一段行的集合体 :BigTable中的数据项按照行关键字的字典序排列,每行动态地划分到tablet中,每
30、个节点管理大约100个tablet。l时间戳是一个64位的整数,表示数据的不同版本。 l列族是若干列的集合,BigTable中的存取权限控制在列族的粒度进行。BigTableBigTable逻辑结构:逻辑结构:56 BigTableBigTable记录表记录表& &分解分解 “”TABLETS“contents”EN “”TABLETS“contents”EN serviceGFS masterCluster masterGFSchunkserverSchedulerslaveLinuxMachine 1User app2Userapp1BigTableserverUserapp1BigTab
31、leserverBigTable masterGFSchunkserverSchedulerslaveLinuxMachine 2GFSchunkserverSchedulerslaveLinuxMachine N772024/8/23CloudComputing,GUCAS78提纲1.关系数据库的瓶颈2.云计算对数据库技术的要求3.NoSQL数据库4.BigTable5.HBase78Hbase:BigTable的开源实现2024/8/23CloudComputing,GUCAS79Hbase数据库是基于Hadoop的项目,是对Google的BigTable的开源实现。它与BigTable相
32、似,但也存在很多不同之处。实例:Facebook的HBase每月存储1350亿条信息CassandraNONOYES80HBase简介2024/8/23CloudComputing,GUCAS81HBaseistheHadoopdatabase.Useitwhenyouneedrandom,realtimeread/writeaccesstoyourBigData.Thisprojectsgoalisthehostingofverylargetables-billionsofrowsXmillionsofcolumnsatopclustersofcommodityhardware.HBasei
33、sanopen-source,distributed,versioned,column-orientedstoremodeledafterGoogleBigtable:ADistributedStorageSystemforStructuredDatabyChangetal.JustasBigtableleveragesthedistributeddatastorageprovidedbytheGoogleFileSystem,HBaseprovidesBigtable-likecapabilitiesontopofHadoop.HBase是一个面向列存储的分布式存储系统,它的优点在于可以实现
34、高性能的并发读写操作,同时HBase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性。HBase系统架构82HBase数据模型83Hbase是一个类似Bigtable的分布式数据库,大部分特性和Bigtable一样,是一个稀疏的,长期存储的存在硬盘上,多维度的,排序的映射表。这张表的索引是行关键字,列关键字和时间戳。每个值是一个不解释的字符数组,数据都是字符数据都是字符串,没类型。串,没类型。HBase数据模型2024/8/23CloudComputing,GUCAS84用户在表格中存储数据,每一行都有一个可排序的主键和任意多的列。由于是稀疏存储的,所以同一张表里面的每一行数据都可
35、以有截然不同的列。列名字的格式是:,都是由字符串组成,每一张表有一个family集合,这个集合是固定不变的,相当于表的结构,只能通过改变表结构来改变。但是label值相对于每一行来说都是可以改变的。HBase数据模型85http:/ Master主服务器构成。2024/8/23CloudComputing,GUCAS91HBase子表服务器对用户来说,每个表是一堆数据的集合,靠主键来区分。物理上,一张表是被拆分成多块,每一块就称呼为一个Hregion。用表名+开始/结束主键,来区分一个Hregion,一个Hregion会保存一个表里面某段连续的数据,从开始主键到结束主键,一张完整的表格保存在多
36、个Hregion上面。92HBase子表服务器客户端以表格的形式读取数据客户端以表格的形式读取数据一张表是被划分成多个一张表是被划分成多个Hregion区域区域Hregion是被是被Hregion服务器管理的,当客户端需服务器管理的,当客户端需要访问某行数据的时候,需要访问对应的要访问某行数据的时候,需要访问对应的Hregion服务器。服务器。Hregions服务器里面有三种方式保存数据:服务器里面有三种方式保存数据:Hmemcache高速缓存,保留是最新写入的数据高速缓存,保留是最新写入的数据Hlog记录文件,保留的是提交成功了,但未被写入文件的记录文件,保留的是提交成功了,但未被写入文件的
37、数据数据Hstores文件,数据的物理存放形式。文件,数据的物理存放形式。93Hbase主服务器主服务器每个Hregion服务器都会和Hmaster服务器通讯,Hmaster的主要任务就是要告诉每个Hregion服务器它要维护哪些Hregion。Hregion服务器提供Hregion访问,一个Hregion只会保存在一个Hregion服务器上面。Hregion会注册到主服务器上面。2024/8/23CloudComputing,GUCAS94HBase主服务器主服务器如果主服务器死机,那么整个系统都会无效。当前的Hregion服务器列表只有主服务器知道。Hregion区域和Hregion服务器
38、的对应关系保存在两个特别的Hregion里面,它们像其它Hregion一样被分配到不同的服务器。根数据表是最特别的一个表,主服务器永远知道它的位置(在程序中写死)客户端需要自己浏览这些表,来找到数据在哪里。2024/8/23CloudComputing,GUCAS9595ZooKeeperHBasedependsonZooKeeperandbydefaultitmanagesaZooKeeperinstanceastheauthorityonclusterstate96HBase与BigTable的区别2024/8/23CloudComputing,GUCAS97特性特性BigTableHBa
39、se说明说明读/写/修改的原子性支持,每行支持,每行因为BigTable不像关系型数据库,所以不支持事务。最接近事务的就是让对每行数据访问具有原子性。HBase同样实现了”行锁”的API,让用户访问数据时给一行或者几行数据加锁。锁服务ChubbyZooKeeperZooKeeper被HBase用来协调任务并非当成锁服务。总体说来,HBase使用ZooKeeper达到了BigTable使用Chubby的效果,只有语义有点细微区别。单个单个 Master是是不是不是HBase 近来支持多个近来支持多个 Master 。多个多个 Master 是是”热热”待命模式工作,它们都侦听待命模式工作,它们都
40、侦听 ZooKeeper 上的上的 Master 节点。节点。Tablet/Region数目10-100010-1000两个系统都推荐每个Regionserver分配相同数目的region。当然这决定于很多因素,由于两个系统都使用普通电脑,出于负载考虑,它们推荐相同的数目Tablet/Region大小100-200MB256MB在两个系统中,单个Region大小是可配置的,在HBase中,默认大小为256MBHbase的一个例子l这里我们用一个学生成绩表作为例子,对HBase的基本操作和基本概念进行讲解:下面是学生的成绩表:namegradcourse:mathcourse:artTom187
41、97Jerry210080l这里grad对于表来说是一个列,course对于表来说是一个列族,这个列族由两个列组成:math和art,当然我们可以根据我们的需要在course中建立更多的列族,如computer,physics等相应的列添加入course列族.l有了上面的想法和需求,我们就可以在HBase中建立相应的数据表l下面我们分别通过shell和Java程序调用API来实现。98一个例子-shell1. 建立一个表格建立一个表格 scores 具有两个列族具有两个列族grad 和和couresehbase(main):002:0createscores,grade,course0row(
42、s)in4.1610seconds2.查看当先查看当先HBase中具有哪些表中具有哪些表hbase(main):003:0listscores1row(s)in0.0210seconds3.查看表的构造查看表的构造hbase(main):004:0describescoresNAME=scores,IS_ROOT=false,IS_META=false,FAMILIES=NAME=course,BLOOMFILTER=false,IN_MEMORY=false,LENGTH=2147483647,BLOCKCACHE=false,VERSIONS=3,TTL=-1,COMPRESSION=NO
43、NE,NAME=grade,BLOOMFILTER=false,IN_MEMORY=false,LENGTH=2147483647,BLOCKCACHE=false,VERSIONS=3,TTL=-1,COMPRESSION=NONE1row(s)in0.0130seconds4. 加入一行数据加入一行数据,行名称为行名称为 Tom 列族列族grad的列名为的列名为“”“”, 值为值为1hbase(main):005:0putscores,Tom,grade:,10row(s)in0.0070seconds99一个例子-shell5.给给Tom这一行的数据的列族添加一列这一行的数据的列族添加一
44、列 hbase(main):006:0putscores,Tom,course:math,870row(s)in0.0040seconds6.给给Tom这一行的数据的列族添加一列这一行的数据的列族添加一列 hbase(main):007:0putscores,Tom,course:art,970row(s)in0.0030seconds7. 加入一行数据加入一行数据,行名称为行名称为 Jerry 列族列族grad的列名为的列名为“”“”, 值为值为2hbase(main):008:0putscores,Jerry,grade:,20row(s)in0.0040seconds8.给给Jerry这
45、一行的数据的列族添加一列这一行的数据的列族添加一列 hbase(main):009:0putscores,Jerry,course:math,1000row(s)in0.0030seconds9.给给Jerry这一行的数据的列族添加一列这一行的数据的列族添加一列 hbase(main):010:0putscores,Jerry,course:art,800row(s)in0.0050seconds.100一个例子-shell10.查看查看scores表中表中Tom的相关数据的相关数据hbase(main):011:0getscores,TomCOLUMNCELLcourse:arttimest
46、amp=1224726394286,value=97course:mathtimestamp=1224726377027,value=87grade:timestamp=1224726360727,value=13row(s)in0.0070seconds11.查看查看scores表中所有数据表中所有数据hbase(main):012:0scanscoresROWCOLUMN+CELLTomcolumn=course:art,timestamp=1224726394286,value=97Tomcolumn=course:math,timestamp=1224726377027,value=8
47、7Tomcolumn=grade:,timestamp=1224726360727,value=1Jerrycolumn=course:art,timestamp=1224726424967,value=80Jerrycolumn=course:math,timestamp=1224726416145,value=100Jerrycolumn=grade:,timestamp=1224726404965,value=26row(s)in0.0410seconds101一个例子-shell12. 查看查看scores表中所有数据表中所有数据courses列族的所有数据列族的所有数据hbase(m
48、ain):013:0scanscores,course:ROWCOLUMN+CELLTomcolumn=course:art,timestamp=1224726394286,value=97Tomcolumn=course:math,timestamp=1224726377027,value=87Jerrycolumn=course:art,timestamp=1224726424967,value=80Jerrycolumn=course:math,timestamp=1224726416145,value=1004row(s)in0.0200seconds上面就是HBase的基本shell
49、操作的一个例子,可以看出:(1)HBase的shell还是比较简单易用的。(2)从中也可以看出HBaseshell缺少很多传统SQL中的一些类似于like等相关操作。(3)当然,HBase作为BigTable的一个开源实现,而BigTable是作为google业务的支持模型,很多SQL语句中的一些东西可能还真的不需要。102一个例子-Java通过程序我们也可以对HBase进行相关的操作.下面的程序就完成了上面shell操作的内容:importjava.io.IOException;importjava.io.ByteArrayOutputStream;importjava.io.DataOut
50、putStream;importjava.io.ByteArrayInputStream;importjava.io.DataInputStream;importjava.util.Map;importorg.apache.hadoop.io.Writable;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.HTableDescriptor;importorg.apache.hadoop.hbase.HCol
51、umnDescriptor;importorg.apache.hadoop.hbase.client.HBaseAdmin;importorg.apache.hadoop.hbase.client.HTable;importorg.apache.hadoop.hbase.io.BatchUpdate;importorg.apache.hadoop.hbase.io.RowResult;importorg.apache.hadoop.hbase.io.Cell;importorg.apache.hadoop.hbase.util.Writables;103一个例子-Javapublicclass
52、HBaseBasicpublicstaticvoidmain(Stringargs)throwsExceptionHBaseConfigurationconfig=newHBaseConfiguration();HBaseAdminadmin=newHBaseAdmin(config);if(admin.tableExists(scores)System.out.println(droptable);admin.disableTable(scores);admin.deleteTable(scores);System.out.println(createtable);HTableDescrip
53、tortableDescripter=newHTableDescriptor(scores.getBytes();tableDescripter.addFamily(newHColumnDescriptor(grade:);tableDescripter.addFamily(newHColumnDescriptor(course:);admin.createTable(tableDescripter);104一个例子-JavaAPIHTabletable=newHTable(config,scores);System.out.println(addTomsdata);BatchUpdateto
54、mUpdate=newBatchUpdate(Tom);tomUpdate.put(grade:,Writables.getBytes(newIntWritable(1);tomUpdate.put(course:math,Writables.getBytes(newIntWritable(87);tomUpdate.put(course:art,Writables.getBytes(newIntWritable(97);mit(tomUpdate);System.out.println(addJerrysdata);BatchUpdatejerryUpdate=newBatchUpdate(
55、Jerry);jerryUpdate.put(grade:,Writables.getBytes(newIntWritable(2);jerryUpdate.put(course:math,Writables.getBytes(newIntWritable(100);jerryUpdate.put(course:art,Writables.getBytes(newIntWritable(80);mit(jerryUpdate);for(RowResultrow:table.getScanner(newStringcourse:)System.out.format(ROWt%sn,newStri
56、ng(row.getRow();for(Map.Entryentry:row.entrySet()Stringcolumn=newString(entry.getKey();Cellcell=entry.getValue();IntWritablevalue=newIntWritable();Writables.copyWritable(cell.getValue(),value);System.out.format(COLUMNt%st%dn,column,value.get();输出如下:droptable09/07/1108:51:59INFOclient.HBaseAdmin:Disa
57、bledscores09/07/1108:51:59INFOclient.HBaseAdmin:DeletedscorescreatetableaddTomsdataaddJerrysdataROWTomCOLUMNcourse:art97COLUMNcourse:math87ROWJerryCOLUMNcourse:art80COLUMNcourse:math1001052024/8/23CloudComputing,GUCAS106总结1.关系数据库的瓶颈2.云计算对数据库技术的要求3.NoSQL数据库4.BigTable5.HBase106实验作业Hadoop和HBase的安装和配置下载安装使用撰写实验报告检查107