大数据-计算框架选型与对比

news2024/9/23 13:27:28

计算框架选型与对比

  • 一、大数据平台
  • 二、计算框架分类
    • 1.批处理架构
    • 2.实时流处理架构
    • 3.流批一体处理架构
  • 三、计算框架关键指标
    • 1.处理模式
    • 2.可伸缩性
    • 3.消息传递
      • 3.1 至少一次(at least once)
      • 3.2 至多一次(ai most once)
      • 3.3 恰好一次(exactly once)
    • 4.中间结果存储
    • 5.迭代计算
    • 6.吞吐量
    • 7.容错
    • 8.状态管理
  • 四、计算框架对比
  • 总结
    • 参考链接

一、大数据平台

针对大数据的应用每个企业都有自己特定的需求和情况,所以都需要针对需求成本技术等搭建自己的大数据平台。大数据平台是一个对海量数据从采集、存储、计算、应用、管理、运维的多方位、多维度的组合研究设计,从而建设合理高效满足企业需求的大数据平台架构。

二、计算框架分类

为了应对数据量的激增、分析需求时效性的要求,计算框架逐步从早期的批处理转变到现在的实时流处理的转变,按照对数据处理方式计算框架可以分类如下:

1.批处理架构

批处理指的是将数据按照批次进行收集、存储和处理分析。批处理是一种离线数据处理方式、数据被收集完毕后才会进行处理,因此需要等待一段时间。早期大数据平台基本都是采用批处理对数据进行计算。Apache Hadoop就是一个批处理框架,包括存储组件HDFS和计算组件MapReduce。
优点:

  • 适用于离线数据处理,特别是对历史数据进行分析和挖掘 (例如日志数据、数据库数据等)
  • 高吞吐量、能够处理大规模数据、适合大数据分析
  • 处理的数据规模比较大,通常数百万或数千万条数据

缺点:

  • 不能实现实时分析,数据处理延时比较高
  • 不适合低延迟场景

2.实时流处理架构

实时流处理就是数据生产之后立刻进行处理,数据以流的形式产生后即可进行处理和分析,可以实现更低的延迟和更高的即可性。实时流是一种在线数据处理方式,Apache Storm和Apache Samza是实时流处理架构。
优点:

  • 实时性更强
  • 低延迟、适合一些即时场景(例如金融交易、物联网等)
  • 一般是实时小规模数据流

缺点:

  • 针对离线数据处理吞吐量低于批处理
  • 可能无法支持复杂逻辑处理

3.流批一体处理架构

随着需求发展,大数据需要提供更全面的数据处理能力,也就是需要同时支持批处理和实时处理。所以一个架构将批处理和流处理结合成为一种趋势,将实时流数据存储下来,然后在批量任务中进行深入分析和挖掘。Apache Spark和Apache Flink是典型的流批一体处理架构。
优点:

  • 可以充分发挥批处理和实时处理的优势,满足不同的业务需求。
  • 可以减少实时流处理的压力,将部分处理转移到批处理中进行。

缺点:

  • 增加了系统复杂性,需要同时维护批处理和实时处理组件
  • 数据一致性需要特别关注

三、计算框架关键指标

计算框架在对大数据处理过程中会遇到一些普遍存在和框架需要处理的问题,所以计算框架支持的功能和解决一些问题的处理方式可以看作关键指标和对比维度。主要维度如下:

1.处理模式

处理模式是指计算框架对批处理和实时处理支持与否。

2.可伸缩性

可伸缩性是指系统通过增加资源来应对不断增加的负载的能力。由于大数据本地就存在负载不均衡或者不连续的情况,所以是大数据架构的基本指标。现有的大数据框架基本都是通过水平拓展来应对负载的增加。

3.消息传递

针对在处理过程中如果出现异常,每个框架对消息如何处理并不相同。按照处理类型分为

3.1 至少一次(at least once)

意味着会很多次尝试对消息进行处理,并且至少处理成功一次。可能导致最终的处理结果中数据重复的情况。

3.2 至多一次(ai most once)

意味只会一次尝试对消息进行处理,也就是最多成功一次。可能导致最终处理结果中数据缺失的情况

3.3 恰好一次(exactly once)

意味着该消息不会被重复处理,也不会不进行处理,只会被精确的处理一次。这种情况最终的处理结果中数据是精准的。

4.中间结果存储

计算过程中中间的结果存储介质,如果保存到磁盘、则计算速度慢、但是对内存需求会比较低;如果保存到内存、则计算速度快、但是需要较大的内存支持。

5.迭代计算

迭代计算是指迭代方法的实现,该迭代方法在没有实际解的情况下或在实际解的成本过高的情况下估计近似解

6.吞吐量

7.容错

分布式系统中,包含任务故障、节点故障、网络故障等,框架应该能够恢复,并且应该从它离线的位置再次开始处理,一般通过不时地检查流式传输到某个持久存储的状态来实现

8.状态管理

在状态处理要求的情况下,我们需要维护某些状态(例如记录中看到的每个不同单词的计数),框架应该能够提供一些机制来保存和更新状态信息。

四、计算框架对比

在这里插入图片描述

总结

以上对大数据平台组成、计算框架需要提供哪些功能、常用计算框架对比。

参考链接

1.大数据处理平台的架构演进:从批处理到实时流处理

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

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

相关文章

交叉编译安装时报错 ./install.sh: 15: ./install.sh: Bad substitution

报错信息截图如下: 解决方法 vim install.sh #!/bin/sh -e 修改为 !/bin/bash -e重新执行 sudo ./install.sh 成功运行

Leetcode算法系列| 1. 两数之和(四种解法)

目录 1.题目2.题解解法一:暴力枚举解法二:哈希表解法解法三:双指针(有序状态)解法四:二分查找(有序状态) 1.题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数…

Endnote软件添加期刊引用格式

在下述网址中,找到你想要添加的期刊,下载引用格式文件(后缀为.ens格式) https://endnote.com/downloads/styles/?wpv_post_searchInformationfusion&wpv_aux_current_post_id12829&wpv_view_count12764-TCPID12829 下载…

C语言——从键盘输人一个表示年份的整数,判断该年份是否为闰年,并显示判断结果。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int year 0;printf("请输入年份&#xff1a;");scanf("%d",&year);if((year%4 0) && (year%100!0) || (year%400 0)){printf("%d是闰年\n",year);}else{p…

人工标签不准确的一种解决方案:PCA降维可视化筛选正样本

背景 在实际的业务场景里&#xff0c;用会话文本构建模型&#xff08;机器学习/深度学习&#xff09;来做意图分类之类的任务时&#xff0c;经常会出现人工打标不够准确的问题&#xff0c;标签都不准确的话模型当然无法学习到有效信息了。这个问题真的非常头疼…除了与业务沟通…

【CCF-PTA】第03届Scratch第03题 -- 参观食品厂

参观食品厂 【题目描述】 光明小学定期组织学生参与社会实践&#xff0c;最近的活动主题是参观自动化食品厂。小明看到生产线可以自动筛选罐头重量是否合格&#xff0c;感到十分好奇。回来后&#xff0c;小明准备写一个模拟程序&#xff0c;输入10盒罐头的重量&#xff0c;程…

openGauss学习笔记-131 openGauss 数据库运维-启停openGauss

文章目录 openGauss学习笔记-131 openGauss 数据库运维-启停openGauss131.1 启动openGauss131.2 停止openGauss131.3 示例131.3.1 启动openGauss131.3.2 停止openGauss 131.4 错误排查 openGauss学习笔记-131 openGauss 数据库运维-启停openGauss 131.1 启动openGauss 以操作系…

前端 vue 面试题(二)

文章目录 如何让vue页面重新渲染组件间通信vue为什么要mutation、 action操作插槽、具名插槽、作用域插槽vue编译使用的是什么库&#xff1f;vue怎么实现treeshakingwebpack实现treeshaking为什么只有es module 能支持 tree shaking mixin 的作用mixin的底层原理nexTick原理vue…

python -opencv 图像锐化

python -opencv 图像锐化 图像锐化其实&#xff0c;是一种增强图片对比度的技术&#xff0c;我们可以通过计算图像的导数&#xff0c;把导数绝对值数值大于零的数值加回原图像&#xff0c;通过这种方法&#xff0c;可以增强图像的对比度。 实现代码如下&#xff1a; import c…

Django之中间件与CSRF_TOKEN

文章目录 一、什么是中间件二、中间件有什么用三、Django自定义中间件中间件中主要方法及作用创建自定义中间件的步骤&#xff1a;process_request与process_response方法process_view方法process_exceptionprocess_template_response&#xff08;不常用&#xff09; 四、CSRF_…

Django DRF序列化器serializer

以下案例由浅到深&#xff0c;逐步深入&#xff0c;通过实例介绍了序列化器的使用方法&#xff0c;和遇到的常见问题的解决方法。 一、序列化器serializers.Serializer 1、urls.py urlpatterns [path("api/<str:version>/depart/",views.DepartView.as_vie…

找论文找论文

这里写目录标题 找到的&#xff0c;待筛选识别检测 OCR综述&#xff0c;经典论文综述OCR识别OCR检测端到端文本识别问题集怎么看一篇论文有没有代码怎么直接找比如某一年的CVPR关于OCR方面的最新论文拿到一篇论文&#xff0c;根据论文名字怎么检索到期刊和发表日期 功能技巧找顶…

geoserver发布tif矢量数据图层

cesium加载上传至geoserver的tif矢量数据_cesium加载tiff-CSDN博客 geoserver安装及跨域问题解决方案&#xff1a;geoserver安装及跨域问题解决方案_geoserver 跨域_1 1王的博客-CSDN博客 将TIF上传至geoserver 启动geoserver服务&#xff0c;并进入geoserver主页。 1. 新建…

内建组件和模块

讨论 Vue.js 中几个非常重要的内建组件和模块&#xff0c;例如 KeepAlive 组件、Teleport 组件、Transition 组件等&#xff0c;它们都需要渲染器级别的底层支持。另外&#xff0c;这些内建组件所带来的能力&#xff0c;对开发者而言非常重要且实用&#xff0c;理解它们的工作原…

windows版本的grafana如何离线安装插件

本文以安装clickhouse的插件为例&#xff0c;记录下如何离线安装插件 1 下载插件 ClickHouse plugin for Grafana | Grafana Labs 2 找到grafana的配置文件 打开编辑&#xff0c;搜索plugin关键字&#xff0c;修改plugin的加载目录 目录不存在&#xff0c;手动创建&#xff0…

TableStructureRec: 表格结构识别推理库来了

目录 引言lineless_table_rec: 无线表格识别库安装使用结果 wired_table_rec&#xff1a;有线表格识别库安装使用结果 写在最后 引言 TableStructureRec 仓库是用来对文档中表格做结构化识别的推理库&#xff0c;包括来自 PaddleOCR 的表格结构识别算法模型、来自阿里读光有线…

创建maven的web项目

&#xff08;一&#xff09;创建maven的web项目 Step1、创建一个普通的maven项目 &#xff08;1&#xff09;新建一个empty project&#xff0c;命名为SSM2。 点击项目名&#xff0c;右键new&#xff0c;选择Module&#xff0c;左侧选择“Maven archetype”&#xff0c;可以给…

gmapping仿真

文章目录 获取源码安装依赖项编译简单场景运行gmapping开启键盘控制通过launch文件来启动gmappingGmapping建图的参数设置地图的保存和加载参考 获取源码 cd ~/catkin_ws/src/ git clone https://gitcode.com/weixin_42990464/wpr_simulation.git git clone https://gitcode.c…

Action!录屏工具免费完整版,录屏软件,打开即可解锁最新完整可用版本,支持GPU加速HDR视频录制和播放

一、软件简介 本次带来的录屏工具已升级为【完整版本】&#xff0c;所有功能全部可用。该录屏工具支持GPU硬件加速&#xff0c;可以智能识别主流硬件设备&#xff0c;支持通过GPU进行HDR视频录制和播放进行。视频录制帧率最高支持360FPS&#xff0c;直播视频帧率最高支持60FPS…

Thread类常用成员方法

点击链接返回标题-> Java线程的学习-CSDN博客 目录 前言 有关线程名字的成员方法&#xff1a; String getName() void setName(String name) Thread(String name) 获取线程对象的成员方法&#xff1a; static Thread currentThread() 让线程睡眠的成员方法&#xff1…