这篇文章主要介绍了总结Hadoop集群技术近年来对大数据处理的推动,随着数据量的日益庞大,越来越多的人开始对Hadoop的性能产生怀疑,那么忧郁是否要在网站中采用Hadoop的朋友可以阅读一下文中的经验总结,需要的朋友可以参考下
1. 引子
什么是大数据?麦肯锡公司的报告《大数据:创新、竞争和生产力的下一个前沿领域》中给出的大数据定义是:大数据指的是规模超过现有数据库工具获取、存储、管理和分析能力的数据集,并同时强调并不是超过某个特定数量级的数据集才是大数据。
国际数据公司(IDC)用四个维度的特征来定义大数据,即数据集的规模(Volume)、数据流动的速度(Velocity)、数据类型的多少(Variety)和数据价值的大小(Value)。
亚马逊的大数据科学家John Rauser的定义比较直接:“超过单台计算机处理能力的数据量则为大数据”。
最后我们来看看维基百科上的大数据定义:“Big data is the term for a collection of data sets so large and complex that it becomes difficult to process using on-hand database management tools or traditional data processing applications. ”翻译成中文的意思是:大数据指的是数据规模庞大和复杂到难以通过现有的数据库管理工具或者传统的数据处理应用程序进行处理的数据集合。
上述大数据的概念中无一例外都突出了“大”字。从表面上看,数据规模的增长的确为处理数据带来了很大的问题。具体来说,在同样时间内获取与以前相同价值的数据变得不可为了。换言之,本质问题是数据的价值密度变低了,数据交换速率变慢了,所以催生了很多新型数据处理技术和工具,如Google的GFS和MapReduce,Apache Hadoop生态系统,美国伯克利大学AMPLab的Spark等;出现了对时间敏感程度不同的计算模式,如批式计算模式、交互式计算模式、流计算模式、实时计算模式等。计算模式的差异只是决定获取价值的技术不同,取决于上层业务需求的不同。实际上,所谓大数据问题的本质应是数据的资产化和服务化,而挖掘数据的内在价值是研究大数据的最终目标。
2. 大数据技术源起Google
Google在搜索引擎上所获得的巨大成功,很大程度上是由于采用了先进的大数据管理和处理技术,是针对搜索引擎所面临的日益膨胀的海量数据存储问题以及在此之上的海量数据处理问题而设计的。
Google提出了一整套基于分布式并行集群方式的基础架构技术,利用软件的能力来处理集群中经常发生的节点失效问题。Google使用的大数据平台主要包括五个相互独立又紧密结合在一起的系统:分布式资源管理系统Borg,Google文件系统(GFS),针对Google应用程序的特点提出的MapReduce 编程模式,分布式的锁机制Chubby以及大规模分布式数据库BigTable。
Borg是这五个系统中最为神秘的一个,直到2015年Google才在EuroSys 2015上发表了题为“Large-scale cluster management at Google with Borg”的论文。称Google内部不仅像计算型的应用,比如MapReduce、Pregel等运行在Borg上,存储类的应用,比如GFS,BigTable和Megastore等也运行在上面,真正做到了批处理作业和长周期服务的混合部署和资源动态调度。得益于此项技术,可以使平均资源利用率达到30%~75%以上,大大高于业界平均水平的6%~12%。
GFS是一个大型的分布式文件系统,它为Google云计算提供海量存储,并且与Chubby、MapReduce和BigTable等技术结合得十分紧密,处于系统的底层。它的设计受到Google特殊的应用负载和技术环境的影响。相对于传统的分布式文件系统,为了达到成本、可靠性和性能的最佳平衡,GFS从多个方面进行了简化。
MapReduce是处理海量数据的并行编程模式,用于大规模数据集的并行运算。MapReduce通过“Map(映射)”和“Reduce(化简)”这样两个简单的概念来参加运算。用户只需要提供自己的Map 函数以及Reduce 函数就可以在集群上进行大规模的分布式数据处理。这一编程环境能够使程序设计人员编写大规模的并行应用程序时不用考虑集群的可靠性、可扩展性等问题。应用程序编写人员只需要将精力放在应用程序本身,关于集群的处理问题则交由平台来完成。与传统的分布式程序设计相比,MapReduce封装了并行处理、容错处理、本地化计算、负载均衡等细节,具有简单而强大的接口。正是由于MapReduce具有函数式编程语言和矢量编程语言的共性,使得这种编程模式特别适合于非结构化和结构化的海量数据的搜索、挖掘、分析等应用。
Chubby是提供粗粒度锁服务的一个文件系统,它基于松耦合分布式文件系统,解决了分布式系统的一致性问题。这种锁只是一个建议性的锁而不是强制性的锁。通过使用Chubby的锁服务,用户可以确保数据操作过程中的一致性。GFS使用Chubby来选取一个GFS主服务器,BigTable使用Chubby指定一个主服务器并发现、控制与其相关的子表服务器。
大规模分布式数据库BigTable是基于GFS和Chubby开发的分布式存储系统。很多应用程序对于数据的组织是非常有规则的。一般来说,数据库对于处理格式化的数据还是非常方便的。但是由于关系数据库要求很强的一致性,很难将其扩展到很大的规模。为了处理Google内部大量的格式化以及半格式化数据,Google构建了弱一致性要求的大规模数据库系统BigTable。BigTablede在很多方面和数据库类似,但它并不是真正意义上的数据库。Google包括Web索引、卫星图像数据等在内的很多海量结构化和半结构化数据都是存储在BigTable中的。
3. Hadoop开启了大数据时代的大门
Google的技术虽好但不开源。如果没有Doug Cutting和他的Hadoop开源软件,我们就看不到如今大数据技术和应用的飞速发展。Doug Cutting主导的Apache Nutch项目是Hadoop软件的源头,该项目始于2002年,是Apache Lucene 的子项目之一。当时的系统架构尚无法扩展到存储并处理拥有数十亿网页的网络化数据。Google在2003年于SOSP上公开了描述其分布式文件系统的论文“The Google File System”,为Nutch提供了及时的帮助。2004年,Nutch的分布式文件系统(NDFS)开始开发。同年,Google在OSDI上发表了题为“MapReduce: Simplified Data Processing on Large Clusters”的论文,受到启发的Doug Cutting等人开始实现MapReduce计算框架并与NDFS(Nutch Distributed File System)结合起来,共同支持Nutch的主要算法。至2006年,它逐渐成为一套完整而独立的软件,已经到Yahoo!工作的Doug Cutting将这套大数据处理软件命名为Hadoop。2008年初,Hadoop成为Apache的顶级项目,除Yahoo!之外在众多互联网企业中得到应用。
早期的Hadoop,包括Hadoop v1以及更早之前的版本,主要由两个核心组件构成:HDFS和MapReduce,其中HDFS是Google GFS的开源版本,MapReduce计算框架实现了由Google工程师提出的MapReduce编程模型。还有一些围绕在Hadoop周围的开源项目,为完善大数据处理的全生命周期提供了必要的配套和补充。这些软件常用的有ZooKeeper、Hive、Pig、HBase、Storm、Kafka、Flume、Sqoop、Oozie、Mahout等。2012年5月,Hadoop v2的alpha版本发布,其中最重要的变化是在Hadoop核心组件中增加了YARN(Yet Another Resource Negotiator)。YARN的出现是为了把计算框架与资源管理彻底分离开,解决Hadoop v1由此带来的扩展性差、单点故障和不能同时支持多种计算框架的问题。YARN对标的恰好就是Google的Borg系统。至此,Hadoop方才能够与Google的大数据平台比肩。
一个好的、有生命力的开源生态系统要有一个核心,这个核心要是差异化和非平凡的,还要有广泛的应用和活跃的社区。Hadoop恰好具备这三个特征,以Hadoop为核心的大数据开源生态系统逐渐形成,Hadoop也成为自Linux以来最成功的开源软件,没有之一。受人民大学信息学院院长杜小勇老师的委托,我在CNCC 2015上组织了一个名为“大数据开源生态系统”的论坛。论坛邀请了来自互联网企业、硬件厂商、系统集成商以及学术界的同行分享在大数据开源方面的工作和体会。在最后的Panel环节,讨论了为什么要做开源和怎么做开源这两个问题。回答是比较分散的,有开源是唯一选择的,有拉通产业链的,有认为开源是新业态新商业模式的,有认为开源促进技术进步的。总之,在产业链不同的环节上的机构做开源的动机和目标自然是不同的,但只有这样,产业链中不同角色都能够在生态系统中找到自己的位置,这样的生态系统才是健壮的有生命力的,不是吗?
4. Hadoop的发展历史和应用之路
大数据领域第一个吃螃蟹的是互联网行业。这是因为大数据概念和技术都来源于互联网企业的老大哥Google的原因。以Hadoop投入实际应用来看:
从2006年到2008年是Hadoop的诞生阶段。只有国外少数几个互联网巨头在尝试,国内互联网行业在学习这项新技术。2006年,Yahoo!构建100节点规模的Hadoop机群用于Webmap业务。2007年,Yahoo!构建1000节点规模的Hadoop机群。2008年,Yahoo!的Hadoop机群扩展到2000节点规模,Facebook贡献Hive项目到开源社区。
从2008年到2010年是Hadoop的少年阶段。在互联网行业已经开始投入实际应用,应用集中在网页存储检索,日志处理和用户行为分析等方面。2009年,Yahoo!使用4000节点的机群运行Hadoop,支持广告系统和Web搜索的研究;Facebook使用600节点的机群运行 Hadoop,存储内部日志数据,支持其上的数据分析和机器学习;百度用Hadoop处理每周200TB的数据,进行搜索日志分析和网页数据挖掘工作。2010年,Facebook的Hadoop机群扩展到1000节点;百度用Hadoop每天可处理1PB的数据;中国移动通信研究院基于Hadoop开发了“大云”(BigCloud)系统,不但用于相关数据分析,还对外提供服务;淘宝的Hadoop系统达到千台规模,用于存储并处理电子商务的交易相关数据。
从2010年到2015年是Hadoop的青年阶段。在互联网行业无不将Hadoop作为大数据计算的标准配置,且应用形式趋于多样化;企业计算领域开始实践基于Hadoop的大数据应用;在追求大数据处理能力的同时,也开始思考系统适配性和效率问题。互联网行业出现了大量数据分析类应用,比如支付宝的交易数据离线分析系统等;用Hadoop与生态系统中的其他软件一起构成更为复杂的应用系统,比如腾讯的广点通精准广告投放系统,电信运营商的基于用户画像的精准营销系统等。除互联网行业外,出现了网络通讯大数据、金融大数据、交通旅游大数据、工业制造大数据、医疗健康大数据、社会治理大数据、教育大数据等,大数据理念和技术已经融入各行各业。Hadoop源于互联网行业,在应用于企业计算时,需要进行适配,原因在于互联网应用和企业计算应用在需求、服务、研发和运维体系方面有本质的不同。互联网应用业务逻辑简单、服务于海量用户、非固定使用人群、系统的用户体验至上、持续交付、能够快速响应的专业运维;而企业计算应用业务逻辑复杂、有限数量用户、固定使用人群、系统更强调稳定可靠、版本交付、层级式的技术支持。一时间市面上出现了很多面向企业用户的Hadoop发行版,以易部署、好配置,以及使用和管理方便为切入点,吸引着企业用户的眼球。
5.大数据技术的发展趋势
系统架构的专业化。从当今IT技术的发展角度看,提出系统结构上的解决方案是“应用驱动的大数据架构与技术”。也就是说根据具体类型应用的需求,在系统架构和关键技术上进行创新。为了降低成本并获得更好的能效,大数据应用系统越来越趋向扁平化、专用化的系统架构和数据处理技术,逐渐摆脱了传统的通用技术体系。比如并行数据库更鲜明的分化为面向事务处理的OLTP类数据库和面向分析的OLAP类数据库等。传统的应用服务器、数据库服务器和存储服务器这样的典型三层架构受到极大的冲击。应用开发人员更深入的理解计算机系统结构,“程序” = “算法” + “数据结构”将逐渐演变成“程序” = “算法” + “数据结构” + “系统结构”。
大数据生态系统范围扩大。克隆了Google的GFS和MapReduce的Apache Hadoop自2008年以来逐渐为互联网企业接纳,并成为大数据处理领域的事实标准。但2013年出现的Spark作为一匹黑马可以说终结了这一神话,大数据技术不再一家独大。由于应用不同导致Hadoop一套软件系统不可能满足所有需求,在全面兼容Hadoop的基础上,Spark通过更多的利用内存处理大幅提高系统性能。此外,Scribe、Flume、Kafka、Storm、Drill、Impala、TEZ/Stinger、Presto、Spark/Spark SQL等的出现并不是取代Hadoop,而是扩大了大数据技术生态环境,促使生态环境向良性和完整发展。今后在非易失存储层次、网络通信层次、易失存储层次和计算框架层次还会出现更多、更好和更专用化的软件系统。
系统整体效能更为用户重视。在全球互联网企业的努力下,Hadoop已经可以处理百PB级的数据,在不考虑时间维度的前提下,价值密度低的数据可以处理了。在解决了传统关系型数据库技术无法处理如此量级的数据之后,业界正在向系统能效要价值。能效问题一方面体现在系统性能上。互联网服务强调用户体验,原本做不到实时的应用在向实时化靠拢,比如前端系统及业务日志从产生到收集入库的延迟从1到2天时间进化到10秒以内。传统企业无法忍受关系数据库动辄几十分钟的查询分析性能,纷纷求助于性价比更好的技术和产品。这些需求使大数据交互式查询分析、流式计算、内存计算成为业界研发和应用的新方向。能效问题的另一方面体现在系统功耗和成本上。中科院计算所陈云霁研究员领导研究的专用神经网络处理器技术,可大幅加速机器学习负载,与通用芯片和GPU相比,计算速度提高几十倍,功耗只有十分之一,整体能效提高450倍。百度云存储万台定制ARM服务器可节电约25%,存储密度提升70%,每瓦特计算能力提升34倍(用GPU取代CPU计算),每GB存储成本降低50%。
个性化服务的需求愈发强烈。个性化对应于互联网服务的长尾部分,这部分需求在传统的系统设计中因为复杂性原因是被舍弃的,但正是这部分体现出个性化服务的需求。个性化服务,即系统能够提供满足不同个体需求的差异化服务,比如个性化推荐,广告精准投放等。就拿个性化推荐技术来说,目前已经开始从简单的商品推荐走向复杂的内容推荐。根据用户的特性与偏好,推荐内容的特征,以及当时的上下文数据(客户端设备类型、用户所处时空数据等),向特定用户提供个性化的内容推荐服务,内容包括商品(包括电商和零售)、广告、新闻和资讯等。在移动设备和移动互联网飞速发展的时代,个性化推荐将成为用户获取信息最直接的渠道之一。
价值挖掘的理论和技术亟待发展。对数据进行浅层分析的理论和技术,主要体现在分布式系统和关系型数据库理论的结合与再创新,目前已经有较大幅度进展。但是,从数据中抽取隐含的信息或者知识,也就是价值挖掘,这方面的理论和技术还比较缺乏。一是缺乏成熟的数据挖掘建模方法和工具,经验对于挖掘出有价值信息的影响甚大,原始数据与隐含信息之间存在技术缺失,所以“啤酒+尿布”的案例并不是天天都能产生的。二是机器学习和深度学习技术面临应用问题。与大数据相结合,已经在诸如语音识别、图像识别、广告推荐和风险控制等场景中得以初步应用,但这方面的技术和软件工具成熟度不高,还有很大提升空间。此外,机器学习和深度学习的应用场景还不够广泛,这既是机遇也是挑战。
6. 结语
Hadoop开源软件自2006年起至今已经走过十个年头,这对于任何软件来说生命周期不可谓不长。但是,Hadoop也在经历来自其他开源黑马的冲击。Spark在早期发展阶段通过全面兼容Hadoop而借力于后者成熟的生态系统。时至今日,Spark正在挑战Hadoop的权威,因为Spark已经将发展目标定位在取代Hadoop。Hadoop老矣,尚能饭否? Hadoop的近100位Committer在积极的为Hadoop谋划未来,让我们拭目以待吧!我们已经步入数据化全覆盖的时代,社会生活、各行各业都在因数据而发生巨变。近年来,大数据已成为国家层面的基础性战略资源,正日益对全球生产、流通、分配、消费活动以及经济运行机制、社会生活方式和国家治理能力产生重要影响。推动大数据发展已成为国际社会的行动共识。