hive on tez详细配置和运行测试
tez
hadoop
hive
hdfs
yarn
环境: hadoop-2.5.2 hive-0.14 tez-0.5.3
hive on tez 的方式有两种安装配置方式:
- 在hadoop中配置
- 在hive中配置
比较:
第二种方式:当已经有了稳定的hadoop集群,而不想动这个集群时,可以考虑采用第二种方式配置,第二种方式配置后只有hive的程序可以动态的切换执行引擎:set hive.execution.engine=mr;// tez/mr ;而其他的mapreduce程序只能在yarn上运行;
第一种方式:侵入行较强,对原有的hadoop集群有影响,需要在hadoop的mapred-site.xml中配置:mapreduce.framework.name为yarn-tez,如果这样配置则意味着所有的通过本hadoop集群执行的mr任务都只能走tez方式提交任务,配置好后,hive默认的也就运行在tez上而不用其他的配置;
以因此,在刚开始,想找到第二种的配置方式走了很多弯路
在开始前需要自己编译tez源码 此处略过
root@localhost:/opt/work# wget http://www.eu.apache.org/dist/tez/0.5.3/apache-tez-0.5.3-src.tar.gz
root@localhost:/opt/work# tar zxvf apache-tez-0.5.3-src.tar.gz
root@localhost:/opt/work# cd apache-tez-0.5.3-src
root@localhost:/opt/work/apache-tez-0.5.3-src# mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true //编译过程漫长啊,等待…..,中途有错误可以终止后再次执行mvn命令多次编译,编译成功之后目录结构如下
root@localhost:/opt/work/apache-tez-0.5.3-src# ll
总用量204
drwxrwxr-x 1550050040965月2616:29./
drwxr-xr-x 38 root root 40965月2616:34../
-rw-rw-r--1500500575312月506:25 BUILDING.txt
-rw-rw-r--15005006019912月506:25 CHANGES.txt
drwxrwxr-x 450050040965月2616:30 docs/
-rw-rw-r--15005006612月506:25.gitignore
lrwxrwxrwx 15005003312月506:25 INSTALL.md -> docs/src/site/markdown/install.md
-rw-rw-r--15005001447012月506:25 KEYS
-rw-rw-r--15005001135812月506:25 LICENSE.txt
-rw-rw-r--150050016412月506:25 NOTICE.txt
-rw-rw-r--15005003420312月506:25 pom.xml
-rw-rw-r--1500500143312月506:25 README.md
drwxr-xr-x 3 root root 40965月2616:29 target/
drwxrwxr-x 450050040965月2616:29 tez-api/
drwxrwxr-x 450050040965月2616:29 tez-common/
drwxrwxr-x 450050040965月2616:29 tez-dag/
drwxrwxr-x 450050040965月2616:30 tez-dist/
drwxrwxr-x 450050040965月2616:29 tez-examples/
drwxrwxr-x 450050040965月2616:29 tez-mapreduce/
drwxrwxr-x 550050040965月2616:29 tez-plugins/
drwxrwxr-x 450050040965月2616:29 tez-runtime-internals/
drwxrwxr-x 450050040965月2616:29 tez-runtime-library/
drwxrwxr-x 450050040965月2616:29 tez-tests/
drwxrwxr-x 3500500409612月506:25 tez-tools/
root@localhost:/opt/work/apache-tez-0.5.3-src# ll tez-dist/target/
总用量40444
drwxr-xr-x 5 root root 40965月2616:30./
drwxrwxr-x 450050040965月2616:30../
drwxr-xr-x 2 root root 40965月2616:30 archive-tmp/
drwxr-xr-x 2 root root 40965月2616:30 maven-archiver/
drwxr-xr-x 3 root root 40965月2616:30 tez-0.5.3/
-rw-r--r--1 root root 106259955月2616:30 tez-0.5.3-minimal.tar.gz
-rw-r--r--1 root root 307571285月2616:30 tez-0.5.3.tar.gz
-rw-r--r--1 root root 27915月2616:30 tez-dist-0.5.3-tests.jar
root@localhost:/opt/work/apache-tez-0.5.3-src#
编译后的tez-dist/target/tez-0.5.3.tar.gz 就是我们需要的tez组件的二进制包,并将tez-0.5.3.tar.gz上传到hdfs的一个目录中:
[hadoop@mymaster local]$ hadoop fs -mkdir /apps
[hadoop@mymaster local]$ hadoop fs -copyFromLocal tez-0.5.3.tar.gz /apps/
[hadoop@mymaster local]$ hadoop fs -ls /apps
SLF4J:Class path contains multiple SLF4J bindings.
SLF4J:Found binding in[jar:file:/oneapm/local/hadoop-2.5.2/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J:Found binding in[jar:file:/oneapm/local/tez-0.5.3/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J:See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J:Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Found1 items
-rw-r--r--2 hadoop supergroup 307571282015-05-2616:53/apps/tez-0.5.3.tar.gz
[hadoop@mymaster local]$
之后需要在hadoop的master节点上的$HADOOP_HOME/etc/hadoop/目录下创建tez-site.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>tez.lib.uris</name>
<value>${fs.defaultFS}/apps/tez-0.5.3.tar.gz</value>
</property>
</configuration>
之上所作的都是必须的步骤,接下来分别描述hive on tez 的两种配置方式
第一种方式:在hadoop中配置
需要将tez的jar包加到$HADOOP_CLASSPATH路径下,在hadoop_env.sh文件的末尾,添加如下内容:
export TEZ_HOME=/oneapm/local/tez-0.5.3#是你的tez的解压目录
for jar in`ls $TEZ_HOME |grep jar`;do
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/$jar
done
for jar in`ls $TEZ_HOME/lib`;do
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/lib/$jar
done
修改mapred-site.xml 文件
<property>
<name>mapreduce.framework.name</name>
<value>yarn-tez</value>
</property>
修改之后将mapred-site.xml和hadoop_env.sh,tez-site.xml文件同步到集群所有的节点上,这里将会影响到整个集群,是我不想这么做的原因.
运行tez的实例mr程序,验证是否安装成功:
[hadoop@mymaster tez-0.5.3]$ hadoop jar $TEZ_HOME/tez-examples-0.5.3.jar orderedwordcount /license.txt /out
当然license.txt 请自行准备上传到hdfs即可,如果运行顺利,查看8088端口如下:
箭头所示的application type为TEZ,表示安装成功
第二种方式:在hive中配置
第二种配置开始前,请将第一步的步骤取消,保证hadoop的配置文件恢复到原状,tez-site.xml文件只放在master一台节点上即可;
将tez下的jar和tez下的lib下的jar包复制到hive的$HIVE_HOME/lib目录下即可
配置过程中,我的hive和hadoop的master在同一个节点上,以hadoop用户启动运行hive,tez/mr一切顺利,但是考虑到与master放在一个节点运行 master节点物理资源不足,所以将hive同样的配置迁移到另一台干净的主机hiveclient上:运行hive on mr任务顺利;运行hive ont tez就不行,错误如下:
hive (default)>set hive.execution.engine=tez;
hive (default)>select json_udtf(data)from tpm.tps_dc_metricdata where pt=2015060200 limit 1;
Query ID = blueadmin_20150603130202_621abba7-850e-4683-8331-aee8482f2ebe
Total jobs =1
LaunchingJob1out of 1
FAILED:ExecutionError,return code 1from org.apache.hadoop.hive.ql.exec.tez.TezTask
hive (default)>
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.tez.TezTask
引起这个错误的原因很多,只从这里看不出来到底是哪里有问题, 只能看hive的运行job日志了,日志在你的HIVEHOME/conf的hive−log4j.properties下的hive.log.dir={java.io.tmpdir}/user.name所指的目录下,如果日志使用的是默认的配置,则在主机的/tmp/{user}/目录下生成hive的job日志和运行日志,在log中看到如下的信息:
2015-06-0313:03:01,071 INFO [main]: tez.DagUtils(DagUtils.java:createLocalResource(718))-Resource modification time:1433307781075
2015-06-0313:03:01,126 ERROR [main]:exec.Task(TezTask.java:execute(184))-Failed to execute tez graph.
java.io.FileNotFoundException:File does not exist: hdfs:/user/hivetest
at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1072)
at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:1064)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1064)
at org.apache.hadoop.hive.ql.exec.tez.DagUtils.getDefaultDestDir(DagUtils.java:774)
at org.apache.hadoop.hive.ql.exec.tez.DagUtils.getHiveJarDirectory(DagUtils.java:870)
at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.createJarLocalResource(TezSessionState.java:337)
at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.open(TezSessionState.java:158)
at org.apache.hadoop.hive.ql.exec.tez.TezTask.updateSession(TezTask.java:234)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:410)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:783)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
2015-06-0313:03:01,127 ERROR [main]: ql.Driver(SessionState.java:printError(833))- FAILED:ExecutionError,return code 1from org.apache.hadoop.hive.ql.exec.tez.Tez
Task
说hdfs没有/user/hivetest 目录,确实,我的hiveclient主机上运行的hive是以hivetest用户运行的,它在hdfs上没有自己的home目录,那么没有目录,就创建目录:
[hivetest@mymaster tez-0.5.3]$hadoop fs -mkdir /user/hivetest
如此依赖问题解决,重新进入hive即可,接下来为hive on tez/yarn的初步测试结果
启动hive运行测试
hive (default)>set hive.execution.engine=tez;
hive (default)>select t.a,count(1)from(select split(data,'\t')[1] a,split(data,'\t')[2] b from tpm.tps_dc_metricdata limit 1000) t groupby t.a ;
Query ID = hadoop_20150526184141_556cf5d8-edf3-430a-b21a-513c35679567
Total jobs =1
LaunchingJob1out of 1
Tez session was closed.Reopening...
Session re-established.
Status:Running(Executing on YARN cluster withApp id application_1432632452478_0005)
--------------------------------------------------------------------------------
VERTICES STATUS TOTAL COMPLETED RUNNING PENDING FAILED KILLED
--------------------------------------------------------------------------------
Map1.......... SUCCEEDED 26260000
Reducer2...... SUCCEEDED 110000
Reducer3...... SUCCEEDED 110000
--------------------------------------------------------------------------------
VERTICES:03/03[==========================>>]100% ELAPSED TIME:24.60 s
--------------------------------------------------------------------------------
OK
t.a _c1
117
107
1003
1016
1051
1172
1182
11911
123
1203
1211
1234
1244
12516
1264
1279
12910
1426
2211
此处省略n条打印记录
Time taken:30.637 seconds,Fetched:207 row(s)
set hive.execution.engine=tez; 即执行引擎为tez 如果想用yarn,则设置为:set hive.execution.engine=mr;即可
tez执行过程中有个已经很漂亮的进度条,如上所示; 执行查询1000条记录
hive on yarn
hive (tpm)>set hive.execution.engine=mr;
hive (tpm)>select t.a,count(1)from(select split(data,'\t')[1] a,split(data,'\t')[2] b from tpm.tps_dc_metricdata limit 1000) t groupby t.a ;
Query ID = hadoop_20150526140606_d73156e0-c81c-4b2a-bfb6-fd1d48fa8325
Total jobs =2
LaunchingJob1out of 2
Number of reduce tasks determined at compile time:1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
StartingJob= job_1432521221608_0008,Tracking URL = http://mymaster:8088/proxy/application_1432521221608_0008/
KillCommand=/oneapm/local/hadoop-2.5.2/bin/hadoop job -kill job_1432521221608_0008
Hadoop job information forStage-1: number of mappers:70; number of reducers:1
2015-05-2614:06:53,584Stage-1 map =0%, reduce =0%
2015-05-2614:07:13,931Stage-1 map =1%, reduce =0%,Cumulative CPU 3.46 sec
2015-05-2614:07:15,004Stage-1 map =9%, reduce =0%,Cumulative CPU 21.37 sec
2015-05-2614:07:18,198Stage-1 map =12%, reduce =0%,Cumulative CPU 43.02 sec
2015-05-2614:07:19,260Stage-1 map =19%, reduce =0%,Cumulative CPU 47.7 sec
2015-05-2614:07:20,322Stage-1 map =20%, reduce =0%,Cumulative CPU 48.52 sec
省略打印
OK
t.a _c1
115
108
1001
1013
1022
1045
1051
1063
10710
1092
省略打印
Time taken:152.971 seconds,Fetched:207 row(s)
本次测试结果:on tez比on yarn上快大约5倍左右的速度;
对多个hive stage的sql优化显著,测试结果根据不同的平台可能有不同程度的差异
总结: 1.根据如上第二种的配置,集群默认的还是yarn,hive可以在mr和tez之间自由切换而对原有的hadoop mr任务没有影响,还是yarn,运行的状态可以下8088端口下看,hive的命令行终端运行tez是的进度条挺漂亮;
相关推荐
然而,在实际操作中,我们经常会遇到一些常见的错误,特别是当Hive运行在Tez引擎上时。这里我们将深入探讨五个在Hive on Tez中常见的报错问题及其解决方案。 1. 错误一:Failing because I am unlikely to write ...
同时,还需要确保Tez的依赖库已经添加到Hive的类路径中,以及Tez服务已经在集群上正确安装和运行。 总的来说,Apache Hive提供了SQL接口,使得数据分析师可以方便地对大数据进行操作,而Apache Tez则作为一个高效的...
成功编译后,将Tez的相关jar包安装到Hadoop的类路径中,这通常涉及到将编译后的jar文件复制到Hive的lib目录下,尽管这种方法在某些情况下可能会导致问题。 7. **Hive on Tez的配置**: 在Hive的配置文件(如`hive-...
本文将对 Hive on Spark 的源码进行深入分析,涵盖其基本原理、运行模式、Hive 解析 HQL、Spark 上下文创建、任务执行等方面。 1. 运行模式 Hive on Spark 支持两种运行模式:本地(LOCAL)和远程(REMOTE)。当...
在 Tez 上运行 Apache Hive 的 Docker 镜像此存储库包含一个 docker 文件,用于构建 docker 映像以在 Tez 上运行 Apache Hive。 这个 docker 文件依赖于我的其他包含和 基础镜像的存储库。当前版本Apache Hive(主干...
6. 测试安装,可以通过运行简单的HQL查询来检查Hive和Tez是否正常工作。 在安装过程中,可能会遇到各种问题,比如依赖冲突、配置错误等。如果你遇到困难,可以参考提供的博客教程,或者直接联系资源提供者寻求帮助...
### Hive LLAP与Apache Tez关键技术解析 ...综上所述,Hive LLAP与Apache Tez相结合极大地提升了Hive处理交互式查询的能力,同时也为Hadoop生态系统中的数据分析提供了更为灵活和高效的解决方案。
本课程主要介绍hive的架构与应用,首先介绍了hive的实现结构,然后介绍了Hive Metastore三种模式,接着重点介绍hive的安装与配置,以及hive sql的基本操作,后面又介绍了hive beeline、hive on tez的使用,并测试了...
本篇文章将详细介绍如何进行TPCDS在Hive上的基准测试流程,以及相关的技术要点。 **一、TPCDS简介** TPCDS是一个决策支持系统的标准测试套件,包含了99个复杂的SQL查询,涵盖了多种业务场景,如数据挖掘、报表生成...
在安装Hive之前,确保你的系统已经安装了Java Development Kit (JDK) 8或更高版本,因为Hive需要Java环境来运行。你需要设置`JAVA_HOME`环境变量,指向你的JDK安装路径。 2. **配置Hadoop环境**: Hive是构建在...
Hive on Spark的运行需要Spark集群,而Spark集群建立在Hadoop之上,利用Hadoop的HDFS和YARN资源管理系统。 Spark有三种运行模式:Spark on YARN、Standalone Mode和Spark on Mesos。Hive on Spark默认支持Spark on ...
源码使用的是apache-tez-0.8.3,对应的hadoop版本2.7.3,源码包中的nodejs的版本是v0.12.3,很难编译通过,最后把nodejs改成了v4.0.0才编译通过tez-ui2模块。
源码使用的是apache-tez-0.8.3,对应的hadoop版本2.8.3,源码包中的nodejs的版本是v0.12.3,很难编译通过,最后把nodejs改成了v4.0.0才编译通过tez-ui2模块。
4. **Tez**:Tez是Hadoop上的一个任务执行框架,它是MapReduce的升级版,提供更灵活和高性能的作业执行模型。Tez可以优化复杂的查询任务,提高数据处理效率。 5. **Hue**:Hue是一个开源的Web界面,用于交互式地...
Hadoop3+Hive3+Tez编译安装;适用视频:https://www.bilibili.com/video/BV1L54
参考文档包括Apache官方的Hive on Spark指南、Spark运行在YARN上的文档,以及相关技术博客,这些资源提供了更多详细的配置和使用信息。 总之,Hive on Spark的实施涉及多个步骤,包括编译、安装、配置和测试。通过...
10. **Hive的最新发展**:随着技术的发展,Hive现在支持ACID事务、实时查询(如Hive on Tez和Hive on Spark)和更高效的查询处理。 通过上述知识点,我们可以理解Hive测试数据在学习和实践中如何发挥作用,以及如何...
Hive是由Facebook开发的一个数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)对存储在Hadoop分布式文件系统(HDFS)上的大型数据集进行查询和分析。Hive将SQL语句转换为MapReduce任务执行,简化了大...
首先,安装 Hive 需要先确保你已经安装了 Hadoop 环境,因为 Hive 是构建在 Hadoop 分布式文件系统(HDFS)之上的。以下是安装 Hive 的基本步骤: 1. **下载 Hive**:访问 Apache 官网(https://hive.apache.org/)...
6. **测试与验证**:运行一个Hive查询并检查Tez UI是否能正确显示其执行情况。 通过以上步骤,可以有效地解决Tez UI编译和部署的问题,提升Hadoop和Tez环境的管理和监控能力。尤其对于大数据开发团队,掌握如何使用...