Hive 中的 Tez 引擎和 Map Reduce 引擎有什么区别,在哪个进程中使用哪个引擎更好(例如:joins、aggregation?)
3 回答
Tez 是一个 DAG(有向无环图)架构。一个典型的 Map reduce 作业有以下步骤:
从文件中读取数据 --> 一个磁盘访问
运行映射器
写映射输出 --> 第二次磁盘访问
运行 shuffle and sort --> 读取映射输出,第三次磁盘访问
写入 shuffle 和排序 --> 为 reducer 写入排序数据 --> 第四次磁盘访问
运行读取排序数据的 reducers --> 第五个磁盘输出
写减速器输出 --> 第六次磁盘访问
Tez 的工作方式与 Spark 非常相似(Tez 是在 Spark 之前由 Hortonworks 创建的):
执行计划但不需要从磁盘读取数据。
一旦准备好进行一些计算(类似于 spark 中的操作),从磁盘获取数据并执行所有步骤并产生输出。
只有一读一写。
通过不多次进入磁盘来提高效率。中间结果存储在内存中(不写入磁盘)
Tez 是一个基于 DAG 的系统,它以一种在开始执行之前优化这些操作的方式了解所有操作。
MapReduce 模型简单地指出,任何计算都可以通过两种计算步骤来执行——map 步骤和 reduce 步骤。一对 map 和 reduce 对数据进行一级聚合。复杂的计算通常需要多个这样的步骤。
Tez 通常在 MaprReduce 下运行,因此它只是一个优化的 MapReduce,步骤更少且紧凑。
Apache Tez 与 MapReduce 插件兼容,但减少了磁盘访问量。Tez 总是比 MapReduce 好。
不过也有比 Hive + Tez 更好的系统,比如 Spark SQL。