HBase实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-12-02 00:55:33

点击下载

作者:[美]NickDimidukAmandeepKhurana著

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

HBase实战

HBase实战试读:

前言

2008年秋季我开始和 HBase 结缘,当时它还是一个新生项目,一年前刚刚发布。早期版本出来时,HBase表现很不错,但是也不是没有令人尴尬的缺陷。HBase项目当时有近10个软件Commiffer,作为一个Apache子项目还算不错。接下来是NoSQL宣传的高潮。当时专有名词 NoSQL 还没有出现,但是随后的一年这个术语变成了通俗用语。没有人能够说清楚为什么 NoSQL 重要,只知道它就是重要,反正数据领域开源社区的每个人都对这个概念很着迷。社区中有两种声音,有人批评关系型数据库,批评它愚不可及的严谨;有人嘲笑新技术,嘲笑它不够成熟。

大部分探索新技术的人来自于互联网公司,当时我就在一家致力于社交媒体内容分析的创业公司工作。那时候Facebook仌在强调隐私政策,而Twitter还不够大,其著名的报错页面“失败的鲸鱼”(Fail Whale)还没有问世。当时我们的兴趣点主要在博客上。在此前一家公司我花了3年好时光专注于层次型数据库引擎。我们广泛使用了Berkeley DB,所以我熟悉不使用SQL引擎的数据技术。在这家公司我加入了一个小团队,仸务是构建一个新型数据管理平台。我们有一个MS SQL数据库,已经塞满了博客帖子和评论。当我们的日常分析作业耗时达到18小时时,我们都知道这个系统时日不多了。

在收集了基本需求后,我们着手寻找新型数据技术。我们的团队不大,一边维护现有系统,一边花了数月时间评估不同的选择。我们试验了不同的方法,幵亲身感受了对数据手工分区的痛苦。我们研究了CAP定理和最终一致性,最后的结论是妥协。尽管HBase有缺点,我们还是决定选择它,我们认为开源技术的潜在好处超过了它的风险,幵且说服了经理。

我在家里玩过Hadoop,但是仍没有写过真正的MapReduce作业。我听说过HBase,但在这仹新工作之前也没有特别关注过。随着时间推移,我们已经开始行动。我们申请了一些空闲机器和几个机架,然后就开工了。这家公司是.NET 的地盘,我们得不到运维支持,所以我们学着使用bash和rsync,自己管理整个集群。

我加入了邮件列表和IRC频道,开始提问题。就在那个时候,我认识了Amandeep。他在忙于硕士论文,尝试把HBase运行到Hadoop以外的系统上。不久他完成学业,加入Amazon,搬到西雅图。在这个充满微软痕迹的城市中,我们两个是少有的HBase粉丝。随后两年很快过去了……

2010年秋季,第一次提出让我们写《HBase实战》。在我们看来,这很搞笑。为什么是我们这两个社区会员来写这本书?内部来看,这是一块难啃的骨头。《HBase 权威指南》正在迚展中,我们认识它的作者,我们深知在他面前的挑战。外部来看,我认为HBase只是一个“简单的键值数据库”。API只有5个基本概念,都不复杂。我们不想再写一本类似于《HBase权威指南》那样介绍内部机制的书,我也不相信应用开发人员仍这类书中可以得到足够有价值的东西。

我们开始做头脑风暴,事情很快清楚了,我是错的。不仅可以找到足够的资料帮助用户,而且社区会员的角色使得我们成为写这本书的最佳人选。我们开始分门别类整理多年来我们使用这门技术累积下来的知识。这本书是我们8年来使用HBase实践经验的升华。它面向HBase的全新用户,可以指导大家跃过我们自己当年遇到过的障碍。我们尽可能多地收集和编篡了散布在社区里的内部知识。对于模糊的建议我们尽可能给出清晰的指导。我们希望你能发现这本书是一个完整的手册,可以帮助你顺利开始使用HBase,而不只是一个简单的问答列表。

HBase现在逐渐稳定了。我们开始时遇到过的大部分缺陷已经被解决、打上补丁、或者完全修改了架构。HBase正在接近1.0版本,在这个里程碑时刻我们很自豪自已是社区的一部分。我们很自豪把这仹书稿提交给社区,希望它可以鼓舞和帮助下一代HBase用户。HBase最强大之处就是兴旺的社区,我们希望你加入到社区来,帮助社区在数据系统新时代继续创新。Nick Dimiduk

当你看到这里的时候,你大概很想知道我是怎样迚入HBase世界的。首先我要感谢你选择这本书来学习HBase,学习怎样使用HBase作为存储系统来搭建应用系统。希望你能找到有用的东西和实用技巧,以便更好地搭建应用系统,祝你成功。

我曾经在加州大学圣兊鲁兹分校迚行本科学习,当时我在思科公司找了一仹兼职研究员的工作,专注于分布式系统。我所工作的团队当时在搭建一个数据集成框架,这个框架可以对数百种数据存储(包括但不限于大型关系型数据库管理系统)上的数据迚行集成、索引和研究。我们开始寻找可以解决问题的系统和解决方案。我们评估了许多系统,仍对象数据库到图形数据库,最后我们考虑基于Berkeley DB构建一个定制的分布式数据存储。显而易见的一个关键需求是可扩展性,但是我们幵不想仍头开始构建一个分布式系统。想想看,如果你为某个机构工作,打算构建一个定制的分布式数据库或者文件系统,最好先看看有没有现成的解决方案可以解决你的一部分问题。

基于这个原则,我们认为仍头开始搭建新系统是不明智的,我们希望使用已有的技术。随后我们开始使用Hadoop系列产品,尝试了很多组件,在HBase上为数据集成系统搭建了概念验证原型系统。系统工作良好,扩展性也不错。HBase很适合解决这类问题,但是当时它们都是新生项目,能够保证我们成功的一个重要因素是它们的社区。HBase有着一个最热情的、最有活力的开源社区;当时社区规模要小得多,但是迄今为止其核心理念一直没有变化。

后来数据集成项目成了我的研究生论文。这个项目用HBase作为核心,因此我也越来越深入地参与到社区中。在邮件列表里和IRC频道里,开始我是问别人问题,后来我也回答别人的问题。在这段时间里我认识了Nick幵了解了他在做什么。在为这个项目工作的过程中,我对这个技术和开源社区的兴趣和热爱与日俱增,我希望一直参与下去。

完成研究生学习后,我加入了位于西雅图的 Amazon,开始做后端分布式系统项目的工作。我的大部分时间花在Elastic MapReduce 团队那里,我们搭建了HBase 托管服务的第一个版本。Nick也生活在西雅图,我们经常见面,讨论工作中的项目情况。2010年底,Manning出版社提出写《HBase实战》这本书。开始的时候我们觉得这个想法很搞笑,我记得对 Nick说过:“不就是上传、下载和扫描吗?HBase的客户端只做这几件事情。你想写一本介绍3 个API 调用的书吗?”

但是深入思考之后,我们意识到构建HBase应用系统很有挑战,而市面上缺乏足够的资料可供启蒙。这种情况限制了HBase的发展。我们决定收集更多如何有效使用HBase的资料,来帮助大家构建满足需要的系统。我们花了一些时间整理资料,2011年秋季,我们开始了这本书的写作。

那段时间,我搬家到了旧金山,加入了Cloudera公司,接触到很多搭建在Hadoop和 HBase 上的应用系统。我尽力结合我所知道的以及过去多年在 HBase 相关工作中和研究生学习中得到的,提取精华写到你现在读的这本书中。多年来HBase走了很长的路,许多大公司使用它作为核心系统。它比以往更加稳定、快速和易于维护,1.0 版本也接近发布了。

我们写这本书的目的就是希望学习HBase可以更加有章可循,更加容易,更加有趣。等你迚一步了解HBase以后,我们鼓励你参与到社区中来,你可以学到更多在这本书中没有讲到的。你可以发表博客,贡献代码,分享经验,让我们一起推动这个伟大的项目向各种可能的方向走得更进。打开书,开始阅读,欢迎来到HBase世界!Amandeep Khurana致谢

编写这本书时,我们一直谦逊地提醒自己:我们站在了巨人的肩上。如果没有 10年前Google发表的那些论文,就不会有HBase和Hadoop。如果没有那些受这些论文启发并想办法解决自己挑战的人,就不会有HBase。无论是过去还是现在,我们要对每一个HBase和Hadoop的贡献者说:谢谢你。我们尤其要感谢HBase的代码提交者。你们往这个世界上最先迚的数据技术项目里不断地投入时间和精力。更令人惊讶的是,你们把努力的结果贡献给了广大的社区。谢谢你们。

没有整个HBase社区就不可能有这本书。HBase拥有着NoSQL领域最大的、最活跃的、最热情的用户社区之一。我们还要感谢邮件列表中每个提问题的人和耐心回答问题的人。你们的热情和回答问题的意愿从一开始就鼓励大家参与迚来。你们所提的问题和所需要的帮助许多是我们在书中提炼和澄清的内容的基础。我们希望能够扩大HBase的影响力并且帮助HBase的拥护者。

我们要特别感谢在这个过程中帮助我们的许多 HBase 代码提交者和社区会员。特别感谢Michael Stack、Lars George、Josh Patterson 和Andrew Purtell,感谢你们的鼓励,也感谢你们提示我们这本书给社区带来的价值。感谢Ian Varley、Jonathan Hsieh 和Omer Trajman,感谢你们贡献思路和反馈建议。Benoît Sigoure 审核了OpenTSDB 那一章(第7章)和asynchbase那一节(6.5节),谢谢你贡献的代码和评论。感谢Michael为本书作序,感谢Lars撰写了“致HBase社区的一封信”。

我们还要感谢我们各自的公司Cloudera, Inc.和The Climate Corporation,你们不仅支持我们,而且鼓励我们,没有你们不可能完成这本书。

我们要感谢Manning 出版社的编辑Renae Gregoire 和Susanna Kline。你们目睹了这本书从毫无头绪地开始到成功地完成的整个过程。我们认为你们其他的项目不会像我们这个如此令人兴奋!感谢我们的技术编辑Mark Henry Ryan 以及技术校对Jerry Kuch和Kristine Kuch。

下面的人在编写本书的各个阶段阅读和审核了书稿,感谢你们提供了富有洞察力的反馈意见:Aaron Colcord、Adam Kawa、Andy Kirsch、BobbyAbraham、Bruno Dumon、Charles Pyle、Cristofer Weber、Daniel Bretoi、Gianluca Righetto、Ian Varley、John Griffin、Jonathan Miller、Keith Kim、Kenneth DeLong、Lars Francke、Lars Hofhansl、Paul Stusiak、Philipp K. Janert、Robert J. Berger、Ryan Cox、Steve Loughran、Suraj Varma、Trey Spiva和Vinod Panicker。

最后也是最重要的——没有家人和朋友的认可我们什么也做不了,没有爱我们的人的支持我们完成不了这本书。谢谢你们在整个过程中的支持和耐心。关于本书

HBase建立在Apache Hadoop和Apache ZooKeeper这些复杂的分布式系统之上。虽说你不必成为所有这些技术的专家才可以有效使用HBase,但是理解这些基础层面的知识有助于充分利用HBase。这些技术受了Google发表的论文启发。这些技术是Google的这些出版物中所描述的技术的开源实现。阅读这些专业论文对于使用 HBase 或其他这些技术虽说不是必要条件,但是当你学习一种技术,了解启发它们发明的源头总是有用的。尽管本书不要求你熟悉这些技术,也不要求你读过相关论文。《HBase实战》定位是HBase的用户指南。它不会涉足HBase内部工作机制,也不会涉足理解Hadoop生态系统所必需的广泛话题。《HBase实战》专注于一点:使用HBase。它会指导你在HBase上搭建应用系统,并且在生产环境中使用这个应用系统。同时,你会学到一些HBase实施细节。你也会熟悉Hadoop的其他产品。你会学习足够的知识来理解HBase的工作方式,并问一些聪明的问题。本书不会把你培养成HBase的Committer(代码提交者),但会教你HBase的实战技巧。

路线图《HBase实战》分为4个部分。前两个部分介绍如何使用HBase。在6章的篇幅里,你会从一个新手成长为可以在HBase上熟练编程的人。在这个过程中,你会学到HBase的基本原理、模式设计以及如何使用HBase的高级特性。最重要的是,你将学会用HBase的方式思考。第三部分有两章,介绍一些应用示例,让你体会一下实际应用是什么样子。第四部分指导你如何把原型开发系统升级为羽翼丰满的生产系统。

第1章总体介绍Hadoop、HBase和NoSQL的起源。我们将介绍HBase是什么和不是什么,把HBase和其他NoSQL数据库迚行对比,介绍一些通用的使用场景。我们会帮你判断对于你的项目和公司来说HBase是否是正确的技术选择。第1章包括简单安装HBase和开始存储一点儿数据。

第2章开始运行一个示例应用。通过这个例子,我们探讨使用HBase的基础知识。包括创建表、存取数据以及 HBase 的数据模型。我们也会深入探讨 HBase 的内部工作机制,理解HBase如何组织数据,以及在你的应用中如何利用这些知识。

第3章作为一个分布式系统重新介绍HBase。本章探讨HBase、Hadoop和ZooKeeper之间的关系。你会学到HBase的分布式架构以及如何转换成一个强大的分布式数据系统。动手练习示例中会探讨在HBase上使用Hadoop MapReduce的使用场景。

第4章专门针对HBase模式设计。我们用示例应用来探讨这个复杂的主题。你会看到表设计决策是如何影响应用的,以及如何避免常见错误。我们会把一些关系型数据库知识映射到HBase世界里。你还会看到如何使用服务器端过滤器(server-side filter)来迚一步完善模式设计。这一章也涵盖HBase的高级物理配置选项。

第5章介绍协处理器(coprocessor),这是一种把计算推向HBase集群的计算机制。你会用两种不同的方式扩展示例应用,在集群上构建应用的新特性。

第6章全面、快速地介绍可选的HBase客户端。HBase是用Java编写的,但这并不意味着你的应用必须是用Java编写的。你可以用各种编程语言和不同的网络协议来访问示例应用。

第三部分从第7章开始,将开始构建一个真实的、可以投入生产环境的应用系统。你会了解这个应用系统打算解决的问题和特别的挑战。然后我们深入到实现过程中,在技术细节上做全面考虑。也就是说,从前端到后端全面探讨如何在HBase上搭建应用系统。

第8章介绍如何在一个新领域里使用HBase。我们将带你快速迚入这个新领域——GIS,然后教你如何基于HBase使用一种可扩展的方式来面对这个领域里特别的挑战。这一章的焦点在于针对特定领域的模式设计以及最大化利用扫描(scan)和过滤器(filter)特性。之前可以没有GIS经验,但是要准备好充分运用前面章节学习的知识。

在第四部分,第 9 章将部署你的 HBase 集群。从头开始,我们教你如何着手迚行HBase部署。这一章将探讨硬件的种类、数量和如何分配硬件。考虑云服务吗?我们也会谈到。硬件确定以后,我们为你介绍如何为一个基本部署配置集群,如何让集群正常启动运行。

第10章将把你的部署升级到生产水平。我们教你通过参数和监控工具来监控集群。你会了解到如何根据你的应用负载来迚一步优化集群的性能。我们教你如何管理集群,如何保持集群健康运行,有问题时如何诊断和处理,有需要时如何升级,等等。你将学习使用附带的工具来管理数据的备份和恢复,以及如何配置多集群间的复制工作。

目标读者

本书是一本数据库的用户实践手册。因此,它的主要受众群体是希望快速掌握HBase的应用开发人员和技术架构师。本书实践多于理论,使用技巧多于原理研究。本书的用途是开发人员指南,而不是学生教科书。本书也会介绍部署和运维的基本知识,所以对于运维工程师来说也能起到一定的帮助。(坦白说,面向运维人员的HBase方面的书还没有编写。)

HBase是用Java编写的,运行在JVM上面。我们希望你熟悉类似于类文件和JAR这样的Java编程语言和JVM概念。我们也假定你基本掌握一些JVM工具,特别是Maven,因为书中的源代码使用这个软件管理。Hadoop和 HBase运行在Linux和UNIX系统上,因此需要你掌握UNIX的基本知识。HBase不支持Windows操作系统,本书也不支持。Hadoop方面的经验会有帮助,尽管不是必需的。在这个领域,关系型数据库无处不在,所以我们假定你理解相关技术的概念。

HBase是一种分布式系统,使用了分布式、并行计算技术。希望你理解并行编程的基本概念,如多线程和并发迚程等。我们不要求你知道如何编写并行计算程序,但是你应该熟悉并发执行线程的思路。本书重心不在算法理论,但是任何操作TB或PB级数据的人都应该对渐迚计算的时间复杂度有概念。在模式设计的那一章中大O标记[1] 会频频出现。

代码约定

和我们编写一本实战书籍的目标相一致,你会发现我们自由混合文字和代码。有时段落间只有两行代码。我们的指导思路是只在有必要时才展示给你如何使用API,然后提供额外的细节。这些代码片段将随着章节内容发展和演变。我们总是在小结一章时,给出代码的完整列表,提供充分的上下文背景。我们偶尔使用类 Python 风格的伪代码来帮助解释。这主要是在Java代码中使用了太多样板代码或者其他语言噪音以致于干扰了预期关键点的场合。真正的Java实现一般紧跟在伪代码后面提供。

因为这是一本动手的书,我们还使用了许多命令来演示系统的一些方面。这些命令包括你在终端输入的东西和你期望从系统得到的输出。软件系统会随着时间而改变,所以完全有可能在我们打印命令输出的时候,输出的内容有些变化。不过,这应该足以引导你判断系统预期的表现。

在命令和源代码部分,我们广泛使用了说明文字和注释来引起你对重要内容的注意。一些命令输出可能比较密集,尤其是使用 HBase Shell 时;使用说明文字和注释做引导比较清楚。文本中的代码使用等宽字体。

代码下载

我们所有的源代码,无论是小的脚本还是整个应用程序,都可以下载并且开源。我们已经把它们在 Apache License Version 2.0 下发布,与 HBase 一样的授权方式。你可以在GitHub专门为本书建立的网站www.github.com/HBaseinaction上找到源代码。在那里每个项目都是完整的应用程序。你也可以从出版商的网站 www.manning.com/HBaseinaction上下载代码。

遵循开源的精神,我们希望我们的示例代码在你的应用中有用。我们鼓励你使用、修改、发展并与别人分享它们。如果你发现错误,请让我们知道,或者是提交问题,或者更好是修正问题。开源社区常说:欢迎补丁。

注 释

[1]. 表示算法的时间复杂度。——译者注第一部分 HBase基础

本书前三章介绍HBase的基本原理。第1章大体上回顾一下数据库技术的演变,并介绍HBase出现的特定背景。

第2章通过建立一个应用示例——TwitBase来讲授HBase的基础知识。通过这个示例,你可以学习如何访问HBase以及如何设计HBase的模式(schema),你会简单地了解到在应用系统中如何有效使用HBase。

HBase是一种分布式系统,我们在第3章会探讨分布式架构。你将学习到HBase如何在集群中管理你的数据以及如何使用MapReduce 访问HBase。到第一部分结束,你就能掌握搭建HBase应用系统所需的基本知识了。第1章 HBase 介绍

本章涵盖的内容

■ Hadoop、HBase 和NoSQL的起源

■ HBase 的常见使用场景

■ HBase 的基本安装

■ 使用HBase 存储和查询数据

HBase 是一种数据库:Hadoop 数据库。它经常被描述为一种稀疏的、分布式的、持久化的、多维有序映射,它基于行键(rowkey)、列键(column key)和时间戳(timestamp)建立索引。人们会说它是一种键值(key value)存储、面向列族的数据库,有时也是一种存储多时间戳版本映射的数据库。所有这些描述都是正确的。但是从根本上讲,它是一个可以随机访问的存储和检索数据的平台,也就是说,你可以按照需要写入数据,然后再按照需要读取数据。HBase 可以自如地存储结构化和半结构化的数据,所以你可以录入微博、解析好的日志文件或者全部产品目录及其用户评价。它也可以存储非结构化数据,只要不是特别大。它不介意数据类型,允许动态的、灵活的数据模型,并不限制存储的数据的种类。

HBase不同于你可能已经习惯的关系型数据库。它不用SQL语言,也不强调数据之间的关系。HBase不允许跨行的事务,你可以在一行的某一列存储一个整数而在另一行的同一列存储字符串。

HBase被设计成在一个服务器集群上运行,而不是单台服务器。集群可以由普通硬件构建;当把更多机器加入集群时,HBase可以相应地横向扩展。集群中的每个节点提供一部分存储空间、一部分缓存和一部分计算能力,因此HBase难以想象地灵活和宽容。因为没有独一无二的节点,所以某一台机器坏了,只需简单地用另一台机器替换即可。这意味着一种强大的、可扩展的使用数据的方式,到现在为止,一直没有官方数据说明它的扩展上限。

加入社区

遗憾的是,在生产环境中使用的最大的 HBase 集群没有官方的公开数据。这种信息容易被认为是商业机密而受到限制,经常不能分享。眼下,你只能在用户群组、聚会和会议上通过出版物的脚注、幻灯片内容或者是友好的非正式的八卦里满足一下好奇心了。

那么加入社区吧!这是正确的选择,我们也是这样参与进来的。HBase是一个非常专业领域里的开源项目。尽管HBase面对世界上最大几家软件公司的竞争,但是该项目的财务状况良好。是社区创造了HBase,也是社区使它保持竞争能力和创新能力。另外,这是一个智慧的、友好的群体。最好的开始方式是加入邮件列表 [1] 。你可以从JIRA网站 [2] 得到进展中的产品特性、增强和Bug等情况的信息。这是个开源的、协作的项目,正是像你这样的用户决定着项目的方向和发展。

走上前去,告诉他们,你来了!

HBase是设计和目标都与传统关系型数据库不同的系统,使用HBase构建应用也需要不同的方法。本书就是专门教你怎样使用HBase提供的特性来构建处理海量数据的应用的。在开始学习使用HBase之前,我们先从历史的角度来看看HBase是怎么出现的,以及其背后的驱动力。然后我们再看看人们使用HBase解决问题的成功案例。可能你和我们一样,在深入研究之前想试用一下HBase。最后我们会指导你在自己的笔记本电脑上安装HBase,存些数据进去,跑跑看看。学习HBase,了解大背景很重要,让我们先从数据库的演变历史开始。

1.1 数据管理系统:速成

关系型数据库系统已经存在几十年了,多年来在解决数据存储、服务和处理问题方面取得了巨大的成功。一些大型公司使用关系型数据库建立了自己的系统,比如联机事务处理系统和后端分析应用系统。

联机事务处理(OLTP)系统用来实时记录交易信息。对这类系统的期望是能够快速返回响应信息,一般是在毫秒级。例如,零售商店的收银机在客户购买和付款时需要实时记录相应信息。银行拥有大型OLTP系统,用来记录客户之间转账之类的交易信息,但OLTP不仅仅用于资金交易,像LinkedIn这样的互联网公司也需要这样的系统,例如,当用户连接其他用户时也会用到。OLTP中的transaction指的是数据库语境中的事务,而不是金融交易。

联机分析处理(OLAP)系统用来分析查询所存储数据。在零售商那里,这种系统意味着按天、按周、按月生成销售报表,按产品和按地域从不同角度分析信息。OLAP属于商业智能的范畴,数据需要研究、处理和分析,以便收集信息,进一步驱动商业决策。对于LinkedIn这样的公司,连接关系的建立可以看做事务,分析用户关系图的连通性以及生成每用户平均联系数量这种信息的报表就属于商业智能,这种处理很可能需要使用OLAP系统。

无论是开源的还是商业版权的关系型数据库,都已经成功地用于这样的使用场景。这一点通过Oracle、Vertica、Teradata等公司的财务报表可以清楚地看到。微软公司和IBM公司也占有一定份额。所有这些系统提供全面的ACID[3] 保证。一些系统扩展性要优于其他系统;一些系统是开源的,还有一些需要支付夸张的许可费用。

关系型数据库的内部设计由关系算法决定,这些系统需要预先定义一个模式(schema)和数据要遵守的类型。随着时间的推移,SQL 成了与这些系统交互的标准方式,被广泛使用了许多年。与使用编程语言编写定制访问代码相比,SQL语句更容易写,花费时间也要少得多。但并不是所有情况下 SQL 都是表达访问模式的最好方式,比如对象-关系不匹配问题出现的场合。

计算机科学中的问题都可以通过改变使用方式来解决。解决对象-关系不匹配问题也没有什么不同,最终可以通过重建框架来解决。

1.1.1 你好,大数据

让我们认真看看大数据这个术语。说实话,这是一个过分吹捧的术语,很多商业化的企业都会使用它来进行市场营销。我们这里尽量让讨论接点儿地气。

什么是大数据?关于大数据的定义有好几种,我们认为没有哪一种定义清晰地解释了这个术语。比如,一些定义说大数据意味着数据足够大,为了从这些数据中获得一些真知灼见,你不得不研究它;另一些说大数据就是不再适用于单台机器的数据。这些定义从他们各自的角度来看是准确的,但并不完整。我们的观点是,我们需要用一种根本上不同的方式来考虑数据,从如何驱动商业价值的角度来考虑数据,这种数据就是大数据。传统上,有联机事务处理系统(OLTP)和联机分析处理系统(OLAP)。但是,事务处理背后的原因是什么?是什么因素促成业务发生?又是什么直接影响了用户行为?我们缺乏这样的洞察力。以早期的LinkedIn为例,这种使用数据的方式可以理解为:基于用户属性、用户之间的二度关系、浏览行为等寻找可能认识的人,然后主动推荐并引导用户联系他们。有效地寻求这种主动推荐行为显然需要大量的各种各样数据。

这种新型数据使用方式首先为Google和Amazon等互联网公司采用,随后是Yahoo!和 Facebook 跟进。这些公司需要使用不同种类的数据,经常是非结构化的或者半结构化的数据(如用户访问网站的日志)。这需要系统处理比传统数据分析高了几个数量级的数据。传统关系型数据库能够纵向扩展到一定程度来面对一些使用场景,但这样做经常意味着昂贵的许可费用和复杂的应用逻辑。

但是受制于关系型数据库提供的数据模型,对于逐渐出现的、未预先定义模式(schema)的数据集,关系型数据库不能很好地工作。系统需要能够适应不同种类的数据格式和数据源,不需要预先严格定义模式,并且能够处理大规模数据。系统需求发生了巨大变化,互联网先驱不得不走回画图板,重新设计数据库,他们这样做了。大数据系统和NoSQL的曙光出现了。(有人可能会说曙光出现的时间点还要再晚一些,这并不重要,这的确标志着大家开始以不同方式思考数据了。)

作为数据管理系统创新的一部分,出现了几种新技术。每种新技术都适用于不同的使用场景,有着不同的设计前提和功能要求,也有着不同的数据模型。

什么时候会谈到HBase呢?是什么促使了这个系统的创立呢?请看下一节介绍。

1.1.2 数据创新

我们知道,许多杰出的互联网公司,如最突出的Google、Amazon、Yahoo!、Facebook等,都处于这场数据大爆炸的最前沿。一些公司自己生成数据,还有一些公司收集免费可获得的数据;但是管理这些海量的不同种类的数据成为他们推进业务发展的关键。开始阶段他们都采用了当时可用的关系型数据库技术,但是这些技术的局限性随后成了他们继续发展和业务成功的障碍。尽管数据管理技术不是他们业务的核心,但却是推进业务的基础。因此,他们大量投资于新技术研究领域,带来了许多新数据技术的突破。

很多公司都对自己的研究成果严格保密,但是Google选择公开讲述他的伟大技术。Google发表了震撼性的Google文件系统(Google File System)[4] 和MapReduce[5] 的论文。两者结合展示了一种全新的存储和处理数据的方法。此后不久,Google发表了BigTable[6] 的论文,对基于Google文件系统的存储范型提供了补充。其他公司也参与进来,公布了各自的成功技术的想法和做法。Google的论文提供了对于如何建立互联网索引的深刻理解,Amazon公布了Dynamo[7] ,解密了网上购物车的基本组件。

不久,所有这些新想法都被浓缩到开源实践中。接下来的几年,数据管理领域出现了形形色色的项目。一些项目关注快速键值(key-value)存储,而另外一些关注内置数据结构或者基于文档的抽象化。同样多种多样的是这些技术可以支持的预期访问模式和数据量。一些项目甚至放弃写数据到硬盘,为了性能而牺牲当前的数据持久化。大多数技术不能保证支持受推崇的 ACID。尽管有一些是商业版权产品,但是绝大多数这类技术都是开源项目。因此,这些技术作为整体被称为NoSQL。

HBase适于什么场合呢?HBase的确被称为NoSQL数据库。它提供了键值API,尽管有些变化,与其他键值数据库有些不同。它承诺强一致性,所以客户端能够在写入后马上看到数据。HBase运行在多个节点组成的集群上,而不是单台机器。它对客户端隐藏了这些细节。你的应用代码不需要知道它在访问1个还是100个节点,对每个人来说事情变得简单了。HBase被设计用来处理TB到PB级数据,它为这种场景做了优化。它是 Hadoop 生态系统的一部分,依靠 Hadoop 其他组件提供的重要功能,例如数据冗余和批处理。

了解了大背景后,我们再专门看看HBase的崛起。

1.1.3 HBase 的崛起

假设你正忙于一个开源项目,通过爬网站和建立索引来搜索互联网。你有一个实现方案,这个实现方案工作在一个小集群上,但是需要许多手工环节。再假设你正忙于这个项目的时候,Google发表了数据存储和数据处理框架的论文。显然,你会研究这些论文,模仿它们启动一个开源实现。好吧,你不打算这么做,我们当然也不会,但是Doug Cutting和Mike Cafarella 就是这么做的。

Nutch是他们的互联网搜索开源项目,脱胎于Apache Lucene,Hadoop就是在Nutch项目里诞生的 [8] 。从那时起,Yahoo!开始关注Hadoop,最后Yahoo!招募了Cutting和其他人为Yahoo!全职工作。随后,Hadoop从Nutch中剥离出来,最后成为Apache的顶级项目。随着Hadoop的良好发展和BigTable论文的发表,在Hadoop上面实现一个BigTable开源版本的基础工作开始了。2007年,Cafarella发布了实验性代码,开源的BigTable。他称其谓HBase。创业公司Powerset决定贡献出Jim Kellerman和Michael Stack两位专家专职做这个BigTable的模仿产品,回馈它所依赖的开源社区 [9] 。

HBase被证实是一个强大的工具,尤其是在已经使用Hadoop的场合。在其“婴儿期”的时候,它就快速部署到了其他公司的生产环境并得到开发人员的支持。今天,HBase已经是 Apache 顶级项目,有着众多的开发人员和兴旺的用户社区。它成为一个核心的基础架构部件,运行在世界上许多公司(如StumbleUpon、Trend Micro、Facebook、Twitter、Salesforce和Adobe)的大规模生产环境中。

HBase不是数据管理问题的;“万能药”,针对不同的使用场景你可能需要考虑其他的技术。让我们看看现在HBase是如何使用的,人们用它构建了什么类型的应用系统。通过这个讨论,你会知道哪种数据问题适合使用HBase。

1.2 HBase使用场景和成功案例

有时候了解软件产品的最好方法是看看它是怎么用的。它可以解决什么问题和这些解决方案如何适用于大型应用架构,这些能够告诉你很多。因为HBase有许多公开的产品部署案例,我们正好可以这么做。本节将详细介绍一些成功使用HBase的使用场景。

注意 不要自我限制,认为 HBase 只能在这些使用场景下使用。它是一个很新的技术,根据使用场景进行的创新正推动着该系统的发展。如果你有新想法,认为HBase提供的功能会让你受益,那就试试吧。社区很乐于帮助你,也会从你的经验中学习。这正是开源软件精神。

HBase模仿了Google的BigTable,让我们先从典型的BigTable问题开始:存储互联网。

1.2.1 典型的互联网搜索问题:BigTable发明的原因

搜索是一种定位你所关心信息的行为。例如,搜索一本书的页码,其中含有你想读的主题,或者搜索网页,其中含有你想找的信息。搜索含有特定词语的文档,需要查找索引,该索引提供了特定词语和包含该词语的所有文档的映射。为了能够搜索,首先必须建立索引。Google和其他搜索引擎正是这么做的。它们的文档库是整个互联网,搜索的特定词语就是你在搜索框里敲入的任何东西。

BigTable和模仿出来的HBase,为这种文档库提供存储,BigTable提供行级访问,所以爬虫可以插入和更新单个文档。搜索索引可以基于BigTable通过MapReduce计算高效生成。如果结果是单个文档,可以直接从 BigTable 取出。支持各种访问模式是影响BigTable设计的关键因素。图1-1显示了互联网搜索应用中BigTable的关键角色。图1-1 使用BigTable 提供网络搜索结果,非常简单。爬虫收集网页,存储到BigTable里;MapReduce计算作业扫描全表生成搜索索引;从Bigtable中查询搜索结果,展示给用户

注意 为简洁起见,这里不做BigTable原作者判定。我们强烈推荐关于Google File System、MapReduce 和 BigTable 三大论文,如果你对这些技术感到好奇,这是必读读物。你不会失望的。

讲完典型HBase使用场景以后,我们来看看其他使用HBase的地方。愿意使用HBase的用户数量在过去几年里迅猛增长。部分原因在于HBase产品变得更加可靠且性能变得更好,更多原因在于越来越多的公司开始投入大量资源来支持和使用它。随着越来越多的商业服务供应商提供支持,用户越发自信地把HBase应用于关键应用系统。一个设计初衷是用来存储互联网持续更新网页副本的技术,用在互联网相关的其他方面也是很合适的。例如,HBase在社交网络公司内部和周围各种各样的需求中找到了用武之地。从存储个人之间的通信信息,到通信信息分析, HBase 成为了 Facebook、Twitter 和StumbleUpon等公司的关键基础设施。

在这个领域,HBase有3种主要使用场景,但不限于这3种。为了保持本节简单明了,本节我们只介绍主要的使用场景。

1.2.2 抓取增量数据

数据通常是细水长流的,累加到已有数据库以备将来使用,如分析、处理和服务。许多 HBase 使用场景属于这一类——使用 HBase 作为数据存储,抓取来自各种数据源的增量数据。例如,这种数据源可能是网页爬虫(我们讨论过的BigTable典型问题),可能是记录用户看了什么广告和看了多长时间的广告效果数据,也可能是记录各种参数的时间序列数据。我们讨论几个成功的使用场景,以及这些项目涉及的公司。

1.抓取监控指标:OpenTSDB

服务数百万用户的基于Web的产品的后台基础设施一般都有数百或数千台服务器。这些服务器承担了各种功能——服务流量,抓取日志,存储数据,处理数据,等等。为了保证产品正常运行,监控服务器和上面运行的软件的健康状态是至关重要的(从 OS到用户交互应用)。大规模监控整个环境需要能够采集和存储来自不同数据源各种监控指标的监控系统。每个公司都有自己的办法。一些公司使用商业工具来收集和展示监控指标,而另外一些公司采用开源框架。

StumbleUpon创建了一个开源框架,用来收集服务器的各种监控指标。按照时间收集监控指标一般被称为时间序列数据,也就是说,按照时间顺序收集和记录的数据。StumbleUpon 的开源框架叫做OpenTSDB,它是 Open Time Series Database(开放时间序列数据库)的缩写。这个框架使用HBase作为核心平台来存储和检索所收集的监控指标。创建这个框架的目的是为了拥有一个可扩展的监控数据收集系统,一方面能够存储和检索监控指标数据并保存很长时间,另一方面如果需要增加功能也可以添加各种新监控指标。StumbleUpon 使用 OpenTSDB 监控所有基础设施和软件,包括 HBase 集群自身。OpenTSDB作为搭建在HBase之上的一种示例应用,我们将在第7章详细介绍。

2.抓取用户交互数据:Facebook和StumbleUpon

抓取监控指标是一种使用方式。还有一种是抓取用户交互数据。如何跟踪数百万用户在网站上的活动?怎么知道哪一个网站功能最受

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载