常见分布式计算框架特点

jopen 9年前

Hadoop

Hadoop在使用原理上基本上遵照了MapReduce这样的一种模式进行项目的实际开发与交互,将一个个任务分解成映射与合并两种方式,然而通过映射进行分类与简化,从而产生部分归并结果,然后对同类结果进行归并计算;

由于Hadoop的中间结果需要依托于hdfs,从而需要经历硬盘及网络io的过程所以在实时性方面表现稍差;

Hadoop主要处理hdfs上的文本文件,而文本文件内容本身也是半结构化的;

之前的资源调度就是靠其中的master,之后hadoop2.0之后引入yarn进行资源的统一管理;

Spark

Spark的原理是将任务进行分解,并且在每一步任务上进行相应的操作处理,同时根据操作处理顺序构建DAG图,从而应用DAG引擎进行相关操作。

由于Spark在进行处理时主要使用内存所以基本可以做到实时性,同时,在进行DAG引擎优化方面对速度也有一定程度提升;

Spark本身是通过DAGSchedulerTaskScheduler实现任务调度以及计算节点切换,现在mesosyarn都对spark进行了一定程度的支持;

Spark的数据模型使用RDD这种弹性的存储,并且基于该数据模型构建了相应的数据依赖,从而实现一定的容错机制;

Spark基本上都运行在内存中,可以使用yarn或者mesos进行资源的统一管理,然后在上面进行spark的相关任务调度;

Storm

Storm是基于消息源(spout)获取数据发送信息,并且将信息发送到bolt形成相应的tuple,之后在此基础上继续构建数据的处理规则,处理规则需要认为变成实现;

Storm本身是流式数据处理,所以在实现实时性方面有一定的优势;

Storm的数据模型没有体现依赖关系,没有进行特别的存储结构设计,同时在数据模型处理方面仅仅进行结构设计而没有进行优化;

资源调度以及使用方面直接按照用户的i自定义方式进行,需要用户编写大量的流程控制问题,同时没有在资源啊隔离放main做些谢智导致可能出现局部任务影响全局的问题;

LinkedIn Samza

领英出品,主要结合kafka的设计思想将数据进行分块,同时保证数据的局部有序性,而任务调度方面进行简单操作后进行输入与输出。

进行实时数据流处理,并且综合了Kafka这样的消息队列;

通过类似于Kafka的数据结构,实现消息的分区、局部有序以及消息的重读机制,同时配合持久化方法可实现滑动窗口;

资源的管理主要借助于Yarn,利用消息队列的方式显现消息处理,同时通过备份方式显示数据局部容错;

Yahoo Apache S4

Yahoo出品,与Storm比较类似,基于每个节点处理不同的功能,同样是组成了一个DAG图去描述数据处理工作。

在雅虎内部使用,完成每秒数以千计的搜索查询。

以事件没基础进行设计,将每一次数据当成是一个事件来处理

使用ZooKeeper进行分布式数据的管理,在内部实现了负载均衡、容错、分发、路由等功能;