本节书摘来异步社区《Hadoop海量数据处理:技术详解与项目实战》一书中的第1章,第1.2节,作者: 范东来 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.2 Hadoop和大数据
Hadoop海量数据处理:技术详解与项目实战
在人们对云计算这个词汇耳熟能详之后,大数据这个词汇又在最短时间内进入大众视野。云计算对于普通人来说就像云一样,一直没有机会能够真正感受到,而大数据则更加实际,是确确实实能够改变人们生活的事物。Hadoop从某个方面来说,与大数据结合得更加紧密,它就是为大数据而生的。
1.2.1 大数据的定义
“大数据”(big data),一个看似通俗直白、简单朴实的名词,却无疑成为了时下IT界最炙手可热的名词,在全球引领了新一轮数据技术革命的浪潮。通过2012年的蓄势待发,2013年被称为世界大数据元年,标志着世界正式步入了大数据时代。
现在来看看我们如何被数据包围着。在现实的生活中,一分钟或许微不足道,或许连200字也打不了,但是数据的产生却是一刻也不停歇的。来看看一分钟到底会有多少数据产生:YouTube用户上传48小时的新视频,电子邮件用户发送204 166 677条信息,Google收到超过2 000 000个搜索查询,Facebook用户分享684 478条内容,消费者在网购上花费272 070美元,Twitter用户发送超过100 000条微博,苹果公司收到大约47 000个应用下载请求,Facebook上的品牌和企业收到34 722个“赞”,Tumblr博客用户发布27 778个新帖子,Instagram用户分享36 000张新照片,Flicker用户添加3 125张新照片,Foursquare用户执行2 083次签到,571个新网站诞生,WordPress用户发布347篇新博文,移动互联网获得217个新用户。
数据还在增长着,没有慢下来的迹象,并且随着移动智能设备的普及,一些新兴的与位置有关的大数据也越来越呈迸发的趋势。
那么大数据究竟是什么?我们来看看权威机构对大数据给出的定义。国际顶级权威咨询机构麦肯锡说:“大数据指的是所涉及的数据集规模已经超过了传统数据库软件获取、存储、管理和分析的能力。这是一个被故意设计成主观性的定义,并且是一个关于多大的数据集才能被认为是大数据的可变定义,即并不定义大于一个特定数字的TB才叫大数据。因为随着技术的不断发展,符合大数据标准的数据集容量也会增长;并且定义随不同行业也有变化,这依赖于在一个特定行业通常使用何种软件和数据集有多大。因此,大数据在今天不同行业中的范围可以从几十TB到几PB。”
从上面的定义我们可以看出以下几点。
(1)多大的数据才算大数据,这并没有一个明确的界定,且不同行业有不同的标准。
(2)大数据不仅仅只是大,它还包含了数据集规模已经超过了传统数据库软件获取、存储、分析和管理能力这一层意思。
(3)大数据不一定永远是大数据,大数据的标准是可变的,在20年前1 GB的数据也可以叫大数据,可见,随着计算机软硬件技术的发展,符合大数据标准的数据集容量也会增长。
IBM说:“可以用三个特征相结合来定义大数据:数量(Volume)、种类(Variety)和速度(Velocity),或者就是简单的3V,即庞大容量、极快速度和种类丰富的数据。”1
(1)数据量(Volume):如今存储的数量正在急剧增长,毫无疑问我们正深陷在数据之中。我们存储所有事物——环境数据、财务数据、医疗数据、监控数据等。有关数据量的对话已从TB级别转向PB级别,并且不可避免地转向ZB级别。现在经常听到一些企业使用存储集群来保存数PB的数据。随着可供企业使用的数据量不断增长,可处理、理解和分析的数据比例却不断下降。
(2)数据的多样性(Variety):与大数据现象有关的数据量为尝试处理它的数据中心带来了新的挑战:它多样的种类,随着传感器、智能设备以及社交协作技术的激增,企业中的数据也变得更加复杂,因为它不仅包含传统的关系型数据,还包含来自网页、互联网日志文件(包括点击流数据),搜索索引、社交媒体论坛、电子邮件、文档、主动和被动的传感器数据等原始、半结构化和非结构化数据。简言之,种类表示所有数据类型。
(3)数据的速度(Velocity):就像我们收集和存储的数据量和种类发生了变化一样,生成和需要处理数据的速度也在变化。不要将速度的概念限定为与数据存储库相关的增长速率,应动态地将此定义应用到数据——数据流动的速度。有效处理大数据要求在数据变化的过程中对它的数量和种类执行分析,而不只是在它静止后执行分析。
最近,IBM在以上3V的基础上归纳总结了第4个V——Veracity(真实和准确)。“只有真实而准确的数据才能让对数据的管控和治理真正有意义。随着社交数据、企业内容、交易与应用数据等新数据源的兴起,传统数据源的局限性被打破,企业愈发需要有效的信息治理以确保其真实性及安全性。”
1.2.2 大数据的结构类型
接下来让我们来剖析下大数据突出的特征:多样性。图1-7显示了几种不同结构类型数据的增长趋势,从图中可以看到,未来数据增长的80%~90%将来自于不是结构化的数据类型(半结构化数据、准结构化数据或非结构化数据)。
结构化数据:包括预定义的数据类型、格式和结构的数据,例如,事务性数据和联机分析处理,如表1-1所示。
半结构化数据:具有可识别的模式并可以解析的文本数据文件,例如自描述和具有定义模式的XML数据文件,如代码清单1-1所示。
代码清单1-1 半结构化数据示例
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Do not modify this file directly. Instead, copy entries that you -->
<!-- wish to modify from this file into mapred-site.xml and change them -->
<!-- there. If mapred-site.xml does not already exist, create it. -->
<configuration>
<property>
<name>hadoop.job.history.location</name>
<value></value>
</property>
<property>
<name>hadoop.job.history.user.location</name>
<value></value>
</property>
</configuration>
准结构化数据:具有不规则数据格式的文本数据,使用工具可以使之格式化,例如包含不一致的数据值和格式的网站点击数据,如http://zh.wikipedia.org/wiki/Wikipedia:%E9%A6% 96%E9%A1%B5。
非结构化数据是没有固定结构的数据,通常保存为不同的类型文件,如文本文档、PDF文档、图像和视频。
虽然上面显示了4种不同的、互相分离的数据类型,但实际上,有时这些数据类型是可以被混合在一起的。例如,一个传统的关系型数据库管理系统保存着一个软件支持呼叫中心的通话日志。这里有典型的结构化数据,比如日期/时间戳、机器类型、问题类型、操作系统,这些都是在线支持人员通过图形用户界面上的下拉式菜单输入的。另外,还有非结构化数据或半结构化数据,比如自由形式的通话日志信息,这些可能来自包含问题的电子邮件,或者技术问题和解决方案的实际通话描述,最重要的信息通常是藏在这里的。另外一种可能是与结构化数据有关的实际通话的语音日志或者音频文字实录。即使是现在,大多数分析人员还无法分析这种通话日志历史数据库中的最普通和高度结构化的数据。因为挖掘文本信息是一项工作强度很大的工作,并且无法实现简单的自动化。人们通常最熟悉结构化数据的分析,然而,半结构化数据(XML)、准结构化数据(网站地址字符串)和非结构化数据带来了不同的挑战,需要使用不同的技术来分析。
1.2.3 大数据行业应用实例
先来看一则《纽约时报》报道的新闻。一位愤怒的父亲跑到美国Target超市投诉他近期收到超市寄给他大量婴儿用品广告,而他的女儿还只不过是个高中生,但一周以后这位愤怒的父亲再次光临并向超市道歉,因为Target发来的婴儿用品促销广告并不是误发,他的女儿的确怀孕了。《纽约时报》的这则故事让很多人第一次感受到了变革,这次变革和人类经历过的若干次变革最大的不同在于:它发生得悄无声息,但它确确实实改变了我们的生活。各行各业的先知先觉者已经从与数据共舞中初尝到了甜头,而越来越多的后来者和新进者都希望借助云计算和大数据这波浪潮去撬动原有市场格局或开辟新的商业领域。这也难怪麦肯锡称大数据将会是传统四大生产要素之后的第五大生产要素。
1.你能一直赢吗?
风靡全球的网络游戏《英雄联盟》拥有数以千万计的用户群体。每天深夜,当大多数玩家已经奋战一天,呼呼大睡的时候,数据服务器正紧张地劳作着。世界各地的运营商会把当日的数据发送到位于美洲的数据中心。随即一个巨大的数据分析引擎转动起来,需要执行上千个数据分析的任务。当日所有的比赛都会被分析,数据分析师会发现,某一个英雄单位太强或太弱,在接下来的2~3周内,会推出一个新补丁,及时调整所有的平衡性问题,并加入一个新单位。整个游戏被保持在一个快速更新,并且良好平衡的状态。正是靠着大数据的魔力,《英雄联盟》才能成为这个时代最受欢迎的游戏之一。
2.你喜欢这个吗?
产品推荐是Amazon的发明,它为Amazon等电子商务公司赢得了近1/3的新增商品交易。产品推荐的一个重要方面是基于客户交易行为分析的交叉销售。根据客户信息、客户交易历史、客户购买过程的行为轨迹等客户行为数据,以及同一商品其他访问或成交客户的客户行为数据,进行客户行为的相似性分析,为客户推荐产品,包括浏览这一产品的客户还浏览了哪些产品、购买这一产品的客户还购买了哪些产品、预测客户还喜欢哪些产品等。对于领先的B2C网站如京东、亚马逊等,这些数据是海量存在的。
产品推荐的另一个重要方面是基于客户社交行为分析的社区营销。通过分析客户在微博、微信、社区里的兴趣、关注、爱好和观点等数据,投其所好,为客户推荐他本人喜欢的、或者是他的圈子流行的、或推荐给他朋友的相关产品。
通过对客户行为数据的分析,产品推荐将更加精准、个性化。传统企业既可以依赖大型电子商务公司和社区网络的产品推荐系统提升销售量,也可以依靠企业内部的客户交易数据、公司自有的电子商务网站等直销渠道、企业社区等进行客户行为数据的采集和分析,实现企业直销渠道的产品推荐。
基于大数据应用的行业实例数不胜数,并且都为各个行业带来可观的效益,甚至可以改变游戏规则。对于未来,我们会发现在电影中出现的预测犯罪、智慧城市等情景都会由于大数据处理技术的进步一一实现,这完全不是遥远的梦想。
1.2.4 Hadoop和大数据
首先,简单概括一下云计算和大数据之间的关系。在很大程度上它们是相辅相成的,最大的不同在于:云计算是你在做的事情,而大数据是你所拥有的东西。以云计算为基础的信息存储、分享和挖掘手段为知识生产提供了工具,而通过对大数据分析、预测会使得决策更加精准,两者相得益彰。从另一个角度讲,云计算是一种IT理念、技术架构和标准,而云计算不可避免地会产生大量的数据。大数据技术与云计算的发展密切相关,大型的云计算应用不可或缺的就是数据中心的建设,所以大数据技术是云计算技术的延伸。
作为云计算PaaS层技术的代表,Hadoop可以以一种可靠、高效、可扩展的方式存储、管理“大数据”,如图1-8所示。Hadoop及其生态圈为管理、挖掘大数据提供了一整套相对成熟可靠的解决方案。从功能上说,Hadoop可以称作一个“大数据管理平台”。下面我们先对Hadoop的核心组件做一个简单的介绍,让读者对Hadoop有个初步的认识。
1.海量数据的摇篮——HDFS
作为Hadoop分布式文件系统,HDFS处于Hadoop生态圈的最下层,存储着所有的数据,支持着Hadoop的所有服务。它的理论基础源于Google的The Google File System这篇论文,它是GFS的开源实现。
HDFS的设计理念是以流式数据访问模式,存储超大文件,运行于廉价硬件集群之上。
2.处理海量数据的利器——MapReduce
MapReduce是一种编程模型,Hadoop根据Google的MapReduce论文将其实现,作为Hadoop的分布式计算模型,是Hadoop的核心。基于这个框架,分布式并行程序的编写变得异常简单。综合了HDFS的分布式存储和MapReduce的分布式计算,Hadoop在处理海量数据时,性能横向扩展变得非常容易。
3.列式存储的代表——HBase
HBase是对Google的BigTable的开源实现,但又和BigTable存在许多不同之处。HBase是一个基于HDFS的面向列的分布式数据库,擅长实时地随机读/写超大规模数据集。它也是Hadoop非常重要的组件,但由于它主要做实时数据处理,而本书主要关注的是离线数据分析,所以本书不会过多介绍HBase,有兴趣的读者可以参阅HBase: The Definitive Guide。
简言之,由于Hadoop可以基于分布式存储进行分布式计算,横向扩展能力非常优秀,所以Hadoop非常适合并且能够胜任存储、管理、挖掘“大数据”的任务。
1.2.5 其他大数据处理平台
1.Storm
Hadoop主要擅长进行批处理,而现实生活中,有很多数据是属于流式数据,即计算的输入并不是一个文件,而是源源不断的数据流,如网上实时交易所产生的数据。流式数据有以下特点。
(1)数据实时到达,需要实时处理。
(2)数据是流式源源不断的,大小可能无穷无尽。
(3)系统无法控制将要处理的新到达数据元素的顺序,无论这些数据元素是在同一个数据流中还是跨多个数据流。
(4)一旦数据流中的某个数据经过处理,要么被丢弃或者无状态。
Storm也是一个比较成熟的分布式的流计算平台,擅长做流处理(stream processing)或者复杂事件处理(complex event processing,CEP),Storm有以下几个关键特性。
(1)适用场景广泛。
(2)良好的伸缩性。
(3)保证数据无丢失。
(4)异常健壮。
(5)良好的容错性。
(6)支持多语言编程。
值得一提的是,Storm采用的计算模型并不是MapReduce,并且MapReduce也已经被证明不适合做流处理。
2.Apache Spark
Apache Spark是一种与Hadoop相似的开源集群计算环境,在性能和迭代计算上很有优势,现在是Apache孵化的顶级项目。Spark由加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发,可用来构建大型的、低延迟的数据分析应用程序。Spark启用了内存分布式数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark是由Scala语言实现的,它将Scala作为其应用程序框架,而Scala的语言特点也铸就了大部分Spark的成功。与Hadoop不同,Spark和Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地操作分布式数据集。
Spark最大的优点在于对于一定数据量的查询可以达到毫秒级,在某些迭代计算的场景(如机器学习算法)中可以领先Hadoop数十倍到一百倍,并且它支持DAG(有向无环图)计算。
3.Hadoop 2.0
本书Hadoop如没做特别说明,都指第一代Hadoop,Hadoop 2.0从架构上来说与Hadoop完全不同,结构更加合理,并解决了第一代Hadoop中主节点(master node)的单点性能故障和性能瓶颈的问题。但与第一代Hadoop最大的不同在于,它引入了一个资源管理平台的组件——YARN,通过这个组件,我们可以共用底层存储(HDFS),计算框架采取可插拔式的配置,支持Storm、Spark等其他开源计算框架,也就是说,同样的集群既可以做批处理也可以做流处理甚至是MPI(大规模并行计算),如图1-9所示。