Hadoop Summit(幻灯片35)的演示讨论了DAG方法与MapReduce范例的最佳对比:
http://www.slideshare.net/Hadoop_Summit/murhty-saha-june26255pmroom212
基本上,它允许更高级别的工具(如Hive和Pig)在作业开始之前定义其整体处理步骤(也称为工作流程,也称为定向非循环图表)。 DAG是完成作业所需的所有步骤的图表(配置单元查询,Pig作业等)。因为可以在执行时间之前计算整个作业的步骤,所以系统可以利用“在内存中”缓存中间作业结果。而在MapReduce中,MapReduce阶段之间的所有中间数据都需要写入HDFS(磁盘)添加延迟。
YARN还允许Tez任务重用容器。例如。每个服务器被切成多个“容器”而不是“映射”或“减少”插槽。对于作业执行中的任何给定点,这允许Tez根据需要将整个群集用于地图阶段或减少阶段。在YARN之前的Hadoop v1中,映射槽(和减少槽)的数量在平台级别被固定/硬编码。更好地利用所有可用的群集资源通常会导致更快
与MR和TEZ的主要区别在于将中间数据写入MR中的本地磁盘。但是,在TEZ中,mapper / reducer功能将在内存中的每个容器上的单个实例中执行。此外,TEZ还执行诸如spark操作中的事务或操作之类的操作。
Tez是DAG(定向非循环图)架构。典型的Map reduce作业具有以下步骤:
从文件中读取数据 - >一次磁盘访问
运行映射器
写地图输出 - >第二次磁盘访问
运行shuffle并排序 - >读取地图输出,第三次磁盘访问
写shuffle和sort - >为reducer编写排序数据 - >第四个磁盘访问
运行读取已排序数据的reducer - >第五个磁盘输出
写减速器输出 - >第六次磁盘访问
Tez与Spark非常相似(Tez是由Hortonworks在Spark之前创建的):
执行计划但不需要从磁盘读取数据。
准备好进行一些计算(类似于spark中的操作)后,从磁盘获取数据并执行所有步骤并生成输出。
只有一个读和一个写。
请注意多次未转到磁盘引入的效率。中间结果存储在内存中(不写入磁盘)。最重要的是有矢量化(处理批处理行而不是一次一行)。所有这些都提高了查询时间的效率。
参考 http://www.slideshare.net/Hadoop_Summit/w-235phall1pandey https://community.hortonworks.com/questions/83394/difference-between-mr-and-tez.html
Apache Tez代表了传统MapReduce的替代方案,它允许作业满足快速响应时间和PB级别的极高吞吐量的需求。
像Hive和Pig这样的高级数据处理应用程序需要一个能够以高效的方式表达其复杂查询逻辑的执行框架,然后以Tez管理的高性能执行它。 Tez通过将数据处理建模不是作为单个作业而是作为数据流图来实现这一目标。
...图中的顶点表示应用程序逻辑和表示移动的边 数据的。丰富的数据流定义API允许用户在一个表达复杂的查询逻辑 直观的方式,它非常适合更高级别的查询计划 像Hive和Pig这样的声明性应用程序...... [数据流]管道可以表示为 一个Tez作业将运行整个计算。将此逻辑图扩展为 任务的物理图和执行它由Tez负责。
Apache Tez博客文章中的数据处理API描述了一个用于表示数据处理DAG的简单Java API。 API有三个组件
• 的 DAG 强> 。这定义了整体工作。用户为每个数据处理作业创建一个DAG对象。 • 的 顶点 强> 。这定义了用户逻辑和资源&执行用户逻辑所需的环境。用户为作业中的每个步骤创建一个Vertex对象,并将其添加到DAG。 • 的 边缘 强> 。这定义了生产者和消费者顶点之间的联系。用户创建Edge对象并使用它连接生产者和消费者顶点。
• 的 DAG 强> 。这定义了整体工作。用户为每个数据处理作业创建一个DAG对象。
• 的 顶点 强> 。这定义了用户逻辑和资源&执行用户逻辑所需的环境。用户为作业中的每个步骤创建一个Vertex对象,并将其添加到DAG。
• 的 边缘 强> 。这定义了生产者和消费者顶点之间的联系。用户创建Edge对象并使用它连接生产者和消费者顶点。
Tez定义的边缘属性使其能够实例化用户任务,配置其输入和输出,适当地安排它们并定义如何在任务之间路由数据。 Tez还允许通过指定用户指南,数据大小和资源来为每个顶点执行定义并行性。
的 数据移动 强> :定义任务之间的数据路由◦一对一:来自第i个生产者任务的数据路由到第i个消费者任务。 的 广播 强> :来自生产者任务的数据路由到所有使用者任务。 的 分散 - 集中 强> :生产者任务将数据分散到分片中,而消费者任务则收集分片。来自所有生产者任务的第i个分片路由到第i个消费者任务。 的 调度 强> 。定义何时安排消费者任务◦顺序:可在生产者任务完成后安排消费者任务。 的 同时 强> :消费者任务必须与生产者任务共同安排。 的 数据源 强> :定义任务输出的生命周期/可靠性◦持有:任务退出后输出将可用。输出可能会在以后丢失。 的 持续可靠 强> :输出可靠存储并始终可用 的 短暂的 强> :输出仅在生产者任务运行时可用。
的 数据移动 强> :定义任务之间的数据路由◦一对一:来自第i个生产者任务的数据路由到第i个消费者任务。
的 广播 强> :来自生产者任务的数据路由到所有使用者任务。
的 分散 - 集中 强> :生产者任务将数据分散到分片中,而消费者任务则收集分片。来自所有生产者任务的第i个分片路由到第i个消费者任务。
的 调度 强> 。定义何时安排消费者任务◦顺序:可在生产者任务完成后安排消费者任务。 的 同时 强> :消费者任务必须与生产者任务共同安排。
的 数据源 强> :定义任务输出的生命周期/可靠性◦持有:任务退出后输出将可用。输出可能会在以后丢失。 的 持续可靠 强> :输出可靠存储并始终可用 的 短暂的 强> :输出仅在生产者任务运行时可用。
有关Tez架构的更多详细信息,请参见此处 Apache Tez设计文档 。