我想看看是什么让apache-tez使用hive比map-reduce使用hive快得多。我不能理解dag的概念。任何人都有一个很好的参考来理解apache-tez的体系结构。
1u4esq0p1#
apache-tez代表了传统mapreduce的一种替代方案,它允许作业以PB级的速度满足快速响应时间和极端吞吐量的需求。像hive和pig这样的高级数据处理应用程序需要一个执行框架来高效地表达它们复杂的查询逻辑,然后以高性能执行它,由tez管理。tez通过将数据处理建模为数据流图而不是单个作业来实现这一目标。…图中的顶点表示应用程序逻辑,边表示数据移动。一个丰富的数据流定义api允许用户以直观的方式表达复杂的查询逻辑,它自然适合由高级声明性应用程序(如hive和pig)生成的查询计划[数据流管道可以表示为运行整个计算的单个tez作业。将这个逻辑图扩展为任务的物理图,并执行它是由tez负责的。apachetez博客文章中的数据处理api描述了一个简单的javaapi,用于表示数据处理的dag。api有三个组件•达格。这定义了整个作业。用户为每个数据处理作业创建一个dag对象。•顶点。这定义了用户逻辑以及执行用户逻辑所需的资源和环境。用户为作业中的每个步骤创建一个顶点对象,并将其添加到dag中。•边缘。这定义了生产者和消费者顶点之间的连接。用户创建边对象并使用它连接生产者和消费者顶点。由tez定义的边缘属性使它能够示例化用户任务,配置它们的输入和输出,适当地调度它们,并定义如何在任务之间路由数据。tez还允许通过指定用户指南、数据大小和资源来定义每个顶点执行的并行性。数据移动:定义任务之间的数据路由◦一对一:数据从第i个生产者任务路由到第i个消费者任务。广播:数据从生产者任务路由到所有消费者任务。分散收集:生产者任务将数据分散到碎片中,消费者任务收集碎片。所有生产者任务的第i个碎片路由到第i个使用者任务。行程安排。定义计划使用者任务的时间◦顺序:使用者任务可以安排在生产者任务完成之后。并发:使用者任务必须与生产者任务同时调度。数据源:定义任务输出的生存期/可靠性◦持久化:任务退出后输出将可用。以后可能会丢失输出。持久可靠:输出被可靠地存储并始终可用短暂:输出仅在生产者任务运行时可用。在这个apache-tez设计文档中提供了关于tez架构的更多细节。
42fyovps2#
hadoop summit的演示(幻灯片35)讨论了dag方法与mapreduce范式的最佳对比:http://www.slideshare.net/hadoop_summit/murhty-saha-june26255pmroom212本质上,它允许更高级别的工具(如hive和pig)在作业开始之前定义它们的整体处理步骤(aka workflow,aka directed acyclical graph)。dag是完成作业所需的所有步骤(配置单元查询、pig作业等)的图形。因为可以在执行时间之前计算整个作业的步骤,所以系统可以利用在“内存”中缓存中间作业结果的优势。然而,在mapreduce中,mapreduce阶段之间的所有中间数据都需要写入hdfs(磁盘)以增加延迟。yarn还允许对tez任务重用容器。e、 g.每台服务器被分割成多个“容器”,而不是“Map”或“减少”插槽。对于作业执行中的任何给定点,这允许tez根据需要将整个集群用于map阶段或reduce阶段。而在yarn之前的hadoopv1中,map槽(和reduce槽)的数量在平台级别是固定的/硬编码的。更好地利用所有可用的集群资源通常会导致更快的
c6ubokkw3#
mr和tez的主要区别在于将中间数据写入mr中的本地磁盘。但是,在tez中,mapper/reducer功能将在使用内存的每个容器上的单个示例中执行。此外,tez还执行spark操作中的事务或操作。
kqqjbcuj4#
tez是一种dag(有向无环图)结构。典型的map reduce作业包含以下步骤:从文件中读取数据-->一次磁盘访问运行Map程序写入Map输出-->第二次磁盘访问运行shuffle和sort-->读取Map输出,第三次磁盘访问写入无序排列和排序-->为还原程序写入排序数据-->第四次磁盘访问运行减速机,读取排序数据-->第五个磁盘输出写减速机输出-->第六次磁盘访问tez的工作原理与spark非常相似(tez是由hortonworks在spark之前创建的):执行计划,但不需要从磁盘读取数据。一旦准备好进行一些计算(类似于spark中的操作),就从磁盘获取数据并执行所有步骤并生成输出。只有一读一写。请注意不多次访问磁盘所带来的效率。中间结果存储在内存中(不写入磁盘)。除此之外还有向量化(处理一批行,而不是一次处理一行)。所有这些都提高了查询时间的效率。参考文献http://www.slideshare.net/hadoop_summit/w-235phall1pandeyhttpshttp://community.hortonworks.com/questions/83394/difference-between-mr-and-tez.html
vd2z7a6w5#
我还没有用过tez,但我已经读过了。我认为主要的两个原因,将使Hive运行更快的tez是:如果可能的话,tez将在内存中的map reduce作业之间共享数据,从而避免向hdfs写入/从hdfs读取数据的开销使用tez,您可以在一个tez会话中运行hive上定义的多个map/reduce dag,而无需每次启动一个新的主应用程序。你可以在这里找到帮助你更好地理解tez的链接列表:http://hortonworks.com/hadoop/tez/
5条答案
按热度按时间1u4esq0p1#
apache-tez代表了传统mapreduce的一种替代方案,它允许作业以PB级的速度满足快速响应时间和极端吞吐量的需求。
像hive和pig这样的高级数据处理应用程序需要一个执行框架来高效地表达它们复杂的查询逻辑,然后以高性能执行它,由tez管理。tez通过将数据处理建模为数据流图而不是单个作业来实现这一目标。
…图中的顶点表示应用程序逻辑,边表示数据移动。一个丰富的数据流定义api允许用户以直观的方式表达复杂的查询逻辑,它自然适合由高级声明性应用程序(如hive和pig)生成的查询计划[数据流管道可以表示为运行整个计算的单个tez作业。将这个逻辑图扩展为任务的物理图,并执行它是由tez负责的。
apachetez博客文章中的数据处理api描述了一个简单的javaapi,用于表示数据处理的dag。api有三个组件
•达格。这定义了整个作业。用户为每个数据处理作业创建一个dag对象。
•顶点。这定义了用户逻辑以及执行用户逻辑所需的资源和环境。用户为作业中的每个步骤创建一个顶点对象,并将其添加到dag中。
•边缘。这定义了生产者和消费者顶点之间的连接。用户创建边对象并使用它连接生产者和消费者顶点。
由tez定义的边缘属性使它能够示例化用户任务,配置它们的输入和输出,适当地调度它们,并定义如何在任务之间路由数据。tez还允许通过指定用户指南、数据大小和资源来定义每个顶点执行的并行性。
数据移动:定义任务之间的数据路由◦一对一:数据从第i个生产者任务路由到第i个消费者任务。
广播:数据从生产者任务路由到所有消费者任务。
分散收集:生产者任务将数据分散到碎片中,消费者任务收集碎片。所有生产者任务的第i个碎片路由到第i个使用者任务。
行程安排。定义计划使用者任务的时间◦顺序:使用者任务可以安排在生产者任务完成之后。并发:使用者任务必须与生产者任务同时调度。
数据源:定义任务输出的生存期/可靠性◦持久化:任务退出后输出将可用。以后可能会丢失输出。持久可靠:输出被可靠地存储并始终可用短暂:输出仅在生产者任务运行时可用。
在这个apache-tez设计文档中提供了关于tez架构的更多细节。
42fyovps2#
hadoop summit的演示(幻灯片35)讨论了dag方法与mapreduce范式的最佳对比:
http://www.slideshare.net/hadoop_summit/murhty-saha-june26255pmroom212
本质上,它允许更高级别的工具(如hive和pig)在作业开始之前定义它们的整体处理步骤(aka workflow,aka directed acyclical graph)。dag是完成作业所需的所有步骤(配置单元查询、pig作业等)的图形。因为可以在执行时间之前计算整个作业的步骤,所以系统可以利用在“内存”中缓存中间作业结果的优势。然而,在mapreduce中,mapreduce阶段之间的所有中间数据都需要写入hdfs(磁盘)以增加延迟。
yarn还允许对tez任务重用容器。e、 g.每台服务器被分割成多个“容器”,而不是“Map”或“减少”插槽。对于作业执行中的任何给定点,这允许tez根据需要将整个集群用于map阶段或reduce阶段。而在yarn之前的hadoopv1中,map槽(和reduce槽)的数量在平台级别是固定的/硬编码的。更好地利用所有可用的集群资源通常会导致更快的
c6ubokkw3#
mr和tez的主要区别在于将中间数据写入mr中的本地磁盘。但是,在tez中,mapper/reducer功能将在使用内存的每个容器上的单个示例中执行。此外,tez还执行spark操作中的事务或操作。
kqqjbcuj4#
tez是一种dag(有向无环图)结构。典型的map reduce作业包含以下步骤:
从文件中读取数据-->一次磁盘访问
运行Map程序
写入Map输出-->第二次磁盘访问
运行shuffle和sort-->读取Map输出,第三次磁盘访问
写入无序排列和排序-->为还原程序写入排序数据-->第四次磁盘访问
运行减速机,读取排序数据-->第五个磁盘输出
写减速机输出-->第六次磁盘访问
tez的工作原理与spark非常相似(tez是由hortonworks在spark之前创建的):
执行计划,但不需要从磁盘读取数据。
一旦准备好进行一些计算(类似于spark中的操作),就从磁盘获取数据并执行所有步骤并生成输出。
只有一读一写。
请注意不多次访问磁盘所带来的效率。中间结果存储在内存中(不写入磁盘)。除此之外还有向量化(处理一批行,而不是一次处理一行)。所有这些都提高了查询时间的效率。
参考文献http://www.slideshare.net/hadoop_summit/w-235phall1pandeyhttpshttp://community.hortonworks.com/questions/83394/difference-between-mr-and-tez.html
vd2z7a6w5#
我还没有用过tez,但我已经读过了。我认为主要的两个原因,将使Hive运行更快的tez是:
如果可能的话,tez将在内存中的map reduce作业之间共享数据,从而避免向hdfs写入/从hdfs读取数据的开销
使用tez,您可以在一个tez会话中运行hive上定义的多个map/reduce dag,而无需每次启动一个新的主应用程序。
你可以在这里找到帮助你更好地理解tez的链接列表:http://hortonworks.com/hadoop/tez/