分布式计算模式:Stream

这篇具有很好参考价值的文章主要介绍了分布式计算模式:Stream。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

分布式计算模式中的 MapReduce 模式的核心思想是,将大任务拆分成多个小任务,针对这些小任务分别计算后,再合并各小任务的结果 以得到大任务的计算结果。

这种模式下任务运行完成之后,整个任务进程就结束了,属于短任务模式。但任务进程的启动和停止是一件很耗时的事儿,因此 MapReduce 对处理实时性的任务就不太合适了。

实时性任务主要是针对流数据的处理,对处理时延要求很高,通常需要有常驻服务进程,等待数据的随时到来随时处理,以保证低时延。处理流数据任务的计算模式,在分布式领域中叫作 Stream。

什么是 Stream?

近年来,由于网络监控、传感监测、AR/VR 等实时性应用的兴起,一类需要处理流数据的业务发展了起来。比如各种直播平台中,需要处理直播产生的音视频数据流等。这种如流水般持续涌现,且需要实时处理的数据称之为流数据

流数据的特征:

  • 数据如流水般持续、快速地到达;
  • 海量数据规模,数据量可达到 TB 级甚至 PB 级;
  • 对实时性要求高,随着时间流逝,数据的价值会大幅降低;
  • 数据顺序无法保证,也就是说系统无法控制将要处理的数据元素的顺序。

在分布式领域中,处理流数据的计算模式,就是流计算,也叫作 Stream。

流计算的职责是实时获取来自不同数据源的海量数据,进行实时分析处理,获得有价值的信 息。

它是一个对实时性要求非常高的计算形式,如果数据处理不及时,很容易导致过时、没用的结果,这时就需要对造成的后果进行“背锅”。从这个角度来说,Stream 可谓“一门背锅 的艺术”。

类比于水流的持续不断且变幻莫测,流数据也是以大量、快速、时变的流形式持续在应用中产生,因此流计算一般用于处理数据密集型应用

比如,百度、淘宝等大型网站中,每天都会产生大量的流数据,这些数据包括用户的搜索内容、用户的浏览记录等。实时采集用户数据,并通过流计算进行实时数据分析,可以了解每个时刻数据流的变化情况,甚至可以分析用户的实时浏览轨迹,从而进行个性化内容实时推 荐,提高用户体验。 爱奇艺、腾讯等音视频平台,对电影、电视剧等数据的处理,也是采用了流计算模式。

Stream 工作原理

MapReduce 是一种批量计算的形式。先收集数据并将其缓存起来,等到缓存写满时才开始处理数据。因此,批量计算的一个缺点就是,从数据采集到得到计算结果之间经历的时间很长。

而流计算强调的是实时性,数据一旦产生就会被立即处理,当一条数据被处理完成后,会序列化存储到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理,而不是像 MapReduce 那样,等到缓存写满才开始处理、传输。为了保证数据的实时性,在流计算中,不会存储任何数据,就像水流一样滚滚向前。

所以说,流计算属于持续性、低时延、事件驱动型的计算作业。

使用流计算进行数据处理,一般包括 3 个步骤,如下图所示:

分布式计算模式:Stream

第一步,提交流式计算作业。流式计算作业是一种常驻计算服务,比如实时交通监测服务、 实时天气预报服务等。对于流式计算作业,首先必须预先定义计算逻辑,并提交到流计算系统中,使得流计算系统知道自己该如何处理数据。

系统在整个运行期间,由于收集的是同一类型的数据、执行的是同一种服务,因此流式计算作业的处理逻辑不可更改。如果用户停止当前作业运行后再次提交作业,由于流计算不提供数据存储服务,因此之前已经计算完成的数据无法重新再次计算。

第二步,加载流式数据进行流计算。流式计算作业一旦启动将一直处于等待事件触发的状态,一旦有小批量数据进入流式数据存储,系统会立刻执行计算逻辑并迅速得到结果。

从上图中可以看出,在流计算系统中,有多个流处理节点,流处理节点会对数据进行预定义的处理操作,并在处理完后按照某种规则转发给后续节点继续处理。此外,流计算系统中还存在管理节点,主要负责管理处理节点以及数据的流动规则。其中,处理节点的个数以及数据转发的规则,都在第一步作业提交时定义。

第三步,持续输出计算结果。流式计算作业在得到小批量数据的计算结果后,可以立刻将结果数据写入在线 / 批量系统,无需等待整体数据的计算结果,以进一步做到实时计算结果 的实时展现。

小结:流计算不提供流式数据的存储服务,数据是持续流动的,在计算完成后就会立刻丢弃。流计算适用于需要处理持续到达的流数据、对数据处理有较高实时性要求的场景。为了及时处理流数据,流计算框架必须是低延迟、可扩展、高可靠的。

流计算的应用场景有很多,比如它是网络监控、传感监测、AR/VR、音视频流等实时应用的发展的基础。所以,目前流计算相关的框架和平台也有很多了,主流的划分方式是将其分为如下 3 类:

  • 商业级的流计算平台,比如 IBM 的 InfoSphere Streams 和 TIBCO 的 StreamBase。 InfoSphere Streams 支持同时分析多种数据类型并实时执行复杂计算。StreamBase 是一个用于实时分析的软件,可以快速构建分析系统,即时做出决策。StreamBase 可以为投资银行、对冲基金、政府机构等提供实时数据分析服务。
  • 开源流计算框架,典型代表是 Apache Storm(由 Twitter 开源)和 S4(由 Yahoo 开源)。Storm 是一个分布式的、容错的实时计算系统,可以持续进行实时数据流处理,也可以用于分布式 RPC。S4 是一个通用的、分区容错的、可扩展的、可插拔的分布式流式系统。这些开源的分布式流计算系统由于具备开源代码,因此比较适合开发人员将其搭建在自身业务系统中。
  • 各大公司根据自身业务特点而开发的流计算框架,比如 Facebook 的 Puma、百度的 Dstream(旨在处理有向无环的数据流)、淘宝的银河流数据处理平台(一个通用的、 低延迟、高吞吐、可复用的流数据实时计算系统)。

Spark 和 Flink 与 Storm 框架的不同之处在于,Spark 和 Flink 除了支持流计算,还支持批量计算,因此没有直接将它们列入上述的流计算框架中。

Storm 的工作原理

先来对比下 Storm 与 MapReduce 的区别。Hadoop 上运行的是“MapReduce 作业”,而 Storm 上运行的是“计算拓扑(Topologies)”。 “作业”和“拓扑”的一个关键区别是:MapReduce 的一个作业在得到结果之后总会结束;而拓扑描述的是计算逻辑,该计算逻辑会永远在集群中运行(除非你杀死该进程)。

如下图所示,Storm 集群上有两种节点,即主节点(Master Node)和工作节点(Worker Nodes):

  • 主节点上运行着一个名为“Nimbus”的守护进程。 Nimbus 负责为集群分发代码,为工作节点分配任务以及进行故障监控。一个 Storm 集群在工作过程中,只有一个 Nimbus 进程工作。
  • 每个工作节点上都运行着一个名为“Supervisor”的守护进程。 Supervisor 负责监听分配给它所在的机器上的工作,负责接收 Nimbus 分配的任务,并根据需要启动和停止工作进程,其中每个工作进程都执行一个子任务。因此,一个正在运行的拓扑任务,是由分布在许多计算机上的许多工作进程组成。
    分布式计算模式:Stream

Nimbus 是负责分发任务或代码的,Supervisor 是负责接收任务,并启动和停止工作进程以执行任务的。Nimbus 和 Supervisors 之间具体是怎么协同的?

如果所有数据和信息均存储在 Master Node 上,Master Node 故障后,会导致整个集群信息丢失,因此引入了 ZooKeeper 集群来加强可靠性。为此 Master Node 与 Worker Node 之间的交互通过 ZooKeeper 完成,由于 Nimbus 和 Supervisors 是 Master Node 和 Worker Node 之间负责交互的进程,因此 Nimbus 和 Supervisors 之间的所有协调都是通过 ZooKeeper 集群完成的,比如 Nimbus 会将任务的分配情况或信息发送给 ZooKeeper 集群,然后 Supervisors 向 ZooKeeper 集群获取任务,并启动工作进程以执行任务。

当 Supervisor 接收到分配的任务后,会启动工作节点的工作进程 (Worker) 去执行任务。一个计算任务可以分成任务数据的读取以及任务执行两部分。Worker 提供了两个组件 Spout 和 Bolt,分别进行数据读取和任务执行。

Storm 的核心抽象:数据流。数据流是一个无界序列,是在分布式环境中并行创建、处理的一组元组(tuple)。数据流可以由一种能够表述数据流中元组的域(fields)的模式来定义。

Storm 为进行数据流转换提供了基本组件 Spout 和 Bolt。 Spout 和 Bolt 有用户自定义的接口,用于运行特定应用程序的逻辑。如下图所示,Storm 上运行的计算拓扑其实是由一系列 Spout 和 Bolt 组成的有向无环图,这个有向无环图代表了计算逻辑。

分布式计算模式:Stream

Spout 和 Bolt 的含义:

  • Spout 用于接收源数据。Spout 会从一个外部的数据源读取数据元组,然后将它们发送到拓扑中。例如,Spout 从 Twitter API 读取推文并将其发布到拓扑中。
  • Bolt 负责处理输入的数据流,比如数据过滤(filtering)、函数处理(functions)、聚合(aggregations)、联结(joins)、数据库交互等。数据处理后可能输出新的流作为 下一个 Bolt 的输入。每个 Bolt 往往只具备单一的计算逻辑。执行简单的数据流转换时,比如仅进行数据过滤,则通常一个 Bolt 可以实现;而复杂的数据流转换通常需要使用多个 Bolt 并通过多个步骤完成,比如在神经网络中,对原始数据进行特征转换, 需要经过数据过滤、清洗、聚类、正则化等操作。

知识扩展:流计算和批量计算的区别是什么?

MapReduce 是一种批量计算,与用于实时数据处理的流计算,是什么关系呢?

虽然流计算和批量计算属于两种不同的计算模式,但并不是非此即彼的关系,只是适用于不 同的计算场景。

在流计算中,数据具有时效性,因此在 5G 以及人工智能应用的驱动下,专注于实时处理的流计算越来越得到广泛的关注。流计算的低延时、易扩展等性能非常适用于对时延要求高的终端应用(比如直播中音视频的处理等),从而极大提高用户的服务体验。而批量计算适用 于对时延要求低的任务。

在实际运用中,可以根据计算要求,选择不同的计算模式。

分布式计算模式:Stream

总结

流数据的价值会随时间的流逝而降低,“时间就是金钱”在流计算中体现得淋漓尽致。这就要求流计算框架必须是低延迟、可 扩展、高可靠的。

流计算的工作原理的 3 个步骤:提交流式计算作业、加载流式数据进行流计算、持续输出计算结果。

分布式计算模式:Stream文章来源地址https://www.toymoban.com/news/detail-403161.html

到了这里,关于分布式计算模式:Stream的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云存储、云计算与分布式存储、分布式计算是一回事吗?

    随着互联网的蓬勃兴起,大数据、人工智能、物联网、云计算与云存储等这些专业词汇在大众视野内出现的频率越来越高,再加上近几年分布式技术异军突起,更使得分布式存储、分布式计算等成为热词。然而,很多人对这些名词都一知半解,所以本文将主要和大家聊一聊,

    2024年01月25日
    浏览(56)
  • 分布式内存计算Spark环境部署与分布式内存计算Flink环境部署

    目录 分布式内存计算Spark环境部署 1.  简介 2.  安装 2.1【node1执行】下载并解压 2.2【node1执行】修改配置文件名称 2.3【node1执行】修改配置文件,spark-env.sh 2.4 【node1执行】修改配置文件,slaves 2.5【node1执行】分发 2.6【node2、node3执行】设置软链接 2.7【node1执行】启动Spark集群

    2024年02月08日
    浏览(71)
  • 分布式计算,云计算

    分布式计算 分布式计算是一种计算方法,和集中式计算是相对的。 随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。 分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节

    2024年01月15日
    浏览(63)
  • Redis与分布式-哨兵模式

    接上文 Redis与分布式-主从复制 启动一个哨兵,只需要修改配置文件即可, 先将所有服务关闭,然后修改配置文件,redis Master,redis Slave,redis Slave 2都是同样的修改方式 启动哨兵 先关闭哨兵服务,开启6001、6002、6003服务后再开启哨兵服务 启动哨兵后,会自动监控主节点,还

    2024年02月07日
    浏览(28)
  • (大数据开发随笔9)Hadoop 3.3.x分布式环境部署——全分布式模式

    分布式文件系统中,HDFS相关的守护进程也分布在不同的机器上,如: NameNode守护进程,尽可能单独部署在一台硬件性能较好的机器中 其他的每台机器上都会部署一个DataNode进程,一般的硬件环境即可 SecondaryNameNode守护进程最好不要和NameNode在同一台机器上 守护进程布局 Name

    2023年04月16日
    浏览(56)
  • 云计算之分布式计算

    CSDN话题挑战赛第2期 参赛话题:万家争鸣的云计算修罗场 分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。 首先来看一段维基百科的定义:分布式计算,又被称为分散式运算,主要研究分布式系统如何

    2024年01月20日
    浏览(45)
  • 分布式计算框架:Spark、Dask、Ray 分布式计算哪家强:Spark、Dask、Ray

    目录 什么是分布式计算 分布式计算哪家强:Spark、Dask、Ray 2 选择正确的框架 2.1 Spark 2.2 Dask 2.3 Ray 分布式计算是一种计算方法,和集中式计算是相对的。 随着计算技术的发展, 有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成

    2024年02月11日
    浏览(64)
  • 聊聊分布式解决方案Saga模式

    Saga模式使用一系列本地事务来提供事务管理,而一个本地事务对应一个Saga参与者,在Saga流程里面每一个本地事务只操作本地数据库,然后通过消息或事件来触发下一个本地事务,如果其中一个本地事务失败了,Saga就会执行一系列补偿事务来实现回滚操作。(补偿事务简单来

    2024年02月06日
    浏览(35)
  • ❤️❤️❤️Mapreduce分布式计算组件和YARN分布式资源调度

    上文我们已经介绍Hadoop中HDFS分布式存储组件 今天我们来学习Hadoop生态中另两大组件Mapreduce和YARN Map阶段 : 将数据拆分到不同的服务器后执行Maptask任务,得到一个中间结果 Reduce阶段 : 将Maptask执行的结果进行汇总,按照Reducetask的计算 规则获得一个唯一的结果 我们在MapReduce计算框

    2024年04月13日
    浏览(52)
  • Spark单机伪分布式环境搭建、完全分布式环境搭建、Spark-on-yarn模式搭建

    搭建Spark需要先配置好scala环境。三种Spark环境搭建互不关联,都是从零开始搭建。 如果将文章中的配置文件修改内容复制粘贴的话,所有配置文件添加的内容后面的注释记得删除,可能会报错。保险一点删除最好。 上传安装包解压并重命名 rz上传 如果没有安装rz可以使用命

    2024年02月06日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包