我试图看看是什么让Apache Tez与Hive比使用hive映射reduce更快。 我无法理解DAG的概念 任何人都可以很好地理解Apache TEZ的架构。
答案 0 :(得分:9)
Hadoop Summit(幻灯片35)的演讲讨论了DAG方法与MapReduce范例的最佳对比:
http://www.slideshare.net/Hadoop_Summit/murhty-saha-june26255pmroom212
基本上,它允许更高级别的工具(如Hive和Pig)在作业开始之前定义其整体处理步骤(也就是工作流程,也称为定向非循环图表)。 DAG是完成作业所需的所有步骤的图表(配置单元查询,Pig作业等)。因为可以在执行时间之前计算整个作业的步骤,所以系统可以利用在内存中缓存中间作业结果"。而在MapReduce中,MapReduce阶段之间的所有中间数据都需要写入HDFS(磁盘)增加延迟。
YARN还允许Tez任务重用容器。例如。每个服务器都被切成多个容器"而不是" map"或者"减少"插槽。对于作业执行中的任何给定点,这允许Tez根据需要将整个群集用于地图阶段或减少阶段。在YARN之前的Hadoop v1中,映射槽(和减少槽)的数量在平台级别被固定/硬编码。更好地利用所有可用的群集资源通常会导致更快的
答案 1 :(得分:3)
我还没有使用Tez,但我已经读过它了。我认为让Hive在Tez上跑得更快的两个主要原因是:
您可以在此处找到有助于您更好地了解Tez的链接列表:http://hortonworks.com/hadoop/tez/
答案 2 :(得分:3)
Apache Tez代表了传统MapReduce的替代方案,它允许作业满足快速响应时间和PB级别的极高吞吐量的需求。
Hive和Pig等高级数据处理应用程序需要一个能够以高效的方式表达其复杂查询逻辑的执行框架,然后以Tez管理的高性能执行它。 Tez通过将数据处理建模不是作为单个作业而是作为数据流图来实现这一目标。
Apache Tez博客文章中的数据处理API描述了用于表达数据处理DAG的简单Java API。 API有三个组件...图中的顶点表示应用程序逻辑和表示移动的边 数据的。丰富的数据流定义API允许用户在一个表达复杂的查询逻辑 直观的方式,它非常适合更高级别的查询计划 像Hive和Pig这样的声明性应用程序...... [数据流]管道可以表示为 一个Tez作业将运行整个计算。将此逻辑图扩展为 任务的物理图表和执行它由Tez负责。
•的 DAG 即可。这定义了整体工作。用户为每个数据处理作业创建一个DAG对象。
•的顶点即可。这定义了用户逻辑和资源&执行用户逻辑所需的环境。用户为作业中的每个步骤创建一个Vertex对象,并将其添加到DAG。
•的边线即可。这定义了生产者和消费者顶点之间的联系。用户创建Edge对象并使用它连接生产者和消费者顶点。
Tez定义的边缘属性使其能够实例化用户任务,配置其输入和输出,适当地安排它们并定义如何在任务之间路由数据。 Tez还允许通过指定用户指南,数据大小和资源来为每个顶点执行定义并行性。
数据移动:定义任务之间的数据路由◦一对一:来自第i个生产者任务的数据路由到第i个消费者任务。
广播:来自生产者任务的数据路由到所有消费者任务。
Scatter-Gather :生产者任务将数据分散到分片中,而消费者任务会收集分片。所有生产者任务中的第i个分片都路由到第i个消费者任务。
计划即可。定义何时安排消费者任务◦顺序:可在生产者任务完成后安排消费者任务。 并发:必须与生产者任务共同安排消费者任务。
数据源:定义任务输出的生命周期/可靠性◦持有:任务退出后输出将可用。输出可能会在以后丢失。 持久可靠:输出可靠存储并始终可用 Ephemeral :输出仅在生产者任务正在运行时可用。
有关Tez架构的其他详细信息,请参阅此Apache Tez Design Doc。
答案 3 :(得分:0)
MR与TEZ的主要区别在于将中间数据写入MR中的本地磁盘。但是,在TEZ中,mapper / reducer功能将在内存中的每个容器上的单个实例中执行。此外,TEZ还在spark操作中执行交易或操作等操作。
答案 4 :(得分:0)
Tez是DAG(定向非循环图)架构。典型的Map reduce作业具有以下步骤:
从文件中读取数据 - >一次磁盘访问
运行mappers
写地图输出 - >第二次磁盘访问
运行shuffle并排序 - >读取地图输出,第三次磁盘访问
写shuffle并排序 - >为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