可以说,hadoop的出现是计算技术发展进程中一个重要的里程碑,它使实用的大规模分布式计算和存储成为可能。因此,有专家评论,Hadoop是到目前为止最为成功的通用分布式处理框架,也是这些年来影响最为深远的系统性开源项目之一。
IDC发布的Hadoop软件生态系统预测报告显示,Hadoop市场正在以60%的年复合增长率高速扩张。Gartner也估计,2014年,Hadoop生态系统市场规模在7700万美元左右,2016年,该市场规模将快速增长至8.13亿美元。
另外,Allied Market Research调查报告显示,2013年至2020年,全球Hadoop市场份额将以58.2%的年复合增长率,从20亿美元增长至50.2亿美元,增长幅度超24倍。其中,大数据分析需求是整个Hadoop市场的主要驱动力,也吸引了众多IT淘金者参与。
Hadoop市场的火爆也体现在人才市场上。2013年,美国某求职网站列出的2013年高薪技术职位排行中,大数据相关技术职位囊括前三甲,分别为Hadoop、Big Data和NoSQL。
Gartner的一项研究表明,到2015年,65%的分析应用程序和先进分析工具都将基于Hadoop平台。在未来一段时间内,Hadoop将变得更加流行。Hadoop的知名度是足够高了,但是Hadoop在项目中到底表现怎么样?有Hadoop项目经验的工程师最有发言权。
上篇:优势与不足
事实上,很多初次接触Hadoop的程序员都会把Hadoop当做化解大数据疑难杂症的灵丹妙药,希望能够迅速地做到药到病除。但是,当下载了 Hadoop社区发行版之后,很多工程师才发现成功“驯服”Hadoop的过程是“路漫漫其修远兮”,随之就会产生巨大的心理落差。
Hadoop难“驯服”
曾经担任雅虎首席云计算架构师的Todd Papaioannou曾这样评价Hadoop:它属于底层基础软件,而今天大多数IT人员都不熟悉底层基础软件,因此实施难度大,极为难用。如果不解决技术复杂性问题,Hadoop将被自己终结。
当年,Todd Papaioannou带着团队要完成一项艰巨的任务——在拥有40万个节点的雅虎私有云中配置4.5万台Hadoop服务器,为5000位雅虎开发人员创建一个稳定的开发平台。
雅虎负责建设Hadoop平台的团队个个手忙脚乱,就像一群中学生在车库中做手工,从Hadoop代码库中翻找可供粘贴整合的代码。当基础架构总算搭好的时候,开发者又花了4~5个月才开始发布应用,这也严重影响了雅虎的产品创新进度。
但是,并非所有人都那么惧怕Hadoop,一些技术实力强的互联网公司在驯服了Hadoop之后,开始大胆地尝试一些源于Hadoop尚未成熟但是更高效的开源新技术,如Spark和Yarn。
8月12日,淘宝技术部数据挖掘与计算团队负责人明风在其个人新浪微博上透露,Spark on Yarn已经在淘宝上线一周年了。明风表示,经过团队成员一个多月的努力,终于成功地将Spark on Yarn接入阿里云梯的Yarn生产集群,并每日调度生产作业。目前,这个基于阿里云梯的Yarn集群规模是:100台机器,8核CPU、单个作业最大可用内存400GB。
“死磕”Hadoop
曾经担任原北京暴风科技有限公司暴风影音平台研发经理的童小军,在2010年到2012年两年多的时间里,一直在与Hadoop“死磕”。
回顾那段历史,童小军不无骄傲地说:“当年,暴风影音的业务部门离不开我们的数据部门,数据部门一瘫痪,业务部门就无法决策,第二天的工作也就停止了。”
当时,那头被驯服的“小象”Hadoop成为暴风影音搜索和数据平台的核心角色。该平台的顺利运行给当时的暴风影音带来两个最直接的变化:
第一是将暴风影音每天20TB日志数据的分析时间从7小时缩减为不足1小时。
第二是将整个系统的统计数据作为业务部门第二天开展工作的依据。
例如,哪个服务崩溃了、什么地方的服务出现异常、什么服务的用户量下降了等。该平台还给暴风影音带来了意外收获:随着数据处理速度的提升,原来需要外包给其他公司分析的广告数据,可以由暴风影音的数据部门来承担。
童小军直言:“虽然现在的Hadoop看起来没有那么难掌控,但是当初我们从零起步的时候着实为Hadoop伤透了脑筋,走了很多弯路。”
童小军表示,Hadoop很多默认配置都不能用,需要根据项目自己配置,而且每台机器的配置都不一样,对于初学者来说难度很大。另外,Hadoop 平台上的很多应用是用C++或VC开发的,运行前还需要转码。另外,一开始的Hadoop项目,并没有得到公司领导的大力支持,公司只给数据部门配备了3 台低端服务器。
无论童小军怎么努力,该平台总是运营一段时间就崩溃。为了能够把Hadoop系统运行起来,童小军曾经给公司高层提议购买100台服务器,结果被领导痛批一通。万般无奈的情况下,童小军冒险将该平台系统搭在了公司正在使用的几十台服务器上,结果Hadoop系统一次就运行成功了。
童小军面临的更大困难是把暴风影音业务系统全部迁移到Hadoop平台上来。从原来的平台迁移到Hadoop平台上,相当于把全部的程序都重写一遍,这个工作从2010年持续到2012年。工作量大是一方面,业务系统千差万别而且复杂度高更让童小军头疼,没有一定的耐心是不可能完成迁移的。不过,暴风影音的业务系统迁移到Hadoop平台之后,至少在5年内都可以满足数据增长的需求。
在Hadoop刚诞生的那几年里,人们几乎将Hadoop与大数据画上了等号。似乎,企业只要下载一套Hadoop发行版马上就能拥有大数据分析处理的能力了。但是,经过这几年的实践,程序员们逐渐开始明白如何正确看待Hadoop,而Hadoop表现出来的优势和不足之处也更加鲜明。
实时分析能力不尽如人意
说到Hadoop的不足之处,星环信息科技(上海)有限公司CTO孙元浩谈到,早期在把Hadoop应用到数据仓库时碰到过很多困难。在GB级到 TB级的数据量上,MapReduce的性能会比关系数据库或者MPP(massively parallel processing,大规模并行处理机)数据库慢10倍左右,再加上HiveQL支持的语法只是标准SQL语法的30%,导致当初很多建设在 Hadoop之上的数据仓库项目失败了。同时,孙元浩表示,由于企业复杂的工作流通常需要多个阶段的MapReduce任务,而MapReduce的输入输出必须经过低速磁盘,导致运行过程复杂,迭代任务时效率非常低,因此不适合对延时要求高的交互式分析或者需要复杂迭代的数据分析任务。
Spark亚太研究院院长王家林则具体指出,MapReduce进行大数据处理是基于磁盘的,每次计算都要经历从磁盘读取数据、计算数据、保存数据的三阶段,这就使Hadoop难以满足人们对大数据的特别查询需求。
赛仕软件研究开发(北京)有限公司(以下简称SAS)总经理刘政也指出,Hadoop在任务展开和执行时牺牲了部分时效,而且Hadoop的Reduce任务只有在全部Map任务完成后才能启动执行。因此,Hadoop对于企业的实时业务分析系统而言存在弱点。
北京永洪商智科技有限公司(以下简称永洪科技)CEO何春涛认为,Hadoop的最大不足是:Hadoop追求高吞吐量,导致时间延迟较高。 Hadoop可以支持百亿级的数据量,但很难应对秒级响应的需求,即使只是数亿的数据量,Hadoop也只适合做分钟级别的离线分析系统。因此,不适合做实时分析系统。何春涛从通信层的角度分析指出,当Hadoop任务分配Server时不会将信息发送到计算节点,而是让计算节点通过心跳机制去拉动任务。
基于框架的通用性,MapReduce代码也会在HDFS(Hadoop Distributed File System,分布式文件系统)中传送,在各计算节点展开,再通过启动新JVM进程装载并运行。类似的JVM进程启/停的动作会有五六次之多。 Reduce作业只能在全部Map 作业完成之后才能启动。此外,何春涛认为,Hadoop缺少专业的商业支持服务,传统企业需要储备专业的Hadoop技术人才才能保证系统的正常运转。
Teradata天睿公司大中华区大数据事业部总监孔宇华也对Hadoop技术人才缺乏表示担忧。Hadoop是一个性价比很高的数据抓取、数据管理、数据转换平台。有了这种比较廉价的数据处理平台,很多企业都可以把数据保存下来挖掘更多的数据价值。但是,企业真正要在Hadoop平台上做数据分析、数据挖掘,最大的难题是需要找到一些基于Hadoop平台懂数据、懂分析,又懂编程的技术人才。
同时,王家林认为,Hadoop难以应对多元化的大数据处理业务。企业如果要同时部署在语言和运行机制方面都有差异的Hadoop、Storm、 Impala等三套系统,那就需要三个独立的技术团队开发、运营和维护,同时三个系统之间共享数据的代价也是非常大的,更不用谈直接共享彼此的操作算子。 Hadoop近三年来在架构上和性能上并无长足进步,很多新版本只不过是对系统错误和不足的修修补补而已,这就导致了系统代码越来越臃肿。
同时,Hadoop系统编写和开发语言采用Java,由于Java语言的特性导致在开发时语言的表现力差,在表达机器学习等算法时非常繁杂,这使得Hadoop在应对大数据处理要求时的表现越来越糟糕。
高性价比的大数据处理平台
孙元浩表示,Hadoop主要由HDFS和MapReduce组成:HDFS是一个高可扩展的分布式文件系统,是大数据软件栈的基石;MapReduce在处理PB级别的数据时具有高容错性、高吞吐量的特点。
刘政认为,Hadoop是下一代海量数据分布式处理的理想基础架构,特别是对非结构化数据的存储和处理,它可以让用户比较容易地构建自己的分布式计算平台。
Hadoop的优势不仅表现在海量数据存储和处理能力方面的高可靠性,以及能够自动保存多个数据副本和自动重新分配失败任务的高容错性,还表现在它能够在计算机集群数以千计的节点间分配数据和完成计算方面的高可扩展性,另外还在于它在计算节点之间动态移动数据和保持计算负载均衡获得较快处理速度的高效性。基于Java技术开发的Hadoop能为企业系统提供稳定可靠的API接口,为利用大规模廉价硬件设备上的计算能力构建高性能分布式计算框架提供了可能。因此,Hadoop非常适合构建非实时的离线分析系统。