我试图看看是什么让Apache Tez和Hive比使用hive映射reduce更快.我无法理解DAG的概念.
任何人都可以很好地理解Apache TEZ的架构.
小智 9
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中,映射槽(和减少槽)的数量在平台级别被固定/硬编码.更好地利用所有可用的群集资源通常会导致更快
Apache Tez代表了传统MapReduce的替代方案,该方案允许作业满足PB级快速响应时间和极高吞吐量的需求。
像Hive和Pig这样的高级数据处理应用程序需要一个执行框架,该框架可以高效地表达其复杂的查询逻辑,然后以由Tez管理的高性能来执行它。Tez通过不将数据处理建模为单个工作,而是作为数据流图来实现此目标。
…图中的顶点表示应用程序逻辑,边线表示数据移动。丰富的数据流定义API允许用户以直观的方式表达复杂的查询逻辑,这自然适用于由Hive和Pig等更高级别的声明性应用程序生成的查询计划。[...]数据流管道可以表示为单个Tez作业将运行整个计算。Tez负责将此逻辑图扩展为任务的物理图并执行它。
Apache Tez博客文章中的数据处理API描述了一种简单的Java API,用于表达数据处理的DAG。API具有三个组成部分
• DAG。这定义了整体工作。用户为每个数据处理作业创建一个DAG对象。
• 顶点。这定义了用户逻辑以及执行用户逻辑所需的资源和环境。用户为作业中的每个步骤创建一个Vertex对象,并将其添加到DAG。
• 边缘。这定义了生产者和消费者顶点之间的联系。用户创建一个Edge对象,并使用该对象连接生产者和消费者顶点。
通过Tez定义的边缘属性,它可以实例化用户任务,配置其输入和输出,适当地安排它们以及定义如何在任务之间路由数据。通过指定用户指南,数据大小和资源,Tez还允许为每个顶点执行定义并行性。
数据移动:定义任务之间的数据路由?一对一:数据从第i个生产者任务路由到第i个消费者任务。
广播:数据从生产者任务路由到所有消费者任务。
分散收集:生产者任务将数据分散到碎片中,而消费方任务收集碎片。所有生产者任务的第i个分片路由到第i个消费者任务。
排程。定义何时安排使用者任务的时间?顺序:可以在生产者任务完成后安排使用者任务的时间。 并发:必须将消费者任务与生产者任务安排在一起。
数据源:定义任务输出的生存期/可靠性?持久:任务退出后,输出将可用。稍后可能会丢失输出。 持久可靠:输出可靠地存储并且始终可用 临时:仅在生产者任务运行时才可用。
有关Apache Tez架构的更多详细信息,请参见本Apache Tez设计文档。
我还没有使用 Tez,但我已经阅读过相关内容。我认为 Hive 比 Tez 运行得更快的主要原因有两个:
您可以在这里找到有助于您更好地了解 Tez 的链接列表: http: //hortonworks.com/hadoop/tez/
| 归档时间: |
|
| 查看次数: |
10588 次 |
| 最近记录: |