写点什么

Apache Tez—对 MapReduce 数据处理的归纳

2013 年 9 月 23 日

最近的一篇InfoQ 文章中曾讨论过,Hortonworks 新的 Stinger Initiative 非常依赖 Tez ——一个全新 Hadoop 数据处理框架。

博客文章 Apache Tez:Hadoop 数据处理的新篇章中写道:

“诸如 Hive 和 Pig 等更高级别的数据处理应用,需要这样的一个执行框架:该框架能够用有效的方式,表达这些应用的复杂的查询逻辑,并且在执行查询时能够保证高性能。Apache Tez……给出了传统 MapReduce 的一种替代方案,让任务能够满足对快速响应时间和 PB 量级的极端吞吐量的需求。”

为了实现这一目标,Tez 并没有将数据处理按照单任务建模,而是作为一种数据流图来处理:

……图中的顶点表示应用逻辑,而边则表示数据转移。丰富的数据流定义 API,让用户能够用直观的方式表达复杂的查询逻辑。对于更高级别的声明式应用程序(如 Hive 和 Pig)所生成的查询计划来说,这简直是一种天作之合……数据流管道可以被表示为单一的 Tez 任务,它会运行整个计算。而 Tez 负责将这个逻辑图扩展为任务的物理图,并执行它。

在 Tez 的顶点上,特定的用户逻辑以输入、处理器和输出模块的形式建模,输入和输出模块定义了输入和输出数据(包括格式、访问方法和位置),而处理器模块定义了数据转换逻辑——它可以用 MapReduce 任务或 Reducer 的形式表示。虽然 Tez 并不明确地强制要求任何数据格式的限制,但它需要输入、输出和处理器能够互相兼容。类似地,由一条边连接的输入 / 输出对,在格式 / 位置上必须是兼容的。

博客文章 Apache Tez 中的数据处理 API ,描绘了一套简单的 Java API,用于表示数据处理的 DAG(有向无环图)。该 API 包含三部分:

  • DAG定义了全体任务。用户为每个数据处理任务创建 DAG 对象。
  • Vertex定义了用户逻辑,以及执行该用户逻辑所需的资源与环境。用户为任务中的每一步创建 Vertex 对象,并将其添加到 DAG。
  • Edge定义了生产者和消费者顶点之间的链接。用户创建 Edge 对象,用来连接生产者和消费者顶点。

Tez 所定义的边属性,使其能够将用户任务实例化、配置其输入输出、恰当地调度它们,并定义任务之间的数据如何路由。Tez 还支持通过指定用户指南、数据大小和资源,为每个顶点的执行定义其并发机制。

  • 数据转移:定义了任务之间数据的路由选择。
    • 一对一:数据从第 i 个生产者任务路由到第 i 个消费者任务。
    • 广播:数据从一个生产者任务路由到所有消费者任务。
    • 散列:生产者任务以碎片的形式散播数据,而消费者任务收集碎片。来自各个生产者任务的第 i 块碎片,都会路由到第 i 个消费者任务。
  • 调度:定义了一个消费者任务何时被设定为以下内容。
    • 顺序的:消费者任务被安排在某个生产者任务完成之后。
    • 并发的:消费者任务必须与某个生产者任务同时执行。
  • 数据源:将某个任务输出的生命周期 / 可靠性定义为如下内容。
    • 持续的:在任务推出后,输入将依旧可用——它或许在之后被丢弃。
    • 持久可靠:输入将被可靠地存储,而且将永远可用。
    • 短暂的:输出仅在生产者任务运行过程中可用,

有关 Tez 架构的更多细节,请参阅 Tez 设计文档

用数据流来表现数据处理的理念并不算新鲜——这正是 Cascading 的基础,而且许多使用 Oozie 的应用也实现了这一目的。相比之下,Tez 的优势在于,将这一切都放在了一个单一的框架中,并针对资源管理(基于 Apache Hadoop YARN )、数据传输和执行,对该框架进行了优化。此外,Tez 的设计还提供了对可热插拔的顶点管理模块的支持,用来收集来自任务的相关信息,并在运行时改变数据流图,从而为了性能和资源使用进行优化。

查看英文原文: Apache Tez - a Generalization of the MapReduce Data Processing

2013 年 9 月 23 日 07:543476
用户头像

发布了 256 篇内容, 共 50.5 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

PromiseKit 源码阅读

四十个鹏城春夏,一场数字繁花

脑极体

如何识别刷屏文章中的伪科学

Lee Chen

随笔杂谈 前端进阶训练营

2. 妈呀,Jackson原来是这样写JSON的

YourBatman

Java json Jackson Fastjson

B站新一代golang规则引擎的设计与实现

calo

golang B站 高并发 AST 规则引擎

Redis系列(六):你说要看Redis线程模型?安排

z小赵

redis 高并发

POI内存溢出故障排查

Season

JVM POI jvm调优

信创舆情一线--两部门发文加强对数字货币等新型权益的保护

统小信uos

最高法主张加强数字货币产权保护有法可依

CECBC区块链专委会

数字货币 法偿货币 中国人民银行 虚拟财产

架构师训练营第八周学习总结

张明森

高能预警!Apache Flink Meetup · 上海站返场啦

Apache Flink

flink

JVM系列之:对象的锁状态和同步

程序那些事

JVM GC 同步

Demo 示例:如何原生的在 K8s 上运行 Flink?

Apache Flink

flink

我的 20 条工作原则

泰稳@极客邦科技

成长 知识管理 职场成长

性能优化

独孤魂

【区块链+通证经济】从量变到质变区块链发展的下一阶段是什么?

CECBC区块链专委会

数字货币 防篡改 通证

除了技术,加密货币开发者更应关注可使用性

CECBC区块链专委会

加密货币 用户为本 可使用性 容错机制

LeetCode001-两数之和-easy

书旅

算法 LeetCode 数据结构与算法

第7周作业

文古

【架构训练 Week07 作业】

Rex

读《我们为什么要去火星》随笔

Jackchang234987

产品 人生 读书 随笔杂谈

压测工具试验

独孤魂

OAM 深入解读:如何基于 OAM Runtime 编写一个扩展 Trait?

钱王骞

云原生 k8s OAM

架构师训练营第八周笔记

Melo

腾讯面试题: 百度搜索为什么那么快?

小松漫步

面试

敏捷软件开发宣言及十二原则

BigYoung

敏捷开发

Docker网络学习第四篇-Namespace通信实战

Lazy

Docker Linux 网络

22种超全用户触点采集,易观方舟SDK又更新了

易观大数据

LeetCode题解:1. 两数之和,JavaScript,双循环暴力解法,详细注释

Lee Chen

LeetCode 前端进阶训练营

脑洞:基于Enterprise Continuum证明DDD用于构建汽车的可行性

Winfield

企业架构 领域驱动设计 DDD 架构演进

关于中台,可能都是正确的废话

fino星君

中台 业务中台

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

Apache Tez—对MapReduce数据处理的归纳-InfoQ