浅尝批处理系统

简介:

背景

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结构改进措施提升执行效率
相关文章
|
2天前
高性能并行编程与优化 | 第02讲回家作业
本文是关于高性能并行编程与优化课程的第二讲回家作业,包括作业要求、初始运行结果、抄的答案以及改进后的运行结果。作业内容涉及对双链表类`List`的修改,要求避免不必要的拷贝、修复智能指针问题、实现深拷贝构造函数、解释为什么可以删除拷贝赋值函数以及改进`Node`的构造函数。同时,还提供了如何提交作业、设置https代理的链接以及评分规则。
高性能并行编程与优化 | 第02讲回家作业
|
1天前
|
算法 编译器
高性能并行编程与优化 | 第04讲回家作业
本文是关于高性能并行编程与优化课程的第四讲回家作业,包括作业要求、原始代码运行结果、优秀的代码答案以及优化后的运行结果和解析。作业目标是利用所学知识优化多体引力求解器的代码,要求不能使用多线程并行和算法复杂度优化,但可以通过编译器和平台优化来提升性能。
高性能并行编程与优化 | 第04讲回家作业
|
2天前
|
C++
高性能并行编程与优化 | 第01讲回家作业
本文是关于高性能并行编程与优化的回家作业,涉及CMake错误解决、编译问题处理、代码和编译结果分享、使用方法说明以及躺坑记录。
高性能并行编程与优化 | 第01讲回家作业
|
2天前
高性能并行编程与优化 | 第03讲回家作业
本文是关于高性能并行编程与优化课程的第三讲回家作业,包括题目要求、代码答案抄写以及成功运行的截图。
高性能并行编程与优化 | 第03讲回家作业
|
2月前
|
Java UED 开发者
揭开Java性能提升之谜:异步编程如何让你的应用响应速度飞升?
【8月更文挑战第30天】随着互联网技术的发展,系统性能和用户体验成为关注焦点,异步编程因其能提高应用响应速度和吞吐量而在Java领域广泛应用。本文将详细阐述Java异步编程的概念与优势,并通过实战示例展示其在实际项目中的应用,如使用`Future`、`Callable`及`CompletableFuture`等接口和类实现异步操作,帮助开发者更好地理解和运用这一技术,以提升程序性能和用户体验。
20 0
|
5月前
|
编解码 安全 定位技术
典型崩溃问题集锦
典型崩溃问题集锦
43 0
|
5月前
|
缓存 Rust 安全
rcore 笔记 批处理系统 邓氏鱼(一)
rcore 笔记 批处理系统 邓氏鱼
116 0
|
5月前
|
Rust 数据处理
rcore 笔记 批处理系统 邓氏鱼(三)
rcore 笔记 批处理系统 邓氏鱼
84 0
|
5月前
|
存储 缓存 Rust
rcore 笔记 批处理系统 邓氏鱼(二)
rcore 笔记 批处理系统 邓氏鱼
63 0
|
自动驾驶 机器人 流计算
什么是计算机领域的实时系统
什么是计算机领域的实时系统