1.1 背景

随着计算机科学技术的发展,电子设备越来越普及,价格也越来越便宜,各种电子设备(如手机、智能家居、网络摄像头、智能汽车等)产生的数据量正在急剧增长,全球数据量的迅猛增长为大数据行业的发展提供了基础保证。市场调研机构预计未来全球每年数据量的平均增长率将达到40%以上,而且数据增长速度越来越快,对一些大公司来说,每天甚至每小时都可以产生TB、PB级的数据。到2030年,全球数据总量预计将超过1YB。

这些数据可能很难存储或者分析,但是很多时候这些数据很有可能成为企业的第一生产力。例如,阿里巴巴的用户行为数据对推荐或者在线广告至关重要,如果你在淘宝搜索了一款手机,稍后你浏览新闻的时候,新闻客户端就会给你推荐一些手机的广告,这样有针对性的广告也就是常说的“千人千面”,极大地提高了广告的转化率。

在分布式数据库系统发展之前,因为缺乏有效或者低成本的方式来存储大量的数据,很多企业会忽略某些数据源,这样导致当真正需要使用某些数据的时候已经找不到可以用来筛选的源数据了,或者即使使用低成本的方式(如廉价磁带或者磁盘)将数据存储下来,也会因为缺乏有效的数据筛选等处理手段而导致数据无法发挥其应有的价值。

传统系统可能很难存储、分析现在各种类型的非结构化数据(如办公文档、文本、音频、图片、用户行为等字段长度可变,每个字段又可以由可重复或者不可重复的子字段组成)与半结构化数据,这些数据存储到关系数据库用于分析会花费更多的时间和金钱。例如,如果使用MySQL存储淘宝的用户行为数据,每天产生的数据量有上百亿甚至更多字节。以MySQL每个表存储4000万行数据计算,这样每天产生的数据需要100个以上MySQL分表,可以想象这对机器、运维以及开发来说是多高的成本。

谷歌公司内部使用的GFS和MapReduce技术正好解决了大量数据存储和分析的问题,而开源社区基于谷歌描述的基于商业硬件集群构建分布式、可扩展的存储和处理系统思想,实现了开源项目Hadoop的两个模块,即HDFS和MapReduce。

HDFS非常适合存储任意的非结构化或者半结构化的数据,它的分布式架构以及简单的扩展方式,使其可以对数据存储提供“无限”的支持,同时因为其可以部署在普通的商业机器集群上,使得存储成本更为低廉。而MapReduce则可以帮助用户在需要的时候利用集群中每台机器的能力“分而治之”,恰当地分析这些数据,提供了处理海量数据的核心能力。

GFS和MapReduce虽然提供了大量数据的存储和分析处理能力,但是对于实时数据的随机存取却无能为力,而且GFS适合存储少量的大文件而不适合存储大量的小文件,因为大量的小文件最终会导致元数据膨胀而可能无法放入主节点的内存。经过多年耕耘,Google终于在2006年发表了一篇名为“Bigtable: A Distributed Storage System for Structured Data”的论文,这篇论文就是HBase的起源。HBase实现了BigTable的架构,如压缩算法、内存操作和布隆过滤器等。目前HBase在各大公司中基本都有使用,如Facebook的消息平台、小米的云服务、阿里巴巴的TLog等许多服务组件。