HBase的使用场景及案例

HBase 解决不了所有的问题,但是针对某些特点的数据可以使用 HBase 高效地解决,如以下的应用场景。
  • 数据模式是动态的或者可变的,且支持半结构化和非结构化的数据。
  • 数据库中的很多列都包含了很多空字段,在 HBase 中的空字段不会像在关系型数据库中占用空间。
  • 需要很高的吞吐量,瞬间写入量很大。
  • 数据有很多版本需要维护,HBase 利用时间戳来区分不同版本的数据。
  • 具有高可扩展性,能动态地扩展整个存储系统。

在实际应用中,有很多公司使用 HBase,如 Facebook 公司的 Social Inbox 系统,使用 HBase 作为消息服务的基础存储设施,每月可处理几千亿条的消息;Yahoo 公司使用 HBase 存储检查近似重复的指纹信息的文档,它的集群当中分别运行着 Hadoop 和 HBase,表中存了上百万行数据;Adobe 公司使用 Hadoop+HBase 的生产集群,将数据直接持续地存储在 HBase 中,并将 HBase 作为数据源进行 MapReduce 的作业处理;Apache 公司使用 HBase 来维护 Wiki 的相关信息。

下面通过几个实际案例来介绍 HBase 的应用场景。

搜索引擎应用

前面讲到 HBase 是 Google Bigtable 的开源实现,而 Google 公司开发 Bigtable 是为了它的搜索引擎应用。Google 和其他搜索引擎是基于建立索引来完成快速搜索服务的。该索引提供了特定词语,包含该词语的所有文档的映射。

搜索引擎的文档库是整个互联网,搜索的特定词语就是用户搜索框里输入的任何信息,Bigtable 和开源的 HBase 为这种文档库提供存储及行级的访问。下面简单地分析 HBase 应用于网络搜索的逻辑过程。

首先,网络爬虫持续不断地从网络上抓取新页面,并将页面内容存储到 HBase 中,爬虫可以插入和更新 HBase 里的内容;然后,用户可以利用 MapReduce 在整张表上计算并生成索引,为网络搜索做准备;接着,用户发起搜索请求;最后,搜索引擎查询建立好的索引列表, 获取文档索引后,再从 HBase 中获取所需的文档内容,最后将搜索结果提交给用户。

捕获增量数据

数据通常是动态增加的,随着时间的推移,数据量会越来越大,例如,网站的日志信息、邮箱的邮件信息等。通常通过采集工具捕获来自各种数据源的增量数据,再使用 HBase 进行存储。

例如,这种采集工具可能是网页爬虫,采集的数据源可能是记录用户点击的广告信息、驻留的时间长度以及对应的广告效果数据,也可能是记录服务器运行的各种参数数据。

下面介绍一些有关该使用场景的成功案例。

存储监控参数

大型的、基于 Web 的产品后台一般都拥有成百上千台服务器,这些服务器不仅为前端的大量用户提供服务,同时还需要提供日志采集、数据存储、数据处理等各种功能。

为了保证产品的正常运行,监控服务器和服务器上运行的软件的健康状态是至关重要的。大规模监控整个环境需要能够采集和存储来自不同数据源的各种参数的监控系统。OpenTSDB 正是这种监控系统,它可以从大规模集群中获取相应的参数并进行存储、索引和服务。

OpenTSDB(Open Time Series Database)是一个开源框架,其含义是开放时间序列数据库。这个框架使用 HBase 作为核心平台来存储和检索所收集的参数,可以灵活地支持增加参数,也可以支持采集上万台机器和上亿个数据点,具有高可扩展性。

OpenTSDB 作为数据收集和监控系统,一方面能够存储和检索参数数据并保存很长时间,另一方面如果需要增加功能也可以添加各种新参数。最终 OpenSTDB 对 HBase 中存储的数据进行分析,并以图形化方式展示集群中的网络设备、操作系统及应用程序的状态。

存储用户交互数据

对基于 Web 的应用,还有一种很重要的数据,即用户交互数据。这一类数据包含了用户的访问网站的行为习惯。通过分析用户交互数据,就可以获取用户在网站上的活动信息。例如,用户看了什么?某个按钮被用户点击了多少次?用户最近搜索了什么?从这些信息就可以了解用户的需求,从而针对不同的用户提供不同的应用。

例如,Facebook 里的 Like 按钮,每次用户 Like —个特定主题,计数器增加一次。FaceBook 使用 HBase 的计数器来计量人们 Like 特定网页的次数。内容原创人或网页主人可以得到近乎实时的、用户 Like 他们网页的数据信息。他们可以据此更敏捷地判断应该提供什么内容。

Facebook 为此创建了一个名为 Facebook Insight 的系统,该系统需要一个可扩展的存储系统。公司考虑了很多种可能,包括关系型数据库、内存数据库和 Cassandra 数据库,最后决定使用 HBase。基于 HBase,Facebook 可以很方便地横向扩展服务规模,提供给数百万用户,也可以继续使用他们已有的运行大规模 HBase 机群的经验。该系统每天处理数百亿条事件,记录数百个参数。

存储遥测数据

软件在运行时经常会岀现异常的情况,这时大部分软件都会生成一个软件崩溃报告,这类软件运行报告会返回软件开发者,用来评测软件质量和规划软件开发路线图。

例如,FireFox 网络浏览器是 Mozilla 基金会旗下的产品,支持各种操作系统,全世界数百万台计算机上都有它的身影。 当 FireFox 浏览器崩溃时,会以 Bug 报告的形式返回一个软件崩溃报告给 Mozilla。

Mozilla 使用一个叫作 Socorro 的系统收集这些报告,用来指导研发部门研制更稳定的产品。Socorro 系统的数据存储和分析建构在 HBase 上,采用 HBase 使得基本分析可以用到比以前多得多的数据。用这些分析数据指导 Mozilla 的开发人员,使其更有针对性地研制出 Bug 更少的版本。

趋势科技(TrendMicro)为企业客户提供互联网安全解决方案,来应对网络上千变万化的安全威胁。安全的重要环节是感知,日志收集和分析对于提供这种感知能力是至关重要的。

趋势科技使用 HBase 来收集和分析日志活动,每天可收集数十亿条记录。HBase 中灵活的模式支持可变的数据结构,当分析流程重新调整时,可以增加新属性。

广告效果和点击流

在线广告是互联网产品的一项主要收入来源。互联网企业提供免费服务给用户,在用户使用服务时投放广告给目标用户。这种精准投放需要针对用户交互数据做详细的捕获和分析,以理解用户的特征;再基于这种特征,选择并投放广告。企业可使用精细的用户交互数据建立更优的模型,进而获得更好的广告投放效果和更多的收入。

但这类数据有两个特点:它以连续流的形式出现,它很容易按用户划分。在理想情况下,这种数据一旦产生就能够马上使用。

HBase 非常适合收集这种用户交互数据,并已经成功地应用在相关领域。它可以增量捕获第 一手点击流和用户交互数据,然后用不同处理方式来处理数据,电商和广告监控行业都已经非常熟练地使用了类似的技术。

例如,淘宝的实时个性化推荐服务,中间推荐结果存储在 HBase 中,广告相关的用户建模数据也存储在 HBase 中,用户模型多种多样,可以用于多种不同场景,例如,针对特定用户投放什么广告,用户在电商门户网站上购物时是否实时报价等。

HBase 已成熟地应用于国内外的很多大公司,总之,HBase 适合用来存储各种类型的大规模的数据,可为用户提供实时的在线查询,同时也支持离线的应用。但对于需要 JOIN 和其他一些关系型数据特性要求时,HBase 就不适用了,因此,还是要根据应用场景合理地使用 HBase,发挥 HBase 的优势。