云计算的几大形式
- 云计算服务类型
- 基础设施即服务(IaaS) - 提供硬件设备 :例如 个人搭建网站不需要再去租服务器,买数据库,可在云平台上付费购买空间及相应服务。
- eg. Google app engine ; Amazon Web Services (AWS) ; 阿里云;新浪云
- 软件即服务(SaaS) - WebService : 各系统之间可以相互交互
- 网络服务
- 平台即服务(PaaS) - Hadoop(平台),Oracle,MS 微软
- 管理服务提供商
- 商业服务平台
- 云安全
Google云计算平台技术架构
Hadoop
HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。
MapReduce:并行计算模型,大问题细化成小问题
Map - 分组,拆分任务
Reduce - 合并
MapReduce是第一代计算引擎,Tez和Spark是第二代。MapReduce的设计,采用了很简化的计算模型,只有Map和Reduce两个计算过程(中间用Shuffle串联),用这个模型,已经可以处理大数据领域很大一部分问题了。
Map+Reduce的简单模型虽然好用,但是很笨重。第二代的Tez和Spark除了内存Cache之类的新feature,本质上来说,是让Map/Reduce模型更通用,让Map和Reduce之间的界限更模糊,数据交换更灵活,更少的磁盘读写(内存处理,不用写到HDFS),以便更方便地描述复杂算法,取得更高的吞吐量。
MapReduce的程序写起来麻烦,这就好比你有了汇编语言,虽然你几乎什么都能干了,但是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描述算法和数据处理流程。于是就有了Pig和Hive。Pig是接近脚本方式去描述MapReduce,Hive则用的是SQL。
Hive可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计。
有了Hive之后,人们发现SQL对比Java有巨大的优势。一个需求用SQL描述就只有一两行,MapReduce写起来大约要几十上百行,但是Hive在MapReduce上跑的很慢,于是Impala,Presto,Drill诞生了(当然还有无数非著名的交互SQL引擎,就不一一列举了),这些系统让用户更快速地处理SQL任务,牺牲了通用性稳定性等特性。
这些系统,一直没有达到人们期望的流行度。因为这时候又两个异类被造出来了。他们是Hive on Tez / Spark和SparkSQL。
它们的设计理念是,MapReduce慢,但是如果我用新一代通用计算引擎Tez或者Spark来跑SQL,那我就能跑的更快。
上面的介绍,基本就是一个数据仓库的构架了。底层HDFS,上面跑MapReduce/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。这解决了中低速数据处理的要求。
那如果我要更高速的处理呢?于是又一种计算模型被开发出来,这就是Streaming(流)计算。Storm是最流行的流计算平台。
流计算的思路是在数据流进来的时候就处理,基本无延迟,但是它的短处是,不灵活,你想要统计的东西必须预先知道,毕竟数据流过就没了,你没算的东西就无法补算了。因此它是个很好的东西,但是无法替代上面数据仓库和批处理系统。
还有一个有些独立的模块是KV Store,比如Cassandra,HBase,MongoDB以及很多很多很多很多其他的(多到无法想象)。KV Store就是说,我有一堆键值,我能很快速滴获取与这个Key绑定的数据。这个动作用MapReduce也能完成,但是很可能要扫描整个数据集。而KV Store专用来处理这个操作,所有存和取都专门为此优化了。KV Store的理念是,基本无法处理复杂的计算,大多没法JOIN,也许没法聚合,没有强一致性保证(不同数据分布在不同机器上,你每次读取也许会读到不同的结果,也无法处理类似银行转账那样的强一致性要求的操作)。但是就是极快。
每个不同的KV Store设计都有不同取舍,有些更快,有些容量更高,有些可以支持更复杂的操作。
除此之外,还有一些更特制的系统/组件,比如Mahout是分布式机器学习库,Protobuf是数据交换的编码和库,ZooKeeper是高一致性的分布存取协同系统,等等。
有了这么多乱七八糟的工具,都在同一个集群上运转,大家需要互相尊重有序工作。所以另外一个重要组件是,调度系统。现在最流行的是Yarn。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。只要大家都服从你妈分配,那大家都能愉快滴烧菜。
你可以认为,大数据生态圈就是一个厨房工具生态圈。为了做不同的菜,中国菜,日本菜,法国菜,你需要各种不同的工具。而且客人的需求正在复杂化,你的厨具不断被发明,也没有一个万用的厨具可以处理所有情况,因此它会变的越来越复杂。
参考文献:
http://www.36dsj.com/archives/23504 一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了