1理想的大数据处理框架设计

news2024/12/26 3:11:56

以下内容基于极客 蔡元楠老师的《大规模数据处理实战》做的笔记哈。感兴趣的去极客看蔡老师的课程即可。

MapReduce 缺点

高昂的维护成本

因为mapreduce模型只有map和reduce两个步骤。所以在处理复杂的架构的时候,需要协调多个map任务和多个reduce任务。

例如计算活跃在街头的美团外卖电动车数量,其中一个工作是处理所有美团外卖电动车。

这个工作可以划分三部分:数据采集、数据质量控制、数据处理。

而其中的

数据采集又可以划分:1、数据导入:众包公司把拍的照片上传服务器或网盘,然后下载到你的存储系统 。2、数据统一化:不同外包公司的照片格式可能不一样 3、数据压缩:减少数据存储成本 4、数据备份:冗余降低风险。

数据质量控制可划分:1、数据时间有效性2、照片对焦检测

数据处理可以划分:1、数据标注问题上传:让你的标注者开始工作 。2、标注结果下载 3、标注异议处理 4、标注结果结构化。

这里不谈技术处理,观点意在阐述:真正的mapreduce场景都是复杂的,很多场景都是拥有多个子任务的,在应用场景中,每个任务都有可能出错,需要重试和异常处理的机制。所以维护起来成本很高。

配置复杂,时间性能低

谷歌些年做了一个测试,处理1pb数据,他们用了五年时间将一开始的处理时间12小时优化成了0.5小时,而大部分时间主要是优化mapreduce配置上。就算如此,mapreduce处理的结果也低于用户所期待。

设计思想:通用技术抽象模型让多步骤处理易于维护

举个例子,例如炒鸡蛋,用有向无环图表示这个问题的话,可以表示为如下:

这里如果用mapreduce来实现的话,这个图中的每一个箭头都是一个独立的mapper和ruducer。同时为了协调这么多的mapper和reducer,又得做很多次的检查,检查上一个mr是否有错误,复杂的依赖关系会导致整个系统非常复杂。

这时候如果用有向图建模,那么图中的每一个节点都可以被抽象的表达成一种通用的数据集,每一条边都被表达通用的一个数据变换操作。如此用数据集和数据变换来描述复杂的数据处理流程,其依赖关系就不会那么复杂了。

设计思想:系统最好可以自动进行性能优化

mapreduce其中一个缺点就是配置太复杂。那么如果优化呢?那就尽量让人少做一点,机器多做一点(机器不容易犯错)。

例如上面的例子,在番茄炒蛋需求上多加了番茄炒牛肉。

那么有向无环图表示为:

有图可见,两个需求中有一个通用的步骤,就算洗、切番茄。在理想的情况下,我们希望计算引擎可以自动发现两个需求中重复的数据处理流程,希望可以将其合并。

同样的,如果需求减少,不需要番茄炒蛋了,那么我们也希望计算引擎可以把鸡蛋处理流程等无关的数据操作优化去除。

另外一种自动的优化是计算资源的自动弹性分配。

例如洗番茄,今天需求洗100个番茄,明天需求洗1000个番茄,如果是手动配置资源,是很慢的。我们理想的系统是希望其能自动分配资源。

以上两个粗糙的例子是想阐述:我们希望数据处理系统能拥有自动优化步骤和分配资源的能力。

设计思想:把数据处理的描述语言和背后的计算引擎解耦分离

前两个设计思想中有一个很重要的设计,就是有向图。

在以上两个数据处理设计中,数据处理描述语言部分是可以和计算引擎分离的,而有向图则作为数据处理描述语言和计算引擎的中间连接协议。

例如tensorFlow,客户端可以用任何语言(例如c,python)描述,运行的时候,引擎runtime可以在任何地方运行,例如本地、cpu、tpu。

设计思想:需要统一处理批数据和流数据的编程模型

真正的业务系统通常的是流数据与批数据混合共生的。所以不管是流处理还是批处理,最好都要用统一的数据结构表示。编程api也要统一。

设计思想:需要在架构层面提供异常处理和数据监控能力

系统中最难处理的不是开发系统,而且异常处理。所以我们希望能设计出:一套拥有基本的数据监控能力的系统,能对数据处理的每一步提供自动的监控平台,比如ui网站。

小结

综上所述,我们需求的一个大数据处理框架基本模型图如下:

目前最接近这个思想的大数据处理框架应该是Spark和Flink。

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

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

相关文章

C#开发的OpenRA的扩展方法

C#开发的OpenRA的扩展方法 在我们以往的开发方法认知里, 对一个类进行扩展方法,只有继父类,然后在子类里创建新的内容。 但是C#又给我们上了一课,它不但可以采用前面的方法, 而且可以对类没有进行继承,也能扩展类型的方法。 这种方式,对于没有进行学习之前,看到代码就是…

Allegro更改线段,丝印,走线,形状,铜箔到不同层的方法

更改线段到不同的Class和Subclass的方法下面以更改线段为例进行讲解1、原先线段在Board Geometry→Soldermask_Top层2、选中线段,鼠标右击选择→Change class/subclass更改到所想要的Class和Subclass3、更改后的线段到Package Geometry→Silkscreen_Top层更改丝印&a…

详解shell中的运算符

目录 前言 一、运算指令 二、运算符号 练习 总结 前言 上一篇文章我们着重学习了 ,shell中的执行流控制,本章我很学习和执行流控制相结合使用的运算符号与运算指令。 一、运算指令 计算的三种方式 (()) ##((a12)) let …

51单片机——74HC595的应用(SPI实践)

目录 SPI总线 SPI总线概述 SPI总线分类 SPI 优点及缺点 SPI接口硬件原理 SPI四种工作模式 74HC595应用 74HC595芯片概述 74HC595封装及管脚功能 74HC595工作原理 ​编辑 74HC595串行转并行点亮LED灯 程序实现 Proteus运行结构示意图 SPI总线 SPI总线概述 SPI&#…

【FiddlerScript】利用Fiddler中的FiddlerScript解除7K7K小游戏的防沉迷

本文仅供技术探讨,切勿用于非法用途案例网站:http://www.7k7k.com/准备的工具:配置好的Fiddler一个Fiddler官方英文版配置教程:https://www.bilibili.com/video/BV1rP4y1t7ZLFiddler中文版配重教程:https://www.bilibili.com/video/BV1CP4y1t7DR开始教程来到Fiddler…

10 个最难理解的 Python 概念

文章目录技术提升面向对象编程 (OOP)装饰器生成器多线程异常处理正则表达式异步/等待函数式编程元编程网络编程大家好,与其他编程语言相比,Python 是一门相对简单的编程语言,如果你想真正学透这门语言,其实可能并不容易。 今天我…

彻底弄懂HTTP缓存机制及原理(二)

强制缓存 从上文我们得知,强制缓存,在缓存数据未失效的情况下,可以直接使用缓存数据,那么浏览器是如何判断缓存数据是否失效呢? 我们知道,在没有缓存数据的时候,浏览器向服务器请求数据时&…

Linux(十一)生产者与消费者模型

引言 一、实现一个网关来过滤流经网关的数据 二、农忙时节收割麦子 生产者与消费者模型 模型实现 完整源码: 引言 阐述这个模型之前先引入俩个例子: 一、实现一个网关来过滤流经网关的数据 网关会捕捉大量的数据然后进行分析处理,之后…

VHDL语言基础-状态机设计-时序电路与状态机的关系

目录 时序电路的概念: 下面以一个简单的三位计数器为例,说明时序电路的结构: 三位计数器的结构: 次态逻辑关系的推导;画出卡诺图如下: 电路图: 时序电路与状态机的关系: 状态机…

PyTorch学习笔记:nn.Tanh——Tanh激活函数

PyTorch学习笔记:nn.Tanh——Tanh激活函数 torch.nn.Tanh()功能:逐元素应用Tanh函数(双曲正切)对数据进行激活,将元素调整到区间(-1,1)内 函数方程: Tanh(x)tanh(x)ex−e−xexe−x\text{Tanh}(x)\text{ta…

每天10个前端小知识 【Day 11】

前端面试基础知识题 1. 浏览器的垃圾回收机制有哪些? JS会在创建变量时自动分配内存,在不使用的时候会自动周期性的释放内存,释放的过程就叫 “垃圾回收”。 一方面自动分配内存减轻了开发者的负担,开发者不用过多的去关注内存…

单链表--C语言版(从0开始,超详细解析,小白一看就会)

目录 一、前言 🍎 为什么要学习链表 💦顺序表有缺陷 💦 优化方案:链表 二、链表详解 🍐链表的概念 🍉链表的结构组成:节点 🍓链表节点的连接(逻辑结构与物理结构的区…

java spring注解方式 实现基本类型属性注入

之前 我们看了几个注入属性的注解 但他们都是注入对象类型的 那么 下面我们就看一个 给基本属性注入值的注解 value 我们直接代码快速演示一下 创建一个项目 然后引入 spring 所需要的依赖 然后在src下创建包 Bean 在 Bean目录下创建一个包 叫 UserData 然后在src下创建 bean…

leaflet 上传geojson文件,在地图上显示图形(示例代码053)

第053个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet示例中上传geojson文件,通过L.geojson解析,在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共97行)相关API参考:专栏目标…

微服务项目【mybatis-plus与微服务注册】

Mybatis与微服务注册 一、SpringBoot整合MybatisPlus 创建自动生成代码子模块 基于maven方式创建子模块zmall-generator&#xff0c;用于结合mybatis-plus生成代码。 在公共模块zmall-common中注释掉mybatis的依赖引入&#xff0c;改换成mybatis-plus依赖引入 <!-- myba…

【大数据Hadoop】Hadoop 3.x 新特性总览

Hadoop 3.x 新特性剖析系列11. 概述2. 内容2.1 JDK2.2 EC技术2.3 YARN的时间线V.2服务2.3.1 伸缩性2.3.2 可用性2.3.3 架构体系2.4 优化Hadoop Shell脚本2.5 重构Hadoop Client Jar包2.6 支持等待容器和分布式调度2.7 支持多个NameNode节点2.8 默认的服务端口被修改2.9 支持文件…

MAC Pro 安装 VS Code 配置 C/C++ 开发环境

目录 文章目录目录安装 VS Code配置 C/C 开发环境Hello World1、创建项目和源码2、编译运行3、调试C/C configuration安装 VS Code 下载安装包&#xff1a;https://code.visualstudio.com/Download解压并将文件放入 “应用程序"。 配置 C/C 开发环境 官方文档&#xff1…

linux 服务器线上问题故障排查

一 线上故障排查概述 1.1 概述 线上故障排查一般从cpu,磁盘,内存,网络这4个方面入手; 二 磁盘的排查 2.1 磁盘排查 1.使用 df -hl 命令来查看磁盘使用情况 2.从读写性能排查:iostat -d -k -x命令来进行分析 最后一列%util可以看到每块磁盘写入的程度,而rrqpm/s以及…

C语言 | 预处理知识详解 #预处理指令有哪些?他们如何使用?宏和函数有哪些区别?...#

文章目录前言预定义符号介绍预处理指令#define#define替换规则预处理指令 #undef宏和函数的对比宏和函数的对比图命名约定命令行定义条件编译预处理指令 #include嵌套文件包含其他预处理指令写在最后前言 上篇文章介绍了一个程序运行的 编译与链接 &#xff0c;其中编译阶段有个…

python+django在线教学网上授课系统vue

随着科技的进步&#xff0c;互联网已经开始慢慢渗透到我们的生活和学习中&#xff0c;并且在各个领域占据着越来越重要的部分&#xff0c;很多传统的行业都将面临着巨大的挑战&#xff0c;包括学习也不例外。现在学习竞争越来越激烈&#xff0c;人才的需求量越来越大&#xff0…