Hortonworks 在2014年左右发布了 Stinger Initiative,并进行社区分享,为的是让 Hive 支持更多 SQL,并实现更好的性能。
- 让 Hive 的查询功能更强大,增加类似 OVER 子句的分析功能,支持 WHERE 子查询
调整 Hive 的样式系统使其更加符合标准的 SQL 模型 - 优化 Hive 的请求执行计划,增加 Task 每秒处理记录的数量
- 引入新的列式文件格式(ORC 文件),提供一种更现代、高效和高性能的方式来储存 Hive 数据
- 引入新的 runtime 框架 --- Tez,消除 Hive 的延迟以及吞吐量限制
Tez 通过消除不必要的 task、障碍同步和对 HDFS 的读写作业来优化 Hive job
1. Tez 概述
Tez 是 Apache 开源的支持 DAG(有向无环图)作业的计算框架,是支持 Hadoop 2.x 的重要引擎。它源于 MapReduce 框架,核心思想是将 Map 和 Reduce 两个操作进一步拆分,分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的 DAG 作业。
Tez 将 Map task 和 Reduce task 进一步拆分为如下图所示:
Tez 的 task 由 Input、processor、output 阶段组成,可以表达所有复杂的 map、reduce 操作,如下图:
Tez 可以将多个有依赖的作业转换为一个作业(只需写一次 HDFS,中间环节较少),从而大大提升 DAG 作业的性能。Tez 已被 Hortonworks 用于 Hive 引擎的优化,经测试一般小任务比 Hive MR 的 2-3 倍速度左右,大任务 7-10 倍左右,情况不同效果不同。
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Tez + Hive 仍采用 MapReduce 计算框架,但对 DAG 的作业依赖关系进行了裁剪,并将多个小作业合并成一个大作业,不仅减少了计算量,而且写 HDFS 次数也大大减少。
2. Tez 安装部署
- 下载软件包:
apache-tez-0.9.2-bin.tar.gz
- 解压缩
tar -zxvf apache-tez-0.9.0-bin.tar.gz
cd apache-tez-0.9.0-bin/share
- 将tez的压缩包放到到 hdfs 上
hdfs dfs -mkdir -p /user/tez
hdfs dfs -put tez.tar.gz /user/tez
-
$HADOOP_HOME/etc/hadoop/
下创建 tez-site.xml 文件,做如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 指定在 hdfs上的 tez包文件 -->
<property>
<name>tez.lib.uris</name>
<value>hdfs://centos7-1:9000/user/tez/tez.tar.gz</value>
</property>
</configuration>
保存后将文件复制到集群所有节点
- 增加客户端节点的配置(/etc/profile)
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export TEZ_CONF_DIR=$HADOOP_CONF_DIR
export TEZ_JARS=/opt/apps/tez/*:/opt/apps/tez/lib/*
export HADOOP_CLASSPATH=$TEZ_CONF_DIR:$TEZ_JARS:$HADOOP_CLASSPATH
- Hive 设置 Tez 执行
hive> set hive.execution.engine=tez;
- 如果想默认使用 Tez,可在
$HIVE_HOME/conf
目录下 hive-site.xml 中增加
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
网友评论