hive有三种引擎:mapreduce、spark、tez,默认引擎为MapReduce,但MapReduce的计算效率非常低,而Spark和Tez引擎效率高,公司一般会使用Spark或Tez作为hive的引擎。
在官网中介绍,Tez的YARN Timeline在Hadoop 2.6.x及以上版本才支持,低版本有些功能并不支持,所以如果想用Tez作为hive的引擎先保证Hadoop版本不低于2.6.x,我的是hadoop-2.7.3
Tez官网也介绍了Tez与MapReduce处理数据的区别:
通过允许Apache Hive和Apache Pig这样的项目运行复杂的DAG任务,Tez可以用来处理数据,这些数据以前需要多个MR作业,现在在一个Tez作业中,如下所示。
Tez下载网址:http://mirrors.shu.edu.cn/apache/tez/
可以在此网址选择不同的版本,我这里选择0.9.1的,进入版本之后有两个安装包可以下载,src的是源码包,下载后需要进行编译,bin的是已经编译好的压缩包,在Linux系统中解压及安装
cd /opt/tools/
rz #将压缩包上传到目录中
tar -zxvf apache-tez-0.9.1-bin.tar.gz -C /opt/modules/ #解压到指定目录
cd /opt/modules/
mv /opt/modules/apache-tez-0.9.1-bin/ /opt/modules/tez-0.9.1/ #修改文件夹名称
cd /opt/modules/hadoop-2.7.3/ #切换的Hadoop目录
bin/hdfs dfs -mkdir /user/tez #在HDFS上新建tez目录
bin/hdfs dfs -put /opt/modules/tez-0.9.1/share/tez.tar.gz /user/tez/ #将tez中的tez.tar.gz压缩包上传到HDFS的Tez目录中
如果是在Hadoop中配置,则在Hadoop的master节点上的$HADOOP_HOME/etc/hadoop/目录下创建tez-site.xml
cd /opt/modules/hadoop-2.7.3/etc/hadoop
vi tez-site.xml
<configuration>
<property>
<name>tez.lib.urisname>
<value>/user/tez/tez.tar.gzvalue>
property>
configuration>
其他配置参数请参考官网
Tez中tez-site.xml参数配置网址:http://tez.apache.org/releases/0.9.1/tez-api-javadocs/configs/TezConfiguration.html
Tez运行时参数配置网址:http://tez.apache.org/releases/0.9.1/tez-runtime-library-javadocs/configs/TezRuntimeConfiguration.html
把Tez加入到环境变量(把Tez中所有jar包添加到HADOOP_CLASSPATH),在hadoop_env.sh文件的末尾,添加如下内容:
TEZ_CONF_DIR=/opt/modules/hadoop-2.7.3/etc/hadoop/tez-site.xml
TEZ_JARS=/opt/modules/tez-0.9.1
export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*
顺便复习下怎么查看HADOOP_CLASSPATH
bin/hdfs classpath
修改mapred-site.xml 文件:
<property>
<name>mapreduce.framework.namename>
<value>yarn-tezvalue>
property>
修改之后将mapred-site.xml和hadoop_env.sh,tez-site.xml文件同步到集群所有的节点上,这里将会影响到整个集群。
${HADOOP_HOME}/bin/yarn jar /opt/modules/tez-0.9.1/tez-examples-0.9.1.jar orderedwordcount /datas/wordcount.data /output/
可以看到application type为TEZ
重启hadoop
启动hive cli
set hive.execution.engine=tez; #修改hive引擎为tez
set hive.execution.engine=mr; #修改hive引擎为MapReduce
如果想将hive引擎永久设置为tez,则在hive-site.xml配置文件添加以下属性
<property>
<name>hive.execution.enginename>
<value>tezvalue>
property>
保存之后再重启,再执行操作就会默认执行引擎为tez了。
apache软件包仓库地址:
http://archive.apache.org/dist/
在设置tez-ui之前需要安装Tomcat,进入上面网址,找到Tomcat
tar -zxvf apache-tomcat-8.5.31.tar.gz -C /opt/modules/
在conf目录下server.xml可以修改端口号(我改成了8822)
启动Tomcat
${TOMCAT-HOME}/bin/startup.sh
访问http://localhost:8880/看到tomcat的欢迎页面。localhost替换为Linux服务器IP。
说明已经成功安装了Tomcat
接下来在tez目录下找到war包
因为我安装的是bin所以在安装包中就有tez-ui-0.9.1.war
自己编译的话也有生成,在这里不做过多赘述。
#在webapps下创建tez-ui目录
mkdir /opt/modules/tomcat-8.5.31/webapps/tez-ui/
#进入文件
cd /opt/modules/tomcat-8.5.31/webapps/tez-ui/
#解压war包
unzip /opt/modules/tez-0.9.1/tez-ui-0.9.1.war
#编辑配置文件,第26行修改localhost
vim config/configs.env
目录:${HADOOP-HOME}/etc/hadoop
vim yarn-site.xml添加以下内容.然后分发到各个节点。
<property>
<name>yarn.timeline-service.enabledname>
<value>truevalue>
property>
<property>
<name>yarn.timeline-service.hostnamename>
<value>tmastervalue>
property>
<property>
<name>yarn.timeline-service.http-cross-origin.enabledname>
<value>truevalue>
property>
<property>
<name> yarn.resourcemanager.system-metrics-publisher.enabledname>
<value>truevalue>
property>
<property>
<name>yarn.timeline-service.generic-application-history.enabledname>
<value>truevalue>
property>
<property>
<description>Address for the Timeline server to start the RPC server.description>
<name>yarn.timeline-service.addressname>
<value>tmaster:10201value>
property>
<property>
<description>The http address of the Timeline service web application.description>
<name>yarn.timeline-service.webapp.addressname>
<value>tmaster:8188value>
property>
<property>
<description>The https address of the Timeline service web application.description>
<name>yarn.timeline-service.webapp.https.addressname>
<value>tmaster:2191value>
property>
<property>
<name>yarn.timeline-service.handler-thread-countname>
<value>24value>
property>
vim tez-site.xml添加下列几行,分发到各个节点。
<property>
<name>tez.history.logging.service.classname>
<value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingServicevalue>
property>
<property>
<name>tez.tez-ui.history-url.basename>
<value>http://localhost:8822/tez-ui/value>
property>
启动hadoop
${HADOOP-HOME}/sbin/yarn-daemon.sh start timelineserver
启动tomcat
${TOMCAT-HOME}/bin/startup.sh
访问界面
http://localhost:8880/tez-ui/
访问yarn的web监控页面可以看到hive引擎已经使用了tez,但由于我电脑配置比较低,进入hive的cli运行复杂的SQL语句就会报错,我猜使用tez作为引擎对服务器配置要求较高。
好了,hive使用tez作为引擎安装配置大概就是这些,更详细的配置和优化可以到官网查看。由于我已经安装了两个版本的Hadoop和三个版本的hive,在此次安装配置tez时遇到了不少问题。经过两天的时间也总算是安装配置好了。由于电脑的配置。。。还是默默的将引擎改成MapReduce。。。。