hive3.x安装tez和相关调优参数

hive3.x安装tez

一 、编译Tez0.10.1

  1. 下载tez的src.tar.gz源码包
    新版的tez0.10.1需要在github下载,附链接 https://github.com/apache/tez
  2. 需要在pom.xml中更改hadoop.version属性的值,以匹配所使用的hadoop分支的版本。我这里是Apache Hadoop 3.1.3
    vim pom.xml修改
  3. 修改guava版本hadoop 3.1.3使用的guava版本是27.0-jre
  4. 安装git—>yum install -y git 和maven 为编译做准备
  5. 将tez-ui编译注释掉

maven安装:

  • 安装wget命令
    yum -y install wget

  • 下载maven安装包
    wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

  • 解压maven安装包 tar -zxvf apache-maven-3.5.4-bin.tar.gz -C 安装目录

  • 配置maven
    vi /etc/profile 在配置文件配置

export MAVEN_HOME=/opt/module/apache-maven-3.5.4
export PATH=$PATH:$MAVEN_HOME/bin
  • 修改maven源为阿里源或网易源
# vim settings.xml
<mirrors>
   <mirror>
     <id>nexus-aliyun</id>
     <mirrorOf>central</mirrorOf>
     <name>Nexus aliyun</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
   </mirror>

   <mirror>
     <id>CN</id>
     <name>OSChina Central</name>
     <url>http://maven.oschina.net/content/groups/public/</url>
     <mirrorOf>central</mirrorOf>
   </mirror>

   <mirror>
     <id>alimaven</id>
     <mirrorOf>central</mirrorOf>
     <name>aliyun maven</name>
     <url>https://maven.aliyun.com/nexus/content/repositories/central/</url>
   </mirror>

   <mirror>
     <id>jboss-public-repository-group</id>
     <mirrorOf>central</mirrorOf>
     <name>JBoss Public Repository Group</name>
     <url>https://repository.jboss.org/nexus/content/groups/public</url>
   </mirror>
</mirrors>
  1. 安装编译工具
yum -y install autoconf automake libtool cmake ncurses-devel openssl-devel lzo-devel zlib-devel gcc gcc-c++
  1. 可以先安装protobuf,下载链接https://github.com/protocolbuffers/protobuf/tags
    根据hadoop的lib中可以确定版本为2.5.0,下好源码包后,解压,并且编译protobuf 2.5.0
    如果报错没权限,可以使用root编译
tar -zxvf protobuf-2.5.0.tar.gz -C /usr/local/
cd protobuf-2.5.0/
# 如果使用的不是源码,而是release版本 (已经包含gmock和configure脚本),可以略过这一步
./autogen.sh
#可能报错http://googletest.googlecode.com 链接失败因为是国外网站
#修改autogen.sh将googletest改为github
vim autogen.sh
# ---curl http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2 | tar jx
# ---mv gtest-1.5.0 gtest
#Add the new path to download the google test with redirection since gihub redirects
  curl -L https://github.com/google/googletest/archive/release-1.5.0.tar.gz | tar zx
  mv googletest-release-1.5.0 gtest
# 指定安装路径
./configure --prefix=/usr/local/protobuf
make
make install
#设置一下环境变量 /etc/profile.d/protobuf.sh
  1. 编译Tez
#cd到tez的解压目录
mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true
  1. 编译成功后,包会在/opt/module/tez-branch-0.10.1/tez-dist/target目录下,我们需要的是这连两个
    在这里插入图片描述

二、为Hive配置Tez了

1.将tez安装包拷贝到集群,并解压tar包,注意解压的是minimal

mkdir /opt/module/tez
tar -zxvf /opt/module/tez-branch-0.10.1/tez-dist/target/tez-0.10.1-minimal.tar.gz -C /opt/module/tez

2.上传tez依赖到HDFS

hadoop fs -mkdir /tez(集群创建/tez路径,然后再上传,注意路径)
hadoop fs -put /opt/module/tez-branch-0.10.1/tez-dist/target/tez-0.10.1.tar.gz /tez

3.新建tez-site.xml在$HADOOP_HOME/etc/hadoop/路径下(注意,不要放在hive/conf/目录下,不生效),记得把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}/tez/tez-0.10.1-SNAPSHOT.tar.gz</value>
</property>
<property>
     <name>tez.use.cluster.hadoop-libs</name>
     <value>true</value>
</property>
<property>
     <name>tez.am.resource.memory.mb</name>
     <value>1024</value>
</property>
<property>
     <name>tez.am.resource.cpu.vcores</name>
     <value>1</value>
</property>
<property>
     <name>tez.container.max.java.heap.fraction</name>
     <value>0.4</value>
</property>
<property>
     <name>tez.task.resource.memory.mb</name>
     <value>1024</value>
</property>
<property>
     <name>tez.task.resource.cpu.vcores</name>
     <value>1</value>
</property>
</configuration>

4.修改Hadoop环境变量

vim $HADOOP_HOME/etc/hadoop/shellprofile.d/tez.sh

添加Tez的Jar包相关信息,如果最后没成功,把这个配置写example.sh中也可以

hadoop_add_profile tez
function _tez_hadoop_classpath
{
    hadoop_add_classpath "$HADOOP_HOME/etc/hadoop" after
    hadoop_add_classpath "/opt/module/tez/*" after
    hadoop_add_classpath "/opt/module/tez/lib/*" after
}

5.到hive的hive-site.xml中添加参数

<property>
	<name>hive.tez.container.size</name>
    <value>1024</value>
</property>

如果不参加这个参数,tez任务会一直卡主:
在这里插入图片描述
yarn的container日志可以看到报错:
Invalid resource request, requested resource type=[memory-mb] < 0 or greater than maximum allowed allocation. Requested resource=<memory:-1, vCores:1>, maximum allowed allocation=<memory:4096, vCores:4>, please note that maximum allowed allocation is calculated by scheduler based on maximum resource of registered NodeManagers, which might be less than configured maximum allocation=<memory:4096, vCores:4>

6.在hive-env.sh中添加tez的路径

export TEZ_HOME=/opt/module/tez    #是你的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=/opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.21-SNAPSHOT.jar$TEZ_JARS

这样就可以在hive跑tez任务了

参考链接:https://blog.csdn.net/Hello_Java2018/article/details/106036782

三、TEZ参数调优问题

一、AM、Container大小设置
1、tez.am.resource.memory.mb #设置 tez AM容器内存
默认值:1024 
 配置文件:tez-site.xml
建议:不小于或者等于yarn.scheduler.minimum-allocation-mb值。

2、hive.tez.container.size #设置 tez container内存
默认值:-1
 默认情况下,Tez将生成一个mapper大小的容器。这可以用来覆盖默认值。
 配置文件:hive-site-xml
建议:不小于或者是yarn.scheduler.minimum-allocation-mb的倍数

二、AM、Container JVM参数设置
1、tez.am.launch.cmd-opts #设置 AM jvm,启动TEZ任务进程期间提供的命令行选项。
默认值:-XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps -XX:+UseNUMA -XX:+UseParallelGC(用于GC),默认的大小:80%*tez.am.resource.memory.mb
配置文件:tez-site.xml
建议:不要在这些启动选项中设置任何xmx或xms,以便tez可以自动确定它们。

2、hive.tez.java.ops #设置 container jvm
默认值:Hortonworks建议“–server –Djava.net.preferIPv4Stack=true–XX:NewRatio=8 –XX:+UseNUMA –XX:UseG1G”,默认大小:80%*hive.tez.container.size
说明:在hive 2.x的官方文档中没有找到这个参数。看有些博客里面有这个值。
配置文件:hive-site.xml

3、tez.container.max.java.heap.fraction #设置task/AM占用jvm内存大小的比例。
默认值:0.8
配置文件:tez-site.xml
说明:这个值按具体需要调整,当内存不足时,一般都要调小。

三、Hive内存Map Join参数设置
1、tez.runtime.io.sort.mb #设置输出排序内存大小
默认值:100
配置文件:tez-site.xml
建议:40%hive.tez.container.size,一般不超过2G
2、hive.auto.convert.join.noconditionaltask #是否将多个mapjoin合并为一个
默认值:true
建议使用默认值。
配置文件:hive-site.xml
3、hive.auto.convert.join.noconditionaltask.size
默认值:10000000 (10M)
说明:这个参数使用的前提是hive.auto.convert.join.noconditionaltask值为true,多个mapjoin转换为1个时,所有小表的文件大小总和小于这个值,这个值只是限制输入的表文件的大小,并不代表实际mapjoin时hashtable的大小。 建议值:1/3
hive.tez.container.size
配置文件:hive-site.xml
4、tez.runtime.unordered.output.buffer.size-mb #如果不直接写入磁盘,使用的缓冲区大小
默认值:100M
建议:10%* hive.tez.container.size
配置文件:tez-site.xml

5、tez.am.container.reuse.enabled #容器重用
默认值:true
配置文件:tez-ste.xml

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值