Storm与Spark、Hadoop这三种框架,各有各的优势,每一个框架都有本身的最佳应用场景。因此,在不一样的应用场景下,应该选择不一样的框架。算法
1.Storm是最佳的流式计算框架,Storm由Java和Clojure写成,Storm的优势是全内存计算,因此它的定位是分布式实时计算系统,按照Storm做者的说法,Storm对于实时计算的意义相似于Hadoop对于批处理的意义。
Storm的适用场景:
1)流数据处理
Storm能够用来处理源源不断流进来的消息,处理以后将结果写入到某个存储中去。
2)分布式RPC。因为Storm的处理组件是分布式的,并且处理延迟极低,因此能够做为一个通用的分布式RPC框架来使用。sql
2.Spark是一个基于内存计算的开源集群计算系统,目的是更快速的进行数据分析。Spark由加州伯克利大学AMP实验室Matei为主的小团队使用Scala开发,相似于Hadoop MapReduce的通用并行计算框架,Spark基于Map Reduce算法实现的分布式计算,拥有Hadoop MapReduce所具备的优势,但不一样于MapReduce的是Job中间输出和结果能够保存在内存中,从而再也不须要读写HDFS,所以Spark能更好地适用于数据挖掘与机器学习等须要迭代的Map Reduce的算法。
Spark的适用场景:
1)屡次操做特定数据集的应用场合
Spark是基于内存的迭代计算框架,适用于须要屡次操做特定数据集的应用场合。须要反复操做的次数越多,所需读取的数据量越大,受益越大,数据量小可是计算密集度较大的场合,受益就相对较小。
2)粗粒度更新状态的应用
因为RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如Web服务的存储或者是增量的Web爬虫和索引。就是对于那种增量修改的应用模型不适合。
总的来讲Spark的适用面比较普遍且比较通用。数据库
3.Hadoop是实现了MapReduce的思想,将数据切片计算来处理大量的离线数据。Hadoop处理的数据必须是已经存放在HDFS上或者相似HBase的数据库中,因此Hadoop实现的时候是经过移动计算到这些存放数据的机器上来提升效率。
Hadoop的适用场景:
1)海量数据的离线分析处理
2)大规模Web信息搜索
3)数据密集型并行计算编程
简单来讲:
Hadoop适合于离线的批量数据处理适用于对实时性要求极低的场景
Storm适合于实时流数据处理,实时性方面作得极好
Spark是内存分布式计算框架,试图吞并Hadoop的Map-Reduce批处理框架和Storm的流处理框架,可是Spark已经作得很不错了,批处理方面性能优于Map-Reduce,可是流处理目前仍是弱于Storm,产品仍在改进之中服务器
大数据是不能用传统的计算技术处理的大型数据集的集合。它不是一个单一的技术或工具,而是涉及的业务和技术的许多领域。架构
目前主流的三大分布式计算系统分别为Hadoop、Spark和Strom:app
Hadoop当前大数据管理标准之一,运用在当前不少商业应用系统。能够轻松地集成结构化、半结构化甚至非结构化数据集。
Spark采用了内存计算。从多迭代批处理出发,容许将数据载入内存做反复查询,此外还融合数据仓库,流处理和图形计算等多种计算范式。Spark构建在HDFS上,能与Hadoop很好的结合。它的RDD是一个很大的特色。
Storm用于处理高速、大型数据流的分布式实时计算系统。为Hadoop添加了可靠的实时数据处理功能。负载均衡
Hadoop是使用Java编写,容许分布在集群,使用简单的编程模型的计算机大型数据集处理的Apache的开源框架。 Hadoop框架应用工程提供跨计算机集群的分布式存储和计算的环境。 Hadoop是专为从单一服务器到上千台机器扩展,每一个机器均可以提供本地计算和存储。框架
Hadoop适用于海量数据、离线数据和负责数据,应用场景以下:机器学习
场景1:数据分析,如京东海量日志分析,京东商品推荐,京东用户行为分析
场景2:离线计算,(异构计算+分布式计算)天文计算
场景3:海量数据存储,如京东的存储集群
基于京麦业务三个实用场景:
都属于离线数据,决定采用Hadoop做为京麦数据类产品的数据计算引擎,后续会根据业务的发展,会增长Storm等流式计算的计算引擎,下图是京麦的北斗系统架构图:
图一 京东北斗系统
Hadoop分布式处理框架核心设计:
HDFS:(Hadoop Distributed File System)分布式文件系统;
MapReduce:是一种计算模型及软件架构。
HDFS(Hadoop File System),是Hadoop的分布式文件存储系统。
将大文件分解为多个Block,每一个Block保存多个副本。提供容错机制,副本丢失或者宕机时自动恢复。默认每一个Block保存3个副本,64M为1个Block。将Block按照key-value映射到内存当中。
图二 数据写入HDFS
图三 HDFS读取数据
MapReduce是一个编程模型,封装了并行计算、容错、数据分布、负载均衡等细节问题。MapReduce实现最开始是映射map,将操做映射到集合中的每一个文档,而后按照产生的键进行分组,并将产生的键值组成列表放到对应的键中。化简(reduce)则是把列表中的值化简成一个单值,这个值被返回,而后再次进行键分组,直到每一个键的列表只有一个值为止。这样作的好处是能够在任务被分解后,能够经过大量机器进行并行计算,减小整个操做的时间。但若是你要我再通俗点介绍,那么,说白了,Mapreduce的原理就是一个分治算法。
MapReduce计划分三个阶段执行,即映射阶段,shuffle阶段,并减小阶段。
映射阶段:映射或映射器的工做是处理输入数据。通常输入数据是在文件或目录的形式,而且被存储在Hadoop的文件系统(HDFS)。输入文件被传递到由线映射器功能线路。映射器处理该数据,并建立数据的若干小块。
减小阶段:这个阶段是:Shuffle阶段和Reduce阶段的组合。减速器的工做是处理该来自映射器中的数据。处理以后,它产生一组新的输出,这将被存储在HDFS。
图四 MapReduce
hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,能够将sql语句转换为MapReduce任务进行运行,这套SQL 简称HQL。使不熟悉mapreduce 的用户很方便的利用SQL 语言查询,汇总,分析数据。而mapreduce开发人员能够把己写的mapper 和reducer 做为插件来支持Hive 作更复杂的数据分析。
图五 HIVE体系架构图
由上图可知,hadoop和mapreduce是hive架构的根基。Hive架构包括以下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor)。