浅尝批处理系统

简介:

背景

Google发表了MapReduce计算范型及其框架的论文。MapReduce和并行数据库系统(MPP)各有优劣并且两者有一定的互补和学习。与传统MPP架构相比,MapReduce更适合非结构化数据的ETL处理类操作,并且可扩展性和容错性占优,但是单机处理效率较低。
DAG计算模型是MapReduce计算机制的一种扩展。MapReduce对于子任务之间复杂的交互和依赖关系缺乏表达能力,DAG计算模型可以表达复杂的并发任务之间的依赖关系。
Spark本质上是DAG批处理系统,其最能发挥特长的领域是迭代式机器学习。

MapReduce计算模型与架构

计算模型

MapReduce计算任务的输入是Key/Value数据对,输出也以Key/Value数据对方式表示。开发者要根据业务逻辑实现Map和Reduce两个接口函数内的具体操作内容,即可完成大规模数据的并行批处理任务。

实例一:单词统计

map(String key, String value):
    //key: 文档名
    //value: 文档内容
    for each word in value:
        Emit Intermedia(w, "1");

reduce(String key, Iterator values):
    //key: 单词
    //value: 出现次数列表
    int result = 0;
    for each v in values:
        result += ParseInt(v);//累加values值
    Emit(AsString(result));

实例二: 链表反转

map(String source_url, Iterator outlinks):
    //key: 网页url
    //value: 出链列表
    for each outlink o in outlinks:
        Emit Intermedia(o, source_url)

reduce(String target_url, Iterator source_urls):
    //key: target网页url
    //values: source网页url
    list result = [];
    for each v in source_urls:
        Result.append(v);
    Emit(AsString(result));

实例三: 页面点击统计

map(String tuple_id, String tuple):
    Emit Intermedia(url, "1");

reduce(String url, Iterator list_tuples):
    int result = 0;
    for each v in list_tuples:
        result += ParseInt(v);
    Emit(AsString(result));

系统架构

MapReduce计算框架架构

处理流程:

  1. MapReduce框架将应用的输入数据切分成M个模块,典型的数据块大小为64MB,然后可以启动位于集群中不同机器上若干程序。
  2. 全局唯一的主控Master以及若干个Worker,Master负责为Worker分配具体的Map任务或Reduce任务并做一些全局管理。
  3. Map任务的Worker读取对应的数据块内容,从数据块中解析一个个Key/Value记录数据并将其传给用户自定义的Map函数,Map函数输出的中间结果Key/Value数据在内存中缓存
  4. 缓存的Map函数产生的中间结果周期性写入磁盘,每个Map函数中间结果在写入磁盘前被分割函数切割成R份,R是Reduce个数。一般用key对R进行哈希取模。Map函数完成对应数据块处理后将R个临时文件位置通知Master,Master再转交给Reduce任务的Worker
  5. Reduce任务Worker接到通知时,通过RPC远程调用将Map产生的M份数据文件pull到本地。(只有所有Map函数完成,Reduce才能执行)。Reduce任务根据中间数据的Key对记录进行排序,相同key的记录聚合在一起
  6. Reduce任务Worker遍历有序数据,将同一个Key及其对应的多个Value传递给用户定义的Reduce函数,reduce函数执行业务逻辑后将结果追加到Reduce对应的结果文件末尾
  7. 所有Map、Reduce任务完成,Master唤醒用户应用程序

为了优化执行效率,MapReduce计算框架在Map阶段还可以执行Combiner操作。

hadoop的MapReduce运行机制基本与google的类似。
hadoop的MapReduce运行机制
不同的是,hadoop采用https协议来进行数据传输,并采用归并排序对中间结果进行排序。
Google的MapReduce框架支持细粒度的容错机制。Master周期性Ping各个Worker,如果Worker没有响应,则认为其已经发生故障。
如果Master故障则单点失效,重新提交任务。

MapReduce不足

  1. 无高层抽象数据操作语言
  2. 数据无Schema及索引
  3. 单节点效率低下
  4. 任务流描述方法单一

优势:

  1. 数据吞吐量高
  2. 支持海量数据处理的大规模并行处理
  3. 细粒度容错
    但是不适合对时效性高的应用场景,比如交互查询或流处理,也不适合迭代计算类的机器学习及数据挖掘类应用。

由于:

  1. 启动时间长
  2. 多处读写磁盘及网络传输

DAG计算模型

有向无环图的简称。在大数据处理领域,DAG计算模型是将计算任务在内部分解成若干子任务,这些子任务之间由逻辑关系或运行先后顺序等因素被构建成有向无环图结构。

DAG计算系统三层结构

  • 最上层是应用表达层,通过一定手段将计算任务分解成若干子任务形成的DAG结构
  • 最下层是物理机集群,由大量物理机器搭建的分布式计算环境
  • 中间层是DAG执行引擎层,将上层以特殊方式表达的DAG计算任务通过转换和映射,将其部署到下层的物理机集群中运行

Dryad

微软DAG计算系统,dryad在实现时以共享内存、TCP连接以及临时文件的方式进行数据传输

Dryad整体架构

Dryad整体架构

job manager负责将逻辑形式存在的DAG描述映射到物理机。NS负责维护集群中当前可以的机器资源。Daemon守护进程作为JM在计算节点上的代理,具体负责子任务的执行和监控。

FlumeJava和Tez

  • FlumeJava构建了java库,本质上是在MapReduce基础上的DAG计算系统,图中每个节点可以看作单个MapReduce子任务。
  • Tez使用Map任务或者Reduce任务作为DAG的图节点,图节点的有向边是数据传输通道。Tez消除Map阶段中间文件输出到磁盘过程以及引入Reduce-Reduce结构改进措施提升执行效率
相关文章
|
3月前
|
前端开发 测试技术 API
国产 API 管理工具大比拼:Apifox 能否挑战 Postman?
在软件开发中,API 测试与管理工具至关重要。Postman 虽广受欢迎,但在国内常面临下载慢、注册难、功能收费等问题。Apifox 作为国产优秀替代工具,凭借简洁的界面、多功能集成、本地化服务等优势,逐渐成为开发团队的新选择。它支持接口设计、文档生成、Mock 服务、自动化测试等功能,提升团队协作效率,降低使用门槛,助力国内开发者实现高效开发与持续集成。
|
9月前
|
算法 测试技术 Swift
Kimi开源Moonlight-16B-A3B:基于Muon优化器的高效大模型,性能与训练效率双突破!
Kimi开源Moonlight-16B-A3B:基于Muon优化器的高效大模型,性能与训练效率双突破!
268 5
|
存储 文件存储 数据安全/隐私保护
exFAT和NTFS的区别是什么
exFAT和NTFS的区别是什么
2779 9
|
数据可视化 安全 JavaScript
UI Lite for Python 可视化开发实战
HaaS Python的目标是帮助中小开发者聚焦业务,实现设备安全上云,加速设备创新迭代,真正做到“Python也可以轻松开发智能设备”。HaaS Python 轻应用在2022年终于开始支持ESP32的开发板了,解决了开发板向生成转换时的顾虑。Python轻应用通过LVGL 8.1整合 UI得到了提升。 UI Lite for Python以LVGL 8.1为基础进行打造,阿里云的官方文档提供了一个官方文档的链接。也提供了各种UI组件的展示,用代码进行 UI 设计让我们的同事非常头大。于是我找到了可视化的UI开发工具SquareLine Studio。
710 0
UI Lite for Python 可视化开发实战
|
传感器 芯片 开发者
一文看懂I2C协议
一文看懂I2C协议
874 0
一文看懂I2C协议
|
人工智能 自然语言处理 知识图谱
K-BERT | 基于知识图谱的语言表示模型
K-BERT | 基于知识图谱的语言表示模型
657 0
K-BERT | 基于知识图谱的语言表示模型
|
计算机视觉
初探单目相机测距——相机标定
初探单目相机测距——相机标定
1209 0
初探单目相机测距——相机标定
|
机器学习/深度学习 人工智能 自然语言处理
PAI年度巨献:在线推理加速优化,降低推理GPU所需资源
在线推理是抽象的算法模型触达具体的实际业务的最后一公里,在这个环节中,这些已经是大家共识的痛点和诉求: 1. 任何线上产品的用户体验都与服务的响应时长成反比,复杂的模型如何极致地压缩请求时延? 2. 模型推理通常是资源常驻型服务,如何通过提升服务单机性能从而增加QPS同时大幅降低资源成本? 3. 端-边-云是现在模型服务发展的必然趋势,如何让离线训练的模型“瘦身塑形”从而在更多设备上快速部署使用? 为了解决这些诉求,高性能在线推理优化框架PAI-Blade在公共云正式和大家见面了!
1593 0
PAI年度巨献:在线推理加速优化,降低推理GPU所需资源
|
Java Spring
剖析 | 详谈 SOFABoot 模块化原理
SOFABoot 是蚂蚁金服中间件团队开源的基于 Spring Boot 的一个开发框架,SOFABoot 从 2.4.0 版本开始支持基于 Spring 上下文隔离的模块化开发能力,SOFABoot 模块除了包括 Java 代码外,还会包含 Spring 配置文件,每个 SOFABoot 模块都是
1918 0