开源大数据技术漫谈
http://sanwen8.cn/p/150ZTVb.html
简单把上述大数据技术做一个总结,大数据可以从流程上分为输入(Delivery)、处理(Processing)、存储(Storage)和查询(Querying)四个步骤,分别有对应的开源技术,而这些技术方案之间往往又是相互渗透的。看下图:
大数据开源要从Hadoop说起。2003年Google发布了GFS的论文,2004年发布了MapReduce的论文。Yahoo的工程师们以这个设计思路开发了名为Nutch的搜索项目,并在2006年把它开源了。从此,Hadoop横空出世,开启了大数据开源的时代。
来看看Hadoop的内部构造,我们可以简单地把Hadoop分为数据存储和数据处理两大部分。待处理的数据以文件为单位被保存在HDFS(分布式文件系统)上,然后交由MapReduce进行数据处理。
HDFS(分布式文件系统)在Hadoop中负责数据的存储,其特点是可以运行在廉价的硬件上,提供了高度容错的大吞吐量的数据访问。而MapReduce是一种并行计算的方案,极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。
随着基于Hadoop的开发越来越多,其先天的局限性也逐步暴露出来。Hadoop原来是为搜索设计的解决方案,它的存储是基于文件系统的,包括原始输入和中间计算结果都要保存为磁盘上。而我们都知道磁盘IO是系统性能的瓶颈之一。这也造成了基于Hadoop的大数据方案在一些对实时性要求比较高的场景下不太适用。
仔细分析实时性场景,我们会发现有两种不同的实时性需求:一种是实时数据处理,另一种是实时数据查询。不同场景对数据的输入、计算、存储和查询有不同的要求,也就产生了不同的开源大数据解决方案。
第一种实时数据处理场景要求输入数据是实时的流数据,数据的分析处理要在规定时间内完成。比如要分析每年春运的人员流动数据,输入数据是海量的汽车、火车、航班旅客信息,对输出结果的时效有极高的要求,如果数据分析速度太慢,就失去了实时监控和预测的意义。
实时数据输入解决方案让输入数据以流的方式实时地进入大数据系统,而不必先存储到HDFS文件系统中,从而避免了由于磁盘IO造成的性能损失。Apache Kafka, RabbitMQ,Apache Flume等是当前比较流行的开源方案,其中Apache Kafka越来越引人注目,这主要归功于其恐怖的性能指标。Kafka目前用于LinkedIn,它每天处理超过100亿消息,持续负载平均每秒172,000消息。目前,无论从内部和外部的使用数据的应用程序大量使用多订阅者支持。每个消息发布出来后,基本上会有5.5个消息消费者使用,这导致的结果是每一天将有550亿的消息发送给实时消费者。
随着大数据中计算越来越复杂,往往一个处理过程会分解成很多小的计算任务,这些计算任务的中间结果需要保存在文件中做为下一个任务的输入。这样在计算过程中就会引入多次磁盘读写,降低了整体的计算速度。基于流处理的开源方案解决了这个问题,通过把中间计算结果保存在内存中,大大减少了磁盘读写带来的性能损失。这类方案有代表性的有Spark,STORM,samza,其中Spark发展得最好。
第二种实时数据查询场景类似于早期的商业智能解决方案,它对数据处理速度和输入数据的实时性要求不高,但对数据查询的响应速度要求极高。对这种业务需求的基本解决思路是数据的预处理和查询优化。所谓预处理就是把所有可能的查询条件组合都事先计算好,这样当实际查询发生时不必再进行计算,而可以直接使用已经算好的结果。这就引入了第二个问题,如何快速匹配查询结果。目前主流的开源查询方案包括SQL-on-Hadoop,基于Key-Value存储的cassandra,Apache HBASE,和基于列存储的Druid等。其中Druid是最近开始崭露头角的一个新项目,它采用了列存储技术,将查询速度提高到次秒级,提供了以交互方式访问数据的能力。
简单把上述大数据技术做一个总结,大数据可以从流程上分为输入(Delivery)、处理(Processing)、存储(Storage)和查询(Querying)四个步骤,分别有对应的开源技术,而这些技术方案之间往往又是相互渗透的。看下图:
大数据技术在国内的互联网企业中已经大量应用,淘宝、百度都是其中的佼佼者。特别是淘宝,由于马云在很早就把数据提到全公司的战略高度上,无论在人才上,技术实力上还是应用的深度广度上,淘宝的大数据都是走在前列的。从目前公开的资料看,淘宝的大数据平台主要还是建立在Hadoop之上的,但也在不断加入新的技术,如STORM等。淘宝不仅自己使用开源软件,自己也为开源做出贡献,比如开源系统timetunnel就是淘宝参考kafka产品的一个数据库日志采集收取发布中间件。而RocketMQ是另一个淘宝开源的消息中间件,定位于非日志的可靠消息传输,在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。
从Hadoop开源到今天已经过了10年,开源大数据技术的发展是被不断扩大的业务需求推动的。未来的10年,随着越来越多的大数据应用的出现,新的需求又会对大数据技术提供新的挑战,推动大数据向新的领域扩展。而人工智能技术可以说是最令人激动的大数据发展方向了。目前,Google和微软都在人工智能上押了重注,同时也是开源社区中重要的领导者,比如微软的MicrosoftCognitive Services和Google的TensorFlow。 相信开源大数据技术的未来会越来越精彩。
网友评论
推荐下,RocketMQ 源码解析 14 篇:http://www.yunai.me/categories/RocketMQ/?jianshu&401