流式传输大数据:Storm,Spark和Samza

有许多分布式计算系统可以实时或近实时处理大数据。 本文将从对三个Apache框架的简短描述开始,并试图对它们之间的某些相似之处和不同之处提供一个快速的高级概述。

阿帕奇风暴

在风暴 ,你设计要求的T opology实时计算的图,然后喂到集群,其中主节点将分发工作节点来执行它之间的代码。 在拓扑中,数据在喷口之间传递, 喷口以不可变的键值对集(称为元组)的形式发射数据流螺栓则转换这些流(计数,过滤器等)。 螺栓本身可以选择将数据发送到处理管道中的其他螺栓。

风暴建筑41

阿帕奇火花

Spark Streaming (Spark API的核心扩展)不会像Storm那样一次处理流。 相反,它将在处理它们之前将它们切成小批时间间隔。 连续数据流的Spark抽象称为DStream (对于离散流 )。 DStream是RDD弹性分布式数据集 )的微型批次。 RDD是分布式集合,可以通过任意功能和数据滑动窗口上的转换( 窗口计算 )并行操作。

spark-architecture4

阿帕奇·萨姆扎(Apache Samza)

Samza的流式传输方法是在收到消息时一次处理一次。 Samza的流原语不是元组Dstream ,而是消息 。 流被分成多个分区 ,每个分区都是只读消息的有序序列,每个消息具有唯一的ID( 偏移量 )。 该系统还支持批处理 ,即按顺序使用来自同一流分区的多个消息。 尽管Samza通常依赖于Hadoop的YARN ( 另一个资源协商者 )和Apache Kafka ,但Samza的执行和流模块都可以插入。

samza42

共同点

所有这三个实时计算系统都是开源, 低延迟分布式,可伸缩容错的 。 它们都使您能够通过跨具有故障转移功能的计算机集群中分布的并行任务来运行流处理代码。 它们还提供了简单的API,以抽象出底层实现的复杂性。

这三个框架针对相似的概念使用不同的词汇表:

apache-concepts21

比较矩阵

下表总结了一些区别:

阿帕奇1

交付模式一般分为三类:

  1. 最多一次 :消息可能会丢失。 通常这是最不希望的结果。
  2. 至少一次 :可以重新发送邮件(不丢失,但重复)。 对于许多用例来说,这已经足够了。
  3. 恰好一次 :每封邮件仅发送一次,且一次(无损失,无重复)。 尽管很难在所有情况下都保证,但这是一个理想的功能。

另一方面是状态管理 。 存储状态有不同的策略。 Spark Streaming将数据写入分布式文件系统(例如HDFS)。 Samza使用嵌入式键值存储。 使用Storm,您将不得不在应用程序层滚动自己的状态管理,或者使用称为Trident的更高级别的抽象。

用例

这三个框架特别适合于有效处理连续的大量实时数据。 那么使用哪一个呢? 没有硬性规定,最多只有一些通用准则。

如果您想要一个允许增量计算的高速事件处理系统, Storm将会很合适。 如果您进一步需要按需运行分布式计算,而客户端正在同步等待结果,则可以直接使用分布式RPC (DRPC)。 最后但并非最不重要的一点,因为Storm使用Apache Thrift ,所以您可以用任何编程语言编写拓扑。 但是,如果您需要状态持久性和/或仅一次交付,则应查看更高级别的Trident API,该API还提供了微分批处理。

一些使用Storm的公司: Twitter,Yahoo!,Spotify,天气频道

说到微批处理,如果您必须有状态的计算,一次发送并且不介意更高的延迟,则可以考虑使用Spark Streaming……特别是如果您还计划进行图形操作,机器学习或SQL访问。 Apache Spark堆栈使您可以将多个库与流( Spark SQL , MLlib , GraphX )结合起来,并提供方便的统一编程模型。 特别是, 流算法 (例如,流k均值 )使Spark可以实时进行决策。

spark-stack2

一些使用Spark的公司: Amazon,Yahoo!,NASA JPL,eBay Inc.,百度…

如果您要处理的状态很多(例如,每个分区有许多GB), Samza会将存储和处理放在同一台机器上,从而可以有效地处理内存中无法容纳的状态。 该框架还通过其可插拔 API提供了灵活性:默认执行,消息传递和存储引擎都可以用您选择的替代方案来代替。 此外,如果您有来自不同团队,具有不同代码库的多个数据处理阶段,则Samza的细粒度作业将特别适合,因为可以在添加或删除它们的同时将涟漪效应降至最低。

一些使用Samza的公司: LinkedIn,Intuit,Metamarkets,Quantiply,Fortscale…

结论

我们只刮过《三个阿帕奇人》的表面。 我们没有涵盖其他许多功能,以及这些框架之间的细微差别。 另外,重要的是要牢记上述比较的局限性,因为这些系统在不断发展。

翻译自: https://www.javacodegeeks.com/2015/02/streaming-big-data-storm-spark-samza.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

那天有个小孩跟我说LINQ(四)

小孩LINQ系列导航:(一) (二) (三) (四) (五) (六) (七) (八) 转载于:http…

uniapp使用阿里云多色图标

下载,然后解压 输入cmd,然后enter 输入 npm install -g iconfont-tools 再输入 iconfont-tools,然后一直enter,直到结束 目录会多了个iconfont-weapp文件,点击去找到 iconfont-weapp-icon.css 导入和使用 t-icon开头 接…

针对Java中的XSD验证XML

有许多工具可用于根据XSD 验证XML文档 。 其中包括操作系统脚本和工具,例如xmllint ,XML编辑器和IDE,甚至是在线验证器。 由于前面提到的方法的局限性或问题,我发现拥有自己的易于使用的XML验证工具很有用。 Java使编写这样的工具…

细学PHP 09 MySql

1:mysql是什么?答:mysql是一种开源的,小型的数据库和PHP结合的非常紧密 比较流行的LAMP组合 指 linux apache mysql php 2:我怎么样用Mysql?答:下载mysql并安装,装完之后…

修改 this 指向

文章目录前言一、new关键字改变this指向二、 call()三、apply()四 、bind()五、总结前言 修改 this 指向,四种方法 一、new关键字改变this指向 //构造函数版this function Fn(){this.user "追梦子…

默认方法和多重继承

最近卢卡斯JOOQ埃德尔发布和文章有关嵌套类及其使用。 这是一个有趣的话题&#xff0c;他的文章一如既往地有趣并且值得一读。 我只同意一个简短的声明&#xff0c;我们有一个简短的回复链&#xff0c;导致默认方法&#xff0c;以及为什么不能有类似的东西 class Outer {<n…

uniapp uni.request GET方式请求,不能直接传数组解决方法

这里写目录标题目录遇到的问题 GET请求方法传数组解决方案目录 遇到的问题 GET请求方法传数组 想传一个数组&#xff0c;但是后台接受到的数据与浏览器中显示的数据和前台代码传的不一样&#xff1b; 前台代码打印 浏览器显示数据 其中HerbalNameList &#xff0c;变成了字…

休眠CascadeType.LOCK陷阱

介绍 引入了Hibernate 显式锁定支持以及Cascade Types之后 &#xff0c;就该分析CascadeType.LOCK行为了。 休眠锁定请求触发内部LockEvent 。 关联的DefaultLockEventListener可以将锁定请求级联到锁定实体子级。 由于CascadeType.ALL也包括CascadeType.LOCK &#xff0c;因…

c++中在堆和栈中申请空间的差别

堆中和栈中申请的空间的比较, 我找到了下面的比较: 栈的情况&#xff1a;栈上分配空间的好处是快&#xff0c;而且对象生存期是自动的&#xff0c;离开当前域之后就自动析构回收。坏处就是栈空间有限&#xff0c;而且不能人为控制对象的生存期&#xff0c;比如你无法将一个函数…

推销自己的海盗猫王运营商

因此&#xff0c;Java没有Elvis运算符&#xff08;或者更正式的名称是null合并运算符或null安全成员选择&#xff09;……虽然我个人不太在意它&#xff0c;但有些人似乎很喜欢它。 当一位同事需要几天后&#xff0c;我坐下来探讨了我们的选择。 而且你知道什么&#xff01; 您…

sunos 查cpu主频指令prtdiag

sun查cpu主频指令 usr/sbin/psrinfo -v ...虚拟处理器 63 在下列时间的状态&#xff1a;09/10/2013 14:23:52自 04/08/2013 17:41:40 开始已在运行。sparcv9 处理器以 2660 MHz 运行,而且有 sparcv9 浮点数处理器 sun的prtdiag指令: 查cpu个数 bash-3.2$ uname -a SunOS m5000…

使用CDI简化JAX-RS缓存

这篇文章&#xff08;通过一个简单的示例&#xff09;说明了如何使用CDI Producers使其在RESTful服务中利用缓存控制语义更加容易 与HTTP 1.0中可用的Expires标头相比&#xff0c; HTTP 1.1中添加了Cache-Control标头&#xff0c;这是急需的改进。 RESTful Web服务可以利用此标…

字符串字符和数字分割

现在有个String类型的字符串&#xff1a; String str"AA120"; 我想把它分解成 AA &#xff1b;120 就是把数字和字母分开&#xff1b; 求方法 补充&#xff1a; 格式是前面是字母 不确定几位&#xff0c;后面是数字&#xff0c;也不确定几位 就是"AA111…

transform限制position:fixed的跟随效果

我们应该都知道&#xff0c;position:fixed可以让元素不跟随浏览器的滚动条滚动&#xff0c;而且这种跟随效果连它的兄弟们position:relative/absolute都限制不了。但是&#xff0c;真是一物降一物&#xff0c;position:fixed固定效果却被小小的transform给干掉了&#xff0c;直…

Maven提示:有关可执行jar的所有信息

Maven提示&#xff1a;有关可执行jar的所有信息 在分发代码时&#xff0c;可执行jar是非常有用的工具。 这意味着&#xff0c;只要将Java安装在客户端计算机上&#xff0c;至少在Windows和Mac上&#xff0c;您的用户只需双击jar即可启动程序。 另外&#xff0c;在命令行上&…

C# 查询一张表的数据用于补充另外一张表的数据 MySQL数据库

UPDATE bookhistory bh set bh.CategoryId (SELECT CategoryId FROM booklist bk where bk.Id bh.BookListId)

Gentoo man手册指南

转载&#xff1a;http://www.gentoo.org/doc/zh_cn/man-guide.xml#doc_chap2 http://blog.csdn.net/andyelvis/article/details/4044938 使用man命令技巧 Gentoo man手册指南 内容: 1. 简介2. 使用man结构 1. 简介 man程序 每一个人在他的linux人生中都使用…

Java 8 Lambda表达式教程

问候&#xff01; :) 离开几个月后&#xff0c;我决定恢复风格:)。 我注意到我以前有关新的Date / Time API的一篇文章非常受欢迎&#xff0c;因此这次我将把本篇文章专门介绍Java 8的另一个新功能&#xff1a; Lambda Expressions 。 功能编程 Lambda表达式是Java编程语言最…

React 父组件(hooks)调用子组件(calss)方法

父组件&#xff08;hooks&#xff09; let richTextRef {};<RichText getRichText{getRichText} content{content} onRef{ref > richTextRef ref} />子组件&#xff08;class&#xff09; componentDidMount () > {this.props.onRef && this.props.onRe…