Hive引擎替换为tez

Hive引擎替换为tez

Hive的默认计算引擎是MR,但是mapreduce的速度实在是很慢,所以我们考虑将计算引擎更换为tez

安装环境:

Hadoop-2.7.4

hive-2.3.6

具体版本根据自己实际情况来

首先tez下载:tez版本请参考官网,我这里是下载的0.9.1

这需要jdk8或更高版本,还有maven3或更高版本

https://mirrors.tuna.tsinghua.edu.cn/apache/tez/0.9.1/

这是下载地址,需要注意的是一个是bin.tar.gz,一个是src.tar.gz,src是源码包,下载后需要编译,bin版本不需要

我这里下载的是bin的

1.安装部署:

下载完之后解压安装

tar -zxvf apache-tez-0.9.1-bin.tar.gz /解压目录
mv apache-tez-0.9.1-bin.tar.gz tez-0.9.1

然后进入Hive的安装目录

cd /app/hive-2.3.6/conf
vim hive-env.sh
#添加以下配置

# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/app/hadoop-2.7.4 #这是你hadoop的安装目录

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/app/hive-2.3.6/conf  #这是你hive配置文件的目录

# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export TEZ_HOME=/app/tez-0.9.1    #是你的tez的解压目录
export TEZ_JARS=""
for jar in `ls $TEZ_HOME |grep jar`; do
    export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar  
done
for jar in `ls $TEZ_HOME/lib`; do
    export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/lib/$jar
done

export HIVE_AUX_JARS_PATH=/app/hadoop-2.7.4/share/hadoop/common/hadoop-lzo-0.4.20.jar$TEZ_JARS  #这是引用的hadoop下的jar包路径

/app/hadoop-2.7.4/share/hadoop/common目录下一定要有hadoop-lzo-0.4.20.jar包不然会报错

没有的可以去网上下一个放到目录下面

然后再hive-site.xml中配置


    hive.execution.engine
    tez

或者你可以使用临时会话性的设置.

set hive.execution.engine=tez;

2.然后进行tez的配置

hiveconf目录下创建一个tez-site.xml的文件

vim tez-site.xml

添加如下内容



<configuration>
<property>
    
	<name>tez.lib.urisname>    
    <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/libvalue>
property>
<property>
	<name>tez.lib.uris.classpathname>    	
    <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/libvalue>
property>
<property>
     <name>tez.use.cluster.hadoop-libsname>
     <value>truevalue>
property>
<property>
 	<name>tez.history.logging.service.classname>        		      <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingServicevalue>
property>
configuration>

然后上传tez到hdfs集群

现在hdfs创建文件夹

hadoop fs -mkdir /tez
hadoop fs -put /tez /tez-0.9.1/
hadoop fs -ls /tez
最后显示下面这个信息就正确了
/tez/tez-0.9.1

注意:/tez/tez-0.9.1一定要和上面tez-site.xmltez.lib.uris路径对应起来

3.测试

重启hadoop

启动hive…

create table student(
id int,
name string);
insert into student values(1,"zhangsan");
select * from student;
1       zhangsan

Hive引擎替换为tez_第1张图片

4.报错

运行Tez时检查到用过多内存而被NodeManager杀死进程问题:
Caused by: org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown. Application application_1546781144082_0005 failed 2 times due to AM Container for appattempt_1546781144082_0005_000002 exited with  exitCode: -103
For more detailed output, check application tracking page:http://hadoop103:8088/cluster/app/application_1546781144082_0005Then, click on links to logs of each attempt.
Diagnostics: Container [pid=11116,containerID=container_1546781144082_0005_02_000001] is running beyond virtual memory limits. Current usage: 216.3 MB of 1 GB physical memory used; 2.6 GB of 2.1 GB virtual memory used. Killing container.

这种问题是从机上运行的Container试图使用过多的内存,而被NodeManager kill掉了。

解决:

方案一:或者是关掉虚拟内存检查。我们选这个,修改yarn-site.xml

<property>
<name>yarn.nodemanager.vmem-check-enabledname>
<value>falsevalue>
property>

方案二:mapred-site.xml中设置Map和Reduce任务的内存配置如下:(value中实际配置的内存需要根据自己机器内存大小及应用情况进行修改)

<property>
  <name>mapreduce.map.memory.mbname>
  <value>1536value>
property>
<property>
  <name>mapreduce.map.java.optsname>
  <value>-Xmx1024Mvalue>
property>
<property>
  <name>mapreduce.reduce.memory.mbname>
  <value>3072value>
property>
<property>
  <name>mapreduce.reduce.java.optsname>
  <value>-Xmx2560Mvalue>
property>
  mapreduce.reduce.memory.mb   3072   mapreduce.reduce.java.opts   -Xmx2560M ```

你可能感兴趣的:(Hive引擎替换为tez)