流式大数据处理的三种框架:storm,spark和samza

cnblogs_2015 cnblogs_2015     2022-08-08     665

关键词:

许多分布式计算系统都可以实时或接近实时地处理大数据流。本文将对三种Apache框架分别进行简单介绍,然后尝试快速、高度概述其异同。

Apache Storm

Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology)。这个拓扑将会被提交给集群,由集群中的主控节点(master node)分发代码,将任务分配给工作节点(worker node)执行。一个拓扑中包括spout和bolt两种角色,其中spout发送消息,负责将数据流以tuple元组的形式发送出去;而bolt则负责转换这些数据流,在bolt中可以完成计算、过滤等操作,bolt自身也可以随机将数据发送给其他bolt。由spout发射出的tuple是不可变数组,对应着固定的键值对。

技术分享

 

Apache Spark

Spark Streaming是核心Spark API的一个扩展,它并不会像Storm那样一次一个地处理数据流,而是在处理前按时间间隔预先将其切分为一段一段的批处理作业。Spark针对持续性数据流的抽象称为DStream(DiscretizedStream),一个DStream是一个微批处理(micro-batching)的RDD(弹性分布式数据集);而RDD则是一种分布式数据集,能够以两种方式并行运作,分别是任意函数和滑动窗口数据的转换。

技术分享

 

Apache Samza

Samza处理数据流时,会分别按次处理每条收到的消息。Samza的流单位既不是元组,也不是Dstream,而是一条条消息。在Samza中,数据流被切分开来,每个部分都由一组只读消息的有序数列构成,而这些消息每条都有一个特定的ID(offset)。该系统还支持批处理,即逐次处理同一个数据流分区的多条消息。Samza的执行与数据流模块都是可插拔式的,尽管Samza的特色是依赖Hadoop的Yarn(另一种资源调度器)和Apache Kafka。

技术分享

 

共同之处

以上三种实时计算系统都是开源的分布式系统,具有低延迟、可扩展和容错性诸多优点,它们的共同特色在于:允许你在运行数据流代码时,将任务分配到一系列具有容错能力的计算机上并行运行。此外,它们都提供了简单的API来简化底层实现的复杂程度。

三种框架的术语名词不同,但是其代表的概念十分相似:

技术分享

 

对比图

下面表格总结了一些不同之处:

技术分享

 

数据传递形式分为三大类:

 

  1. 最多一次(At-most-once):消息可能会丢失,这通常是最不理想的结果。
  2. 最少一次(At-least-once):消息可能会再次发送(没有丢失的情况,但是会产生冗余)。在许多用例中已经足够。
  3. 恰好一次(Exactly-once):每条消息都被发送过一次且仅仅一次(没有丢失,没有冗余)。这是最佳情况,尽管很难保证在所有用例中都实现。

 

另一个方面是状态管理:对状态的存储有不同的策略,Spark Streaming将数据写入分布式文件系统中(例如HDFS);Samza使用嵌入式键值存储;而在Storm中,或者将状态管理滚动至应用层面,或者使用更高层面的抽象Trident。

用例

这三种框架在处理连续性的大量实时数据时的表现均出色而高效,那么使用哪一种呢?选择时并没有什么硬性规定,最多就是几个指导方针。

如果你想要的是一个允许增量计算的高速事件处理系统,Storm会是最佳选择。它可以应对你在客户端等待结果的同时,进一步进行分布式计算的需求,使用开箱即用的分布式RPC(DRPC)就可以了。最后但同样重要的原因:Storm使用Apache Thrift,你可以用任何编程语言来编写拓扑结构。如果你需要状态持续,同时/或者达到恰好一次的传递效果,应当看看更高层面的Trdent API,它同时也提供了微批处理的方式。

技术分享

 

使用Storm的公司有:Twitter,雅虎,Spotify还有The Weather Channel等。

说到微批处理,如果你必须有状态的计算,恰好一次的递送,并且不介意高延迟的话,那么可以考虑Spark Streaming,特别如果你还计划图形操作、机器学习或者访问SQL的话,Apache Spark的stack允许你将一些library与数据流相结合(Spark SQL,Mllib,GraphX),它们会提供便捷的一体化编程模型。尤其是数据流算法(例如:K均值流媒体)允许Spark实时决策的促进。

使用Spark的公司有:亚马逊,雅虎,NASA JPLeBay还有百度等。

如果你有大量的状态需要处理,比如每个分区都有许多十亿位元组,那么可以选择Samza。由于Samza将存储与处理放在同一台机器上,在保持处理高效的同时,还不会额外载入内存。这种框架提供了灵活的可插拔API:它的默认execution、消息发送还有存储引擎操作都可以根据你的选择随时进行替换。此外,如果你有大量的数据流处理阶段,且分别来自不同代码库的不同团队,那么Samza的细颗粒工作特性会尤其适用,因为它们可以在影响最小化的前提下完成增加或移除的工作。

使用Samza的公司有:LinkedInIntuitMetamarketsQuantiplyFortscale等。

结论

本文中我们只对这三种Apache框架进行了简单的了解,并未覆盖到这些框架中大量的功能与更多细微的差异。同时,文中这三种框架对比也是受到限制的,因为这些框架都在一直不断的发展,这一点是我们应当牢记的。

多个sparkstreaming怎么控制时间

...义类似于Hadoop对于批处理的意义。Storm的适用场景:1)流数据处理Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。2)分布式RPC。由于Storm的处理组件是分布式的,而且处理延迟极低,所以可以作... 查看详情

storm流式计算框架(代码片段)

...简介:1.1storm是什么:1.Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数... 查看详情

storm与sparkhadoop三种框架对比

目录Storm与Spark、Hadoop三种框架对比一、Storm与Spark、Hadoop三种框架对比二、hadoop的应用业务分析 查看详情

spark的介绍:前世今生(代码片段)

...,正如传统大数据技术Hadoop的MapReduce、Hive引擎,以及Storm流式实时计算引擎等。Spark包含了大数据领域常见的各种计算框架:比如SparkCore用于离线计算,SparkSQL用于交互式查询, 查看详情

hadoop,storm和spark的区别,比较

...下问题:1.hadoop、Storm各是什么运算2.Storm为什么被称之为流式计算系统3.hadoop适合什么场景,什么情况下使用hadoop4.什么是吞吐量首先整体认识:Hadoop是磁盘级计算,进行计算时,数据在磁盘上,需要读写磁盘;Storm是内存级计算... 查看详情

hadoop,storm和spark的区别,比较

...下问题:1.hadoop、Storm各是什么运算2.Storm为什么被称之为流式计算系统3.hadoop适合什么场景,什么情况下使用hadoop4.什么是吞吐量首先整体认识:Hadoop是级计算,进行计算时,数据在磁盘上,需要读写磁盘;Storm是内存级计算,数... 查看详情

hadoop,storm和spark的区别,比较

...下问题:1.hadoop、Storm各是什么运算2.Storm为什么被称之为流式计算系统3.hadoop适合什么场景,什么情况下使用hadoop4.什么是吞吐量首先整体认识:Hadoop是级计算,进行计算时,数据在磁盘上,需要读写磁盘;Storm是内存级计算,数... 查看详情

hadoop,storm和spark的区别,比较

...下问题:1.hadoop、Storm各是什么运算2.Storm为什么被称之为流式计算系统3.hadoop适合什么场景,什么情况下使用hadoop4.什么是吞吐量首先整体认识:Hadoop是级计算,进行计算时,数据在磁盘上,需要读写磁盘;Storm是内存级计算,数... 查看详情

请描述下大数据三大平台hadoop,storm,spark的区别和应用场景

...数据流的分布式实时计算系统。为Hadoop添加了可靠的实时数据处理功能spark基于内存的,吞吐量比storm大一点。而且spark集成的sparkSQL,MLlib,Graph貌似比较方便!参考技术ASpark已经取代Hadoop成为最活跃的开源大数据项目,但是,在... 查看详情

spark

...parkApacheSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势。首先... 查看详情

大数据岗位需要掌握哪些技能

...习Hive的应用,任何细节都将给大家涉及到。5、Storm实时数据处理全面掌握Storm内部机制和原理,通过大量项目实战,拥有完整项目开发思路和架构设计,掌握从数据采集到实时计算到数据存储再到前台展示。6、spark大数据开发中... 查看详情

spark入门

ApacheSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势。首先,S... 查看详情

大数据实习之spark

ApacheSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势。首先,Spark为我们提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表... 查看详情

storm简介——实时流式计算介绍

...据类型,这种数据具有连续性、无限性和瞬时性。是实时数据处理所面向的数据类型,对这种流式数据的实时计算就是实时流式计算。  特征实时流式计算与传统的数据处理技术不同,其具有一下特点:    ... 查看详情

sparkstreaming学习之一sparkstreaming初识

...0.4(依赖jdk1.8)  spark-1.6一、SparkStreaming简介SparkStreaming是流式处理框架,是SparkAPI的扩展,支持可扩展、高吞吐量、容错的实时数据流处理,实时数据的来源可以是:Kafka,Flume,Twitter,ZeroMQ或者TCPsockets,并且可以使用高级功能的复... 查看详情

大数据入门第十六天——流式计算之storm详解常用命令

一、常用命令  1.提交命令提交任务命令格式:stormjar【jar路径】【拓扑包名.拓扑类名】【拓扑名称】tormjarexamples/storm-starter/storm-starter-topologies-0.9.6.jarstorm.starter.WordCountTopologywordcount  查看详情

大数据计算框架hadoop,spark和mpi

今天做题,其中一道是请简要描述一下Hadoop,Spark,MPI三种计算框架的特点以及分别适用于什么样的场景。一直想对这些大数据计算框架总结一下,只可惜太懒,一直拖着。今天就借这个机会好好学习一下。一张表名称发起者语言... 查看详情

流处理kafkastream-sparkstreaming-storm流式计算框架比较选型

KafkaStream-SparkStreaming-Storm流式计算框架比较选型elasticsearch-headElasticsearch-sqlclientNLPchina/elasticsearch-sql:UseSQLtoqueryElasticsearchkafkastreamvssparkstreamingvsstorm_百度搜索[翻译]KafkaStreams简介:让流处理变得 查看详情