流计算概述(林子雨慕课课程)

news2024/11/19 16:40:53

文章目录

      • 11. 流计算概述
        • 11.1 流计算概述
          • 11.1.1 数据的处理模型
          • 11.1.2 流计算概念与典型框架
        • 11.2 流计算处理流程
        • 11.3 流计算的应用
        • 11.4 开源流计算框架Storm
          • 11.4.1 Storm 简介
          • 11.4.2 Storm设计思想
          • 11.4.3 Storm框架设计
        • 11.5 Spark Spark Streaming Samza以及三种流计算框架比较
        • 11.6 Storm 的安装和编程实例
          • 11.6.1 编写Storm程序
          • 11.6.2 安装Storm的基本过程和实例

11. 流计算概述

11.1 流计算概述
11.1.1 数据的处理模型
  • 静态数据和流数据

    • 静态数据用一个非常形象的比喻,就是三峡水库里面蓄的水一样静止不动

      例如:数据仓库中的数据存入数仓后就维持不变,是典型的静态数据

      image-20231011211124998

    • 流数据:近年来,在Web应用、网络监控、传感检测等领域,兴起的一种新的数据密集型应用–流数据,即数据以大量、快速、时变的流形式持续到达

      • 其数据产生方式是实时产生,并且实时不断地像流水一样到达,所以称为流数据

      image-20231011211336140

  • 流数据特征

    • 数据快速持续到达,潜在大小也许是无穷无尽的
    • 数据来源众多,格式复杂
    • 数据量大,但是不十分关注存储,一旦经过处理,要么被丢弃,要么被归档存储
    • 注重数据的整体价值,不过分关注个别数据
    • 数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素的顺序
  • 针对这两类数据的分析计算

    image-20231011211651988

11.1.2 流计算概念与典型框架
  • 流计算的概念

    • 实时获取来自不同数据源的海量数据,经过实时分析处理,获得有价值的信息

      image-20231011211920102

  • 流计算的基本理念

    • 数据的价值随着时间的流逝而降低,如用户点击流

    • 因此,当时间出现时就应该立即进行处理,而不是缓存起来进行批量处理

    • 需要一个低延迟、高可靠、可扩展的处理引擎帮我们去完成流数据的实时处理

  • 流计算系统要求

    image-20231011212213079

  • Hadoop是否适合做流式处理?

    • Hadoop的设计初衷是面向大规模数据的批量处理

    • MapReduce是专门面向静态数据的批量处理的,内部各种机制都为批处理做了高度优化,不适合用户处理持续到达的动态数据

  • 通过降低批处理时间延迟的方式完成流式数据的处理?

    • 采用变通的方式对MapReduce进行相关的改造

    • MapReduce的批量数据转换为很多的小量的数据,一大批数据将其切割成很多小批

    • 每隔一个周期去启动一次MapReduce作业,变相地完成一个流式数据的处理

      问题:

      • 切分成小片段,可以降低延迟,但是也增加了附加开销,还要处理片段之间依赖关系
      • 需要改造MapReduce以支持流式处理(结果不能写入磁盘,IO消耗大,应该写入内存)

因此,Hadoop擅长批处理,不适合流计算

  • 当前业界诞生了许多专门的流数据实时计算系统来满足各自需求

    image-20231011213201023

    • 商业级:IBM InfoSphere Streams、IBM StreamBase

    • 开源流计算框架:

      • Twitter Storm:免费、开源的分布式实时计算系统、可简单、高效、可靠地处理大量的流数据
      • Yahoo!S4(Simple Scalable Streaming System):开源流计算平台,是通用的、分布式的、可扩展的、分区容错的、可插拔的流式系统
    • 公司为支持自身业务开发的流计算框架

      image-20231011213531544

11.2 流计算处理流程
  • 传统的数据处理流程

    image-20231011213628284

    • 传统的数据处理流程隐含两个前提
      • 存储的数据肯定是旧的,存储的静态数据是过去某一时刻的快照,这些数据在查询时可能已不具备时效性
      • 需要用户主动去发出查询来获取结果
  • 流计算的处理流程

    image-20231011213809565

    • 数据实时采集过程

      • 日志数据为例:需要借助于相关的开源产品帮你从各个源系统上把日志采集过来
      • 目前开源的分布式日志采集系统如:scribe、kafka、chukwa、flume

      image-20231011213842964

      • 数据采集系统的基本架构

        image-20231011214221213

    • 数据实时计算

      image-20231011214318193

    • 实时查询服务

      image-20231011214400532

  • 流处理系统和传统的数据处理系统的区别

    • 流处理系统处理的是实时的数据,而传统的数据处理系统处理的是预先存储好的静态数据
    • 用户通过流处理系统获取到的一般是实时结果而传统的数据处理方式获取的都是过去某一个历史时刻的快照
    • 流处理系统不需要用户主动发出查询,它会实时地把生成的查询结果不断推送给用户
11.3 流计算的应用

image-20231011214644317

  • 传统的应用分析已经不适合现在的很多应用场景

    image-20231011214752039

  • 流式处理可以实现实时性的要求

    image-20231011214905253

  • 流计算可应用于实时交通
    image-20231011215029939

11.4 开源流计算框架Storm
11.4.1 Storm 简介
  • 流计算的发展

    • 以前只有政府机构和金融机构才会去做流计算,为了解决实时数据处理需求

    • 开发产品都是基于对传统数据库处理的流式化,最终开发的都是实时数据库产品,很少有企业研究流计算框架

      image-20231011215333939

  • 流计算框架在流式数据处理方面比MapReduce更有优势

    image-20231011215418736

  • Storm

    • Storm是Twitter公司开发的一个开源免费框架
    • Storm对于实时计算的意义就相当于Hadoop对于批处理的意义
  • 三大分布式处理系统

    • hadoop、Spark、Storm
  • Storm的优点:

    • 可以简单、高效、可靠地处理流数据,支持多种编程语言、处理非常灵活
    • 可以非常方便地与现有的数据库系统产品进行融合,从而开发出非常强大的实时计算系统
  • 以Twitter公司为例

    image-20231011215802594

  • Storm的特点

    image-20231011215856003

11.4.2 Storm设计思想
  • Storm主要术语

    image-20231012153203388

  • Stream:将流数据Stream描述成一个无限的Tuple序列,这些Tuple序列会以分布式的方式并行的创建和处理

    image-20231012154012327

    • 每个tuple是一堆值,每个值有一个名字,并且每个值可以是任何类型
    • Tuple本来应该是一个Key-Value的Map,由于各个组件间传递的tuple的字段名称已经事先定义好了,所以Tuple只需要按需填入各个Value,所以是一个Value Lisy(值列表)
  • Spout

    • Storm认为每个Stream都有一个源头,并把这个源头抽象位Spout

    • 通常Spout会从外部数据源(队列、数据库等)读取数据,然后封装成Tuple形式,发送到Stream中

    • Spout是一个主动的角色,在接口内部有一个nextTuple函数,Storm框架会不停的调用该函数

      image-20231012154954447

  • Bolt

    • Storm将Streams的状态转化过程抽象为Bolt

    • Bolt即可以处理Tuple,也可以将处理后的Tuple作为新的Streams发送给其他Bolt

    • Bolt可以执行过滤、函数操作、Join、操作数据库等任何操作

      image-20231012155236618

      注意:Bolt是一个被动的角色,其接口中有一个execute(Tuple input)方法,在接收到消息之后会调用次函数,用户可以在此方法中执行自己的处理逻辑

  • Topology:相当于应用程序中的Job,流计算任务是以Topology的形式提交

    image-20231012160855143

    Topology中每一个组件(Bolt或者Spout)之间都是并行运行的

    其中每个Bolt里面是可以包含多个Task任务的
    image-20231012161712146

  • Stream Groupings

    • 一个Spout或者Bolt内都有着多个Task,可以并行执行

    image-20231012161929350

  • 通过设置StreamGrouping可以设置将Spout分发给Bolt中的哪一个Task来执行

    image-20231012162353465

11.4.3 Storm框架设计
  • Storm运行任务的方式与Hadoop类似

    • Hadoop运行的是MapReduce作业,而Storm运行的是“Topology”
  • Storm和Hadoop架构组织功能对应关系

    image-20231012163336534

    MapReduce作业最终会完成计算并结束运行

    而Topology将持续处理消息(直到人为终止)

  • Storm集群采用“Master-Worker”的节点方式

    image-20231012163743669

  • Storm集群架构示意图

    • Storm使用Zookeeper来作为分布式协调组件,负责Nimbus和多个Supervisor之间的所有协调工作

      • Nimbus将任务分配给相应的Supervisor,Supervisor拿到任务将任务分配给Worker进程去启动
      • 所有的Nimbus和Supervisor的状态信息都交给Zookeeper来保存
      • 借助Zookeeper,若Nimbus进程或者Supervisor进程意外终止,重启时也能读取、恢复之前的状态,并继续工作,使得Storm极其稳定

      image-20231012164052719

  • Worker进程

    • 每个worker进程都属于一个特定的Topology,每个Supervisor节点的worker可以有多个,每个worker对Topology的每个组件(Spout或Bolt)运行一个或者多个executor线程来提供Task的运行服务

      image-20231012165111183

      Executor:excutor是产生于worker进程内部的线程,会执行同一个组件的一个或者多个Task

      一般Topology生命周期中每个组件对应的Task数量是不变的,但是Executora的数量是变化的

      一般Executor的数量是小于Task的

      实际的数据处理都是由Task完成的

  • Storm工作流程

    image-20231012170203803

    • Nimbus节点首先将提交的Topology进行分片,分成一个个Task,分配给相应的Supervisor,并将Task和Supervisor相关的信息提交到Zookeeper集群上
    • Supervisor会去Zookeeper集群上认领自己的Task,通知自己的Worker进程进行Task的处理
11.5 Spark Spark Streaming Samza以及三种流计算框架比较
  • Spark Streaming

    • Spark Streaming 可整合多种输入数据源,如Kafka、Flume、HDFS,甚至是普通的TCP套接字,经处理后的数据可存储至文件系统、数据库,或显示在仪表盘中

      image-20231012170839989

  • Spark Streaming执行流程

    • 其基本原理:将实时输入数据流以时间片(秒级)为单位进行拆分,然后经Spark引擎以类似批处理的方式处理每个时间片数据

      image-20231012171030868

    • DStream操作示意图

      image-20231012171106359

      Spark Streaming最主要的抽象是DStream (Discretized Stream,离散化数据流),表示连续不断的数据流。在内部实现上,Spark Streaming的输入数据按照时间片(如1秒) 分成一段一段的DStream,每一段数据转换为Spark中的RDD,并且对Dstream的操作都最终转变为对相应的RDD的操作

  • Spark Streaming和Storm的对比

    • Spark Streaming 无法实现毫秒级的流计算,而Storm可以实现毫秒级响应
    • Spark Streaming是构建在Spark伤的,Spark的低延迟执行(100ms+)可以用于实时计算。相比于Storm,RDD数据集更容易做高效的容错处理
    • Spark Streaming采用的小批量处理的方式使得它可以同时兼容批量和实时处理的逻辑和算法,因此,方便了一些需要历史数据和实时数据联合分析的特定应用场景
  • Samza

    • 基本概念

      • 作业:一个作业(Job)是对一组输入流进行处理转换成输出流的程序

        image-20231012171839735

      • 分区:既不是元组Tuple,也不是Stream,而是一条条的消息;每个流会被分成一个或者多个分区

        image-20231012171954088

        • 它将数据流划分为分区,每个分区都是一个有趣的消息队列

          image-20231012172109484

      • 任务

        image-20231012172215995

    • 数据流图

      • 是通过多个作业串联起来,构成这么一个完整的数据流图才可以完成一个完整的流数据处理流程

        image-20231012172310529

    • Samza系统架构

      • 包括流数据层、执行层、处理层
      • 流数据层
        • 负责数据流的收集分发,流处理层和执行层都被设计成可插拔的,开发人员可以使用其他框架替代YARN和Kafka
  • MapReduce批处理架构和Samza流处理架构的类比

    image-20231012172626859

  • Samza处理分析过程

    image-20231012172718721

    • 1.Samza客户端需要执行一个Samza作业时,它会向YARN的ResourceManager提交作业请求
    • 2.ResouceManager和NodeManager沟通,为该作业分配容器(包含CPU、内存等资源)来运行Samza ApplicationMaster
    • 3.Samza ApplicationMaster进一步向ResourceManager申请运行任务的容器
    • 4.获得容器后,Samza ApplicationMaster与容器所在的NodeManager沟通启动该容器,并在其中运行Samza Task Runner
    • 5.Samza Task Runner负责执行具体的Samza任务,完成流数据处理分析
    • Kafka Broker:完成消息的处理、分发等
  • Storm Spark Streaming和Samaza应用场景

    image-20231012173354293

11.6 Storm 的安装和编程实例
11.6.1 编写Storm程序
  • 程序任务:单词统计

    image-20231012173510609

    • Storm进行单词统计整个流程

      image-20231012173623860

    • 一个句子经Storm的单词统计得出的结果

      image-20231012173741667

    • 整个单词统计Topology的整体逻辑

      image-20231012173942576

    • main函数中的处理逻辑

      image-20231012174058087

    • 各个类的作用

      image-20231012174234575

      • RandomSentenceSpout类

        image-20231012174350968

      • SplitSentence类

        image-20231012174424413

        splitisentence.py脚本

        image-20231012174614035

      • WordCount类

        image-20231012174715340

  • Twiteer也是使用了Storm框架实现了实时热门话题

    image-20231012174959402

11.6.2 安装Storm的基本过程和实例
  • 见:Storm安装教程_CentOS6.4/Storm0.9.6_厦大数据库实验室博客 (xmu.edu.cn)

  • Storm的具体运行环境

    image-20231012175111251

  • Storm单机模式

    image-20231012190151089

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

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

相关文章

Python如何17行代码画一个爱心

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

xtrabackup全备 增备

版本针对mysql8.0版本 官方下载地址 https://www.percona.com/downloads 自行选择下载方式 yum安装方式 1、下载上传服务器 安装软件 [rootmaster mysql]# ll percona-xtrabackup-80-8.0.33-28.1.el7.x86_64.rpm -rw-r--r--. 1 root root 44541856 Oct 10 13:25 percona-x…

android 判断是否打开了蓝牙网络共享

最近做项目遇到需要判断手机是否打开了蓝牙网络共享的开关 //调用isBluetoothPanTetheringOn(context) {if (it) {Log.i("TAG","已打开")} else {Log.i("TAG","未打开")context.gotoBleShareSettings()} }/*** 是否打开蓝牙网络共享**…

idea中取消class文件显示所有方法的显示

一 idea中class文件取消显示方法 1.1 取消显示方法 1.显示如下 2.操作如下 3.显示如下

2023年中国固废处理行业研究报告

第一章 行业概况 1.1 定义 固体废物处理是一个日益重要的领域,随着中国城市化进程的加速和工业产值的持续增长,固体废物的产生量也在不断上升。根据《固体废物污染环境防治法》的定义,固体废物包括了人类在生产、生活和其他活动中产生的固态…

基于单目的光流法测速

目录 1.简介 2.代码实现 1.简介 基于单目的光流法是一种常见的计算机视觉技术,用于估计图像序列中物体的运动速度。它通过分析连续帧之间的像素变化来推断物体在图像中的移动情况。 背景: 光流法是计算机视觉领域中最早的运动估计方法之一&#xff0c…

BUUCTF 金三 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 只有一个附件,下载下来有一张GIF图片。 解题思路: 本题一共有2种解法(本人找到的) 方法一: 1、打开这张GIF图片,观察到不正常闪动,似…

《YOLO医学影像检测》专栏介绍 CSDN独家改进实战

💡💡💡YOLO医学影像检测:http://t.csdnimg.cn/N4zBP ✨✨✨实战医学影像检测项目,通过创新点验证涨点可行性; ✨✨✨入门医学影像检测到创新,不断打怪进阶; 1.血细胞检测介绍 数据…

数据结构 - 2(顺序表10000字详解)

一:List 1.1 什么是List 在集合框架中,List是一个接口,继承自Collection。 Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示: Iterable也是一个接口,Iterabl…

security+JWT

securityJWT 添加依赖准备工作sqlUserInfoUserMapperUserService、UserServiceImpl 创建JwtUtils工具类,做token的生成和校验进入Security创建AccountDetailsServiceImpl,并且实现UserDetailsService编写登录操作 创建拦截器JWTAuthenticationFilter继承…

mac电影特效合成软件nuke15 完美激活版下载

Nuke 15是一款由英国The Foundry公司开发的专业的合成软件,被广泛用于电影、电视和广告制作中的后期合成和特效制作。 Mac软件下载:nuke15 完美激活版下载 Win软件下载:NUKE 13 中文激活版 Nuke 15拥有强大的功能和灵活性,可以帮助…

TartanVO: A Generalizable Learning-based VO 服务器复现(rtx3090 py3)

源码地址 代码地址:https://github.com/castacks/tartanvo/tree/python3 配环境 git clone https://github.com/castacks/tartanvo.git -b python3创建conda环境: conda create -n tartanvo python3.8安装pytorch conda install pytorch1.10.1 torc…

路由router

什么是路由? 一个路由就是一组映射关系(key - value)key 为路径,value 可能是 function 或 component 2、安装\引入\基础使用 只有vue-router3,才能应用于vue2;vue-router4可以应用于vue3中 这里我们安装vue-router3…

elementUI el-table+树形结构子节点选中后没有打勾?(element版本问题 已解决)

问题 1.不勾选父级CB111,直接去勾选子级(ST2001…),子级选中后没有打勾显示 排查 一直以为是这个树形结构和表格不兼容产生的问题,到后来看官方demo都是可以勾选的,最后排查到了版本问题, 项…

电动滑板车UL2272认证测试项目和标准

平衡车ul2272认证标准于2016年2月正式公布,美国消费品安全协会(cpsc)宣布,所有平衡车(包括扭扭车)的制造商、进口商、经销商,其在美国本土生产、进口、销售的平衡车必须符合新的安全标准,包括ul2272平衡车电路系统认证标准。另外&…

flutter开发入门,windows环境安装,耗时一天解决各种bug,终于成功

首先说明要安装的环境:java8必须,android studio,chrome是开发安卓和web是必须的 java8的下载地址:https://www.java.com/en/download/、 java8蓝奏云下载地址:jre-8u381-windows-x64.exe - 蓝奏云 flutter国内环境…

lvgl 界面管理器

lv_scr_mgr lvgl 界面管理器 适配 lvgl 8.3 降低界面之间的耦合使用较小的内存,界面切换后会自动释放内存内存泄漏检测 使用方法 在lv_scr_mgr_port.h 中创建一个枚举,用于界面ID为每个界面创建一个页面管理器句柄将界面句柄添加到 lv_scr_mgr_por…

C++11新特性(lambda,可变参数模板,包装器,bind)

lambda表达式是什么?包装器又是什么?有什么作用?莫急,此篇文章将详细带你探讨它们的作用。很多同学在学习时害怕这些东西,其实都是方便使用的工具,很多情况下我们学这些新的东西觉得麻烦,累赘&a…

自学嵌入式多久才可以达到找工作的水平

自学嵌入式多久才可以达到找工作的水平 时间以及达到嵌入式工作水平所需的具体努力因人而异。但一般而言,自学嵌入式系统开发需要时间和毅力。以下是一些关键因素,影响着您能够在多久内达到找工作的水平:最近很多小伙伴找我,说想要…

YOLOv4 论文总结

贡献: 1.有效且强大的模型,常规GPU(1080ti or 2080ti)可得到实时、高质量的检测结果。 2.在训练中,验证 Bag-of-Freebies 和 Bag-of-Specials 方法 3.提出了两种数据增强手段,马赛克和自对抗训练&#x…