“昔我十年前,与君始相识。”  

一瞬间Hadoop也到了要初中择校的年龄了。

十年前还没有Hadoop,几年前国内IT圈里还不知道什么是Hadoop,而现在几乎所有大型企业的IT系统中有已经有了Hadoop的集群在运行了各式各样的任务。

2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce。到现在的10个年头,这个单词代表的是“核心”(即Core Hadoop项目)以及与之相关的一个不断成长的生态系统。这个和Linux非常类似,都是由一个核心和一个生态系统组成。

现在Hadoop俨然已经成为企业数据平台的“新常态”。我们很荣幸能够见证Hadoop十年从无到有,再到称王。在我们感动于技术的日新月异时,希望能通过本文能为Hadoop的昨天、今天和明天做出一点自己的解读,算是为Hadoop庆祝10岁生日献上的礼物。

Hadoop编年史


  • 2002年10月,Doug Cutting和Mike Cafarella创建了开源网页爬虫项目Nutch。

  • 2003年10月,Google发表Google File System论文。

  • 20047月,Doug CuttingMike CafarellaNutch中实现了类似GFS的功能,即后来HDFS的前身。

  • 200410月,Google发表了MapReduce论文。

  • 20052月,Mike CafarellaNutch中实现了MapReduce的最初版本。

  • 200512月,开源搜索项目Nutch移植到新框架,使用MapReduceNDFS(Nutch Distributed File System )来运行,在20个节点稳定运行。

  • 20061月,Doug Cutting加入雅虎,Yahoo!提供一个专门的团队和资源将Hadoop发展成一个可在网络上运行的系统。

  • 2006年2月,Apache Hadoop项目正式启动以支持MapReduce和HDFS的独立发展。

  • 20062月,Yahoo!的网格计算团队采用Hadoop

  • 20063月,Yahoo!建设了第一个Hadoop集群用于开发。

  • 20064月,第一个Apache Hadoop发布。

  • 20064月,在188个节点上(每个节点10GB)运行排序测试集需要47.9个小时。

  • 20065月,Yahoo!建立了一个300个节点的Hadoop研究集群。

  • 20065月,在500个节点上运行排序测试集需要42个小时(硬件配置比4月的更好)。

  • 200611月,研究集群增加到600个节点。

  • 200611月,Google发表了Bigtable论文,这最终激发了HBase的创建。

  • 200612月,排序测试集在20个节点上运行1.8个小时,100个节点上运行3.3小时,500个节点上运行5.2小时,900个节点上运行7.8个小时。

  • 20071月,研究集群增加到900个节点。

  • 20074月,研究集群增加到两个1000个节点的集群。

  • 2007年10月,第一个Hadoop用户组会议召开,社区贡献开始急剧上升。

  • 2007年,百度开始使用Hadoop做离线处理。

  • 2007年,中国移动开始在“大云”研究中使用Hadoop技术。

  • 2008年,淘宝开始投入研究基于Hadoop的系统——云梯,并将其用于处理电子商务相关数据。

  • 2008年1月,Hadoop成为Apache顶级项目。

  • 20082月,Yahoo!运行了世界上最大的Hadoop应用,宣布其搜索引擎产品部署在一个拥有1万个内核的Hadoop集群上。

  • 20084月,在900个节点上运行1TB排序测试集仅需209秒,成为世界最快。

  • 20086月,Hadoop的第一个SQL框架——Hive成为了Hadoop的子项目。

  • 20087月,Hadoop打破1TB数据排序基准测试记录。Yahoo!的一个Hadoop集群用209秒完成1TB数据的排序 ,比上一年的纪录保持者保持的297秒快了将近90秒。

  • 20088月,第一个Hadoop商业化公司Cloudera成立。

  • 200810月,研究集群每天装载10TB的数据。

  • 200811月,Apache Pig的最初版本发布。

  • 20093月,17个集群总共24000台机器。

  • 2009 年3月,Cloudera推出世界上首个Hadoop发行版——CDH(Cloudera's Distribution including Apache Hadoop)平台,完全由开放源码软件组成。

  • 20094月,赢得每分钟排序,59秒内排序500GB(在1400个节点上)和173分钟内排序100TB数据(在3400个节点上)。

  • 20095月,Yahoo的团队使用Hadoop1 TB的数据进行排序只花了62秒时间。

  • 20096月,Cloudera的工程师Tom White编写的《Hadoop权威指南》初版出版,后被誉为Hadoop圣经。

  • 20097月 ,Hadoop Core项目更名为Hadoop Common;

  • 20097月 ,MapReduce 和 Hadoop Distributed File System (HDFS) 成为Hadoop项目的独立子项目。

  • 20097月 ,Avro 和 Chukwa 成为Hadoop新的子项目。

  • 20098月,Hadoop创始人Doug Cutting加入Cloudera担任首席架构师。

  • 200910月,首届Hadoop World大会在纽约召开。

  • 20105月 ,Avro脱离Hadoop项目,成为Apache顶级项目。

  • 20105月 ,HBase脱离Hadoop项目,成为Apache顶级项目。

  • 20105月,IBM提供了基于Hadoop 的大数据分析软件——InfoSphere BigInsights,包括基础版和企业版。

  • 20109月,Hive( Facebook) 脱离Hadoop,成为Apache顶级项目。

  • 20109月,Pig脱离Hadoop,成为Apache顶级项目。

  • 2010年-2011年,扩大的Hadoop社区忙于建立大量的新组件(Crunch,Sqoop,Flume,Oozie等)来扩展Hadoop的使用场景和可用性。

  • 20111月,ZooKeeper 脱离Hadoop,成为Apache顶级项目。

  • 20113月,Apache Hadoop获得Media Guardian Innovation Awards 

  • 20113月, Platform Computing 宣布在它的Symphony软件中支持Hadoop MapReduce API

  • 2011年5月,Mapr Technologies公司推出分布式文件系统和MapReduce引擎——MapR Distribution for Apache Hadoop。

  • 20115月,HCatalog 1.0发布。该项目由Hortonworks 20103月份提出,HCatalog主要用于解决数据存储、元数据的问题,主要解决HDFS的瓶颈,它提供了一个地方来存储数据的状态信息,这使得 数据清理和归档工具可以很容易的进行处理。

  • 20114月,SGISilicon Graphics International)基于SGI RackableCloudRack服务器产品线提供Hadoop优化的解决方案。

  • 20115月,EMC为客户推出一种新的基于开源Hadoop解决方案的数据中心设备——GreenPlum HD,以助其满足客户日益增长的数据分析需求并加快利用开源数据分析软件。GreenplumEMC20107月收购的一家开源数据仓库公司。

  • 20115月,在收购了Engenio之后, NetApp推出与Hadoop应用结合的产品E5400存储系统。

  • 20116月,Calxeda公司发起了“开拓者行动”,一个由10家软件公司组成的团队将为基于Calxeda即将推出的ARM系统上芯片设计的服务器提供支持。并为Hadoop提供低功耗服务器技术。

  • 20116月,数据集成供应商Informatica发布了其旗舰产品,产品设计初衷是处理当今事务和社会媒体所产生的海量数据,同时支持Hadoop

  • 2011年7月,Yahoo!和硅谷风险投资公司 Benchmark Capital创建了Hortonworks 公司,旨在让Hadoop更加可靠,并让企业用户更容易安装、管理和使用Hadoop。

  • 20118月,Cloudera公布了一项有益于合作伙伴生态系统的计划——创建一个生态系统,以便硬件供应商、软件供应商以及系统集成商可以一起探索如何使用Hadoop更好的洞察数据。

  • 20118月,DellCloudera联合推出Hadoop解决方案——Cloudera EnterpriseCloudera Enterprise基于Dell PowerEdge C2100机架服务器以及Dell PowerConnect 6248以太网交换机。

  • 20123月,企业必须的重要功能HDFS NameNode HA被加入Hadoop主版本。

  • 20128月,另外一个重要的企业适用功能YARN成为Hadoop子项目。

  • 201210月,第一个Hadoop原生MPP查询引擎Impala加入到了Hadoop生态圈。

  • 2014年2月,Spark逐渐代替MapReduce成为Hadoop的缺省执行引擎,并成为Apache基金会顶级项目。

  • 20152月,HortonworksPivotal抱团提出“Open Data Platform”的倡议,受到传统企业如MicrosoftIBM等企业支持,但其它两大Hadoop厂商ClouderaMapR拒绝参与。

  • 201510月,Cloudera公布继HBase以后的第一个Hadoop原生存储替代方案——Kudu

  • 2015年12月,Cloudera发起的Impala和Kudu项目加入Apache孵化器。

    注:来源网络,不一一列举。

深度 | 资深架构师教你一篇文看懂Hadoop(一)_Hadoop

技术篇

深度 | 资深架构师教你一篇文看懂Hadoop(一)_编年史_02

现在Hadoop在一月发布了2.7.2的稳定版, 已经从传统的Hadoop三驾马车HDFS,MapReduce和HBase社区发展为60多个相关组件组成的庞大生态,其中包含在各大发行版中的组件就有25个以上,包括数据存储、执行引擎、编程和数据访问框架等。

Hadoop在2.0将资源管理从MapReduce中独立出来变成通用框架后,就从1.0的三层结构演变为了现在的四层架构:

1. 底层——存储层,文件系统HDFS

2. 中间层——资源及数据管理层,YARN以及Sentry等

3. 上层——MapReduce、Impala、Spark等计算引擎

4. 顶层——基于MapReduce、Spark等计算引擎的高级封装及工具,如Hive、Pig、Mahout等等

深度 | 资深架构师教你一篇文看懂Hadoop(一)_Hadoop_03

我们欣慰地看到开源文化为Hadoop社区和生态带来的蓬蓬发展,但又确实存在一些碎片化和重复化现象。

复杂的生态和过多的组件几乎让很多企业仍然等待一个像以前IBM一样的巨头厂商能提供标准化的解决方案。不过随着围绕Hadoop和Spark的生态圈日益稳固,核心会变得稳定得多。

存储层

HDFS已经成为了大数据磁盘存储的事实标准,用于海量日志类大文件的在线存储。经过这些年的发展,HDFS的架构和功能基本固化,像HA、异构存储、本地数据短路访问等重要特性已经实现,在路线图中除了Erasure Code已经没什么让人兴奋的feature。

随着HDFS越来越稳定,社区的活跃度页越来越低,同时HDFS的使用场景也变得成熟和固定,而上层会有越来越多的文件格式封装:列式存储的文件格式,如Parquent,很好的解决了现有BI类数据分析场景;以后还会出现新的存储格式来适应更多的应用场景,如数组存储来服务机器学习类应用等。

未来HDFS会继续扩展对于新兴存储介质和服务器架构的支持。随着数据量的增大,跨机房部署相信也终会在基线版本中实现。基于HDFS的存储机制,

将HBase作为存储层似乎有点牵强:其底层使用HDFS作为文件存储。不过在逻辑角度,还是倾向与将HBase定位为存储层或数据访问层,因为其提供了另外一种场景的数据存储和访问方案。2015年HBase 发布了1.0版本,这也代表着 HBase 走向了稳定。

最新HBase新增特性包括:更加清晰的接口定义,多Region 副本以支持高可用读,Family粒度的Flush以及RPC读写队列分离等。未来HBase不会再添加大的新功能,而将会更多的在稳定性和性能方面进化,尤其是大内存支持、内存GC效率等。

Kudu是Cloudera在2015年10月才对外公布的新的分布式存储架构,与HDFS完全独立。其实现参考了2012年Google发表的Spanner论文。鉴于Spanner在Google 内部的巨大成功,Kudu被誉为下一代分析平台的重要组成,用于处理快速数据的查询和分析,填补HDFS和HBase之间的空白。其出现将进一步把Hadoop市场向传统数据仓库市场靠拢。

深度 | 资深架构师教你一篇文看懂Hadoop(一)_Hadoop_04

一方面,分布式内存文件系统也在兴起,旨在消除不同任务或不同计算框架间的数据共享时的转化代价,并提供内存缓存以提高热数据处理性能。这一市场以前使用第三方Redis或Memcached,到后来能为分析提供更多原生支持的Tachyon或Ignite,而现在又迎来了新贵Arrow。

Apache Arrow项目为列式内存存储的处理和交互提供了规范。目前来自Apache Hadoop社区的开发者们致力于将它制定为大数据系统项目的事实性标准。

Arrow项目受到了Cloudera、Databricks等多个大数据巨头公司支持,很多committer同时也是其他明星大数据项目(如HBase、Spark、Kudu等)的核心开发人员。再考虑到Tachyon等似乎还没有找到太多实际接地气的应用场景,Arrow的高调出场可能会成为未来新的内存分析文件接口标准。

管控层

管控又分为数据管控和资源管控。

随着Hadoop集群规模的增大以及对外服务的扩展,如何有效可靠的共享利用资源是管控层需要解决的问题。脱胎于MapReduce1.0的YARN成为了Hadoop 2.0通用资源管理平台。

由于占据了Hadoop的地利,业界对其在资源管理领域未来的前景非常看好。传统其他资源管理框架如Mesos,还有现在兴起的Docker等都会对YARN未来的发展产生影响。

如何提高YARN性能、如何与容器技术深度融合,如何更好的适应短任务的调度,如何更完整的多租户支持、如何细粒度的资源管控等都是企业实际生产中迫在眉睫的需求,需要YARN解决。要让Hadoop走得更远,未来YARN需要做的工作还很多。

另一方面大数据的安全和隐私越来越多的受到关注。Hadoop依靠且仅依靠Kerberos来实现安全机制,但每一个组件都将进行自己的验证和授权策略。

开源社区似乎从来不真正关心安全问题,如果不使用来自Hortonworks的Ranger或来自Cloudera 的Sentry这样的组件,那么大数据平台基本上谈不上安全可靠。

Cloudera刚推出的RecordService组件使得Sentry在安全竞赛中拔得先机。RecordService不仅提供了跨所有组件一致的安全颗粒度,而且提供了基于Record的底层抽象(有点像Spring,代替了原来Kite SDK的作用),让上层的应用和下层存储解耦合的同时、提供了跨组件的可复用数据模型。

计算引擎层

Hadoop生态和其他生态最大的不同之一就是“单一平台多种应用”的理念了。传的数据库底层只有一个引擎,只处理关系型应用,所以是“单一平台单一应用”;而NoSQL市场有上百个NoSQL软件,每一个都针对不同的应用场景且完全独立,因此是“多平台多应用”的模式。而Hadoop在底层共用一份HDFS存储,上层有很多个组件分别服务多种应用场景,如:

  • 确定性数据分析:主要是简单的数据统计任务,例如OLAP,关注快速响应,实现组件有Impala等;

  • 探索性数据分析:主要是信息关联性发现任务,例如搜索,关注非结构化全量信息收集,实现组件有Search等;

  • 预测性数据分析:主要是机器学习类任务,例如逻辑回归等,关注计算模型的先进性和计算能力,实现组件有Spark、MapReduce等;

  • 数据处理及转化:主要是ETL类任务,例如数据管道等,关注IO吞吐率和可靠性,实现组件有MapReduce等

其中,最耀眼的就是Spark了。IBM宣布培养100万名Spark开发人员,Cloudera在One Platform倡议中宣布支持Spark为Hadoop的缺省通用任务执行引擎,加上Hortonworks全力支持Spark,我们相信Spark将会是未来大数据分析的核心。

虽然Spark很快,但现在在生产环境中仍然不尽人意,无论扩展性、稳定性、管理性等方面都需要进一步增强。同时,Spark在流处理领域能力有限,如果要实现亚秒级或大容量的数据获取或处理需要其他流处理产品。

Cloudera宣布旨在让Spark流数据技术适用于80%的使用场合,就考虑到了这一缺陷。我们确实看到实时分析(而非简单数据过滤或分发)场景中,很多以前使用S4或Storm等流式处理引擎的实现已经逐渐Kafka+Spark Streaming代替。

Spark的流行将逐渐让MapReduce、Tez走进博物馆。

服务层

服务层是包装底层引擎的编程API细节,对业务人员提供更高抽象的访问模型,如Pig、Hive等。

而其中最炙手可热的就是OLAP的SQL市场了。现在,Spark有70%的访问量来自于SparkSQL!SQL on Hadoop到底哪家强?Hive、Facebook的Pheonix、Presto、SparkSQL、Cloudera推的Impala、MapR推的Drill、IBM的BigSQL、还是Pivital开源的HAWQ?

这也许是碎片化最严重的地方了,从技术上讲几乎每个组件都有特定的应用场景,从生态上讲各个厂家都有自己的宠爱,因此Hadoop上SQL引擎已经不仅仅是技术上的博弈(也因此考虑到本篇中立性,此处不做评论)。

可以遇见的是,未来所有的SQL工具都将被整合,有些产品已经在竞争钟逐渐落伍,我们期待市场的选择。

周边的工具更是百花齐放,最重要的莫过于可视化、任务管理和数据管理了。

有很多开源工具都支持基于Hadoop 的查询程序编写以及即时的图形化表示,如HUE、Zeppelin等。用户可以编写一些SQL或Spark代码以及描述代码的一些标记,并指定可视化的模版,执行后保存起来,就可供其他人复用,这钟模式也被叫做“敏捷BI”。这个领域的商业产品更是竞争激烈,如Tableau、Qlik等。

调度类工具的鼻祖Oozie能实现几个MapReduce任务串连运行的场景,后来的Nifi及Kettle等其他工具则提供了更加强大的调度实现,值得一试。

毫无疑问,相对与传统的数据库生态,Hadoop的数据治理相对简单。Atlas是Hortonworks新的数据治理工具,虽然还谈不上完全成熟,不过正取得进展。Cloudera的Navigator是Cloudera商业版本的核心,汇聚了生命周期管理、数据溯源、安全、审计、SQL迁移工具等一系列功能。

Cloudera收购Explain.io以后将其产品整合为Navigator Optimizator组件,能帮助用户把传统的SQL应用迁移到Hadoop平台并提供优化建议,可以节省数人月的工作量。

算法及机器学习

实现基于机器学习的自动的智能化数据价值挖掘是大数据和Hadoop最诱人的愿景了,也是很多企业对大数据平台的最终期望。随着可获得的数据越来越多,未来大数据平台的价值更多的取决于其计算人工智能的程度。

现在机器学习正慢慢跨出象牙塔,从一个少部分学术界人士研究的科技课题变成很多企业正在验证使用的数据分析工具,而且已经越来越多的进入我们的日常生活。

机器学习的开源项目除了之前的Mahout、MLlib、Oryx等,今年发生了很多令人瞩目的大事,迎来了数个明星巨头的重磅加入:

  • 2015年1月,Facebook开源前沿深度学习工具“Torch”。

  • 2015年4月,亚马逊启动其机器学习平台Amazon Machine Learning,这是一项全面的托管服务,让开发者能够轻松使用历史数据开发并部署预测模型。

  • 2015年11月,谷歌开源其机器学习平台TensorFlow。

  • 同一月,IBM开源SystemML并成为Apache官方孵化项目。

  • 同时,微软亚洲研究院将分布式机器学习工具DMTK通过Github开源。DMTK由一个服务于分布式机器学习的框架和一组分布式机器学习算法组成,可将机器学习算法应用到大数据中。

  • 2015年12月,Facebook开源针对神经网络研究的服务器“Big Sur”,配有高性能图形处理单元(GPUs),转为深度学习方向设计的芯片。