hive集群tez引擎执行任务卡住

文章指导在更换Tez引擎后,若遇到执行任务卡顿,需修改tez-site.xml中的AM和task资源配置,并调整yarn.capacity-scheduler.xml中AM占用的最大资源比例,以提升性能并避免资源瓶颈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更换tez引擎后,如果执行任务卡住,修改调节容量调度器的资源调度策略,修改以下配置信息

cd /opt/module/hadoop-3.1.3/etc/hadoop/ 
vim tez-site.xml 
<!--容器给AM分配的资源-->
 <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>
 <!--容器给task分配的资源 -->
 <property>
      <name>tez.task.resource.memory.mb</name>
      <value>1024</value>
 </property>
 <property>
      <name>tez.task.resource.cpu.vcores</name>
      <value>1</value>
 </property>
vim capacity-scheduler.xml

将以下value调成1

 <!--AM所占集群最大资源占比-->
   <property>
     <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
     <value>1</value>
     <description>
       Maximum percent of resources in the cluster which can be used to run 
       application masters i.e. controls number of concurrent running
       applications.
     </description>
   </property>

向集群分发capacity-scheduler.xml文件。

<think>好的,用户遇到了Tez引擎执行任务时SLF4J绑定冲突的问题,需要解决。首先,我得回忆一下SLF4J绑定冲突通常是什么原因引起的。SLF4J作为日志门面,需要与具体的日志实现(比如Log4j、Logback等)绑定,但如果类路径中存在多个绑定库,就会导致冲突。用户提到的引用[2]里提到要删除Tez的log4j包,这应该是一个关键点。 接下来,我需要检查用户提供的引用内容。引用[2]建议删除Tez中的slf4j-log4j12-1.7.10.jar,这应该是移除重复绑定的步骤。而引用[1]提到设置Hadoop的类路径包含Tez的库,可能在配置过程中引入了多个日志实现的JAR文件。引用[3]中的错误信息显示任务执行失败,可能与类路径冲突有关。引用[4]修改了JobContextImpl.java,可能与类加载顺序有关,但用户的问题更直接的是SLF4J冲突。 解决这个问题的步骤应该包括:确认冲突的具体JAR文件,移除多余的绑定,确保只保留一个SLF4J实现。比如,检查TezHadoopHive等组件的依赖中是否有重复的slf4j-log4j12或类似的JAR。用户已经执行了删除Tez中的slf4j-log4j12-1.7.10.jar,可能需要进一步检查其他组件的类路径是否有冲突的JAR。 此外,用户可能需要检查依赖树,使用Maven或Gradle的依赖分析工具,排除重复的依赖。或者,在配置文件中设置类加载顺序,让用户自定义的类库优先,避免使用系统路径中的冲突库。引用[4]中的修改可能涉及类加载优先级,但用户的问题更侧重于SLF4J绑定,所以可能需要代码级别的修改,而是依赖管理。 最后,验证解决方案是否有效,可以通过执行任务查看是否还有SLF4J警告,或者任务是否成功运行。需要确保所有节点上的配置一致,避免某些节点仍有冲突的JAR残留。</think>### 解决Tez引擎任务执行时SLF4J绑定冲突的步骤 #### 1. **定位冲突的JAR包** - SLF4J绑定冲突通常由类路径中存在多个日志实现库(如`slf4j-log4j12`、`logback-classic`等)导致。例如,Tez可能自带`slf4j-log4j12-1.7.10.jar`,而HadoopHive的依赖中可能包含其他版本的同名JAR[^2]。 - 使用命令检查类路径中的重复JAR: ```bash hadoop classpath | tr ':' '\n' | grep slf4j-log4j ``` #### 2. **移除冗余的SLF4J绑定** - **删除Tez的冲突JAR**(如引用[2]所述): ```bash rm -rf /opt/tez/lib/slf4j-log4j12-*.jar # 根据实际路径调整 ``` - **检查HadoopHive的依赖**: - 确保Hadoop的`lib`目录下没有重复的`slf4j-log4j`包。 - 若Hive依赖冲突,可在其配置中排除相关依赖(如通过Maven的`<exclusion>`标签)。 #### 3. **统一日志框架依赖** - 如果系统使用Log4j 1.x,保留`slf4j-log4j12`;若升级到Log4j 2.x,需替换为`log4j-slf4j-impl`。 - 示例:在HiveTez的配置中显式声明依赖版本: ```xml <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.30</version> <scope>provided</scope> </dependency> ``` #### 4. **调整类加载顺序(可选)** - 若冲突无法彻底清除,可配置Hadoop的类加载策略,使用户依赖优先加载: ```bash # 在hive-site.xml中添加 <property> <name>mapreduce.job.user.classpath.first</name> <value>true</value> </property> ``` 此配置确保用户提供的JAR优先于系统库加载[^4]。 #### 5. **验证配置** - 执行Tez任务时观察日志,若再出现`SLF4J: Class path contains multiple SLF4J bindings`警告,则冲突已解决。 - 示例任务测试: ```sql SELECT COUNT(*) FROM your_table; -- 替换为实际表名 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值