tez on yarn配置任务优先级

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tez on yarn配置任务优先级相关的知识,希望对你有一定的参考价值。

参考技术A 一、现状
当前yarn上任务只有队列间的资源抢占,队列内缺乏任务优先级配置,因此所有任务的优先级都是默认的,默认优先级的配置通过此参数配置yarn.scheduler.capacity.root.<leaf-queue-path>.default-application-priority,默认值为0;此外hive on tez的任务在maper阶段会尽可能申请所需的最大资源来运行,极端情况下如果存在一个有问题的任务一直占用集群所有资源会导致其他任务都无法运行,因此需要一种方式能够让重要的任务尽可能的抢占到资源。
当前yarn的队列资源调度使用的是capacity容量调度器,该调度器支持队列间和队列内抢占的,当前的集群配置也是启用了两类抢占方式的,但队列内的抢占依赖任务的优先级,从网上找到的内容是需要在任务运行前配置SET mapreduce.job.priority=50,尝试过没有效果,造成无效有两个原因:
一是最大优先级参数(yarn.cluster.max-application-priority)没有配置,hadoop官网可以查到该值得默认值是0,设置为大于最大优先级的值时均按最大优先级设置;
二是tez中设置任务优先级的参数确实不是mapreduce.job.priority,通过查看tez源码发现对应的参数应该为tez.am.application.priority,该值越大代表获取资源的优先级越高。

二、集群配置
增加最大优先级参数配置yarn.cluster.max-application-priority=100;意味着在配置任务优先级tez.am.application.priority时值不能大于该值。

三、使用方式
在hive sql运行前配置set tez.am.application.priority=【0到100之间的数字】
验证方式: 在yarn页面中找到对应任务,查看Application Priority值是否为配置的值。

配置 Hive On Tez

配置 Hive On Tez

标签(空格分隔): hive


Tez 部署底层应用

简单介绍

介绍:tez 是基于hive 之上,可以将sql翻译解析成DAG计算的引擎。基于DAG 与mr 架构本身的优缺点,tez 本身经过测试一般小任务在hive mr 的2-3倍速度左右,大任务7-10倍左右,根据情况不同可能不一样。

对于 Tez-0.9.0 以及更高版本, Tez 需要 Apache Hadoop 版本为 2.7.0 或更高

安装 Apache Hadoop 2.7.0 或更高版本,这里选取Tez-0.9.1 版本,在Centos 系统上编译,需要通外网,编译环境准备需要按照之前:

@https://www.cnblogs.com/hit-zb/p/10643240.html

Apache tez 官网:https://tez.apache.org/

Apache Tez 0.9.1 下载地址:@http://mirror.bit.edu.cn/apache/tez/0.9.1/apache-tez-0.9.1-src.tar.gz

编译 tez

编译环境准备完毕的情况下:

cd apache-tez-0.9.0-src
mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true

关于maven 的更多使用方法 ,请见:@https://yuzhouwan.com/posts/2254/

安装Tez 到hive

拷贝 tez 相关 tarball 到 HDFS, 并且配置 tez-site.xml

cd apache-tez-0.9.0-src/tez-dist/target


ls
archive-tmp  maven-archiver  tez-0.9.0  tez-0.9.0-minimal  tez-0.9.0-minimal.tar.gz  tez-0.9.0.tar.gz  tez-dist-0.9.0-tests.jar

我们需要将tez-0.9.0-minimal.tar.gz 拷贝到HDFS 中某目录下

hadoop fs -mkdir /app/
hadoop fs -copyFromLocal tez-dist/target/tez-x.y.z-minimal.tar.gz /app/

确保 tez.use.cluster.hadoop-libs 不被设置在 tez-site.xml 中, 如果设置了那么值应该为 false

将tez-0.9.0.tar.gz 移动到本地 /app/tez 相当于与 app/hive

同级别。tez 为link (软连接)
tez-site.xml

[email protected]:/app/apache-tez-0.9.0/conf$ cat tez-site.xml 
<configuration>
    <property>
        <name>tez.lib.uris</name>
        <value>hdfs://flashHadoop/user/tez/tez.tar.gz</value>  <!-- 这里指向hdfs上的tez.tar.gz包 -->
    </property>
    <property>
        <name>tez.use.cluster.hadoop-libs</name>
        <value>true</value>
    </property>
    <property>
        <name>tez.runtime.compress</name>
        <value>false</value>
    </property>
    <property>
        <name>tez.runtime.compress.codec</name>
        <value>org.apache.hadoop.io.compress.SnappyCodec</value>
    </property>
    
    以下忽略,tez-ui 使用
<property>
? ? <name>tez.history.logging.service.class</name>
? ? ? <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
?</property>

<property>
? ? <name>tez.tez-ui.history-url.base</name>
? ? ? <value>http://VECS01121:8080/tez-ui/</value>
?</property>

<property>
    <name>tez.am.tez-ui.history-url.template</name>
    <value>__HISTORY_URL_BASE__/#/tez-app/__APPLICATION_ID__</value>
  </property>
  <property>
    <name>tez.am.acls.enabled</name>
    <value>false</value>
  </property>

</configuration>

配置客户端节点的 hadoop classpath 包含 tez-libraries 到 hadoop classpath 中

export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_HOME}/*:${TEZ_CONF_DIR}:${TEZ_HOME}/lib/*

当设置 classpath 路径中有包含 jars 的目录, 注意 “*” 是非常重要的
在 tez-examples.jar 中有使用 MRR 的基础示例, 参照源码的 OrderedWordCount.java, 运行示例: …
可以使用类似以下示例提交 MR 作业 …

hive> set hive.execution.engine=tez;
hive> 

问题:

1, tez-ui 编译失败, 从 apache 下载已编译好的包使用了算
2,tez 大任务oom.设置不检查虚拟内存或者调大与物理内存比例解决.

以上是关于tez on yarn配置任务优先级的主要内容,如果未能解决你的问题,请参考以下文章

你应该知道Tez比MapReduce好用

Flink On Yarn模式,为什么使用Flink On Yarn?Session模式Per-Job模式关闭yarn的内存检查,由Yarn模式切换回standalone模式时需要注意的点

kerberos环境下parcel方式部署flink1.15.3 基于CDH6.3.2 Flink on Yarn

配置 Hive On Tez

Hadoop大数据技术Yarn 案例实操

Spark On Yarn的两种模式yarn-cluster和yarn-client深度剖析