You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

每次运行Spark(Scala)作业时Tez会话重复创建问题排查求助

Spark作业触发Tez会话的排查思路

1. 排查Spark与Hive的隐式关联

  • 检查Spark核心配置文件:查看spark-defaults.conf中spark.sql.catalogImplementation的值,HDP集群默认是hive,即使未显式初始化HiveContext,SparkSession也会自动启用Hive元数据支持,部分元数据操作或SerDe处理会触发Tez会话。
  • 确认Hive配置是否被Spark加载:检查Spark的classpath中是否包含hive-site.xml,HDP默认会将Hive配置注入Spark运行环境,可能导致隐式依赖Hive执行逻辑。
  • 查看列式存储转换配置:检查spark.sql.hive.convertMetastoreParquet、spark.sql.hive.convertMetastoreOrc是否关闭,若关闭,Spark会调用Hive原生SerDe处理文件,进而触发Tez。

2. 分析Spark SQL的执行路径

  • 单独测试SQL语句:将作业中的SQL用spark-sql命令直接执行,观察是否触发Tez作业,以此判断是否是SQL本身依赖Hive特有的功能(如Hive UDF、自定义SerDe、管理表查询)。
  • 查看Spark UI执行计划:在Spark UI的SQL标签页,检查执行计划是否包含HiveTableScan、HiveSerDe节点,这类节点说明Spark在复用Hive执行逻辑,可能触发Tez。

3. 检查集群集成配置

  • 查看Ambari中的Spark配置:确认spark.yarn.dist.jars或spark.driver.extraClassPath是否强制包含Tez、Hive相关依赖包(如tez-client.jar、hive-exec.jar),不必要的依赖可能导致Tez客户端被初始化。
  • 对比YARN作业信息:查看Tez作业的提交者、启动命令和参数,和Spark作业的信息做对比,确认Tez作业是否由Spark的Driver或Executor进程触发。

4. 排查自定义代码与依赖

  • 检查作业依赖包:扫描作业打包的jar包,确认是否包含Hive或Tez相关依赖,部分第三方数据处理库可能隐式依赖Hive执行引擎。
  • 检查代码逻辑:确认代码中是否间接调用了org.apache.hadoop.hive包下的类,或通过反射触发Hive相关功能,这类操作可能在Spark作业启动时初始化Tez会话。

5. 验证Tez作业的实际用途

  • 查看Tez作业日志:通过yarn logs -applicationId <tez-application-id>获取Tez作业日志,分析其执行的具体任务(如元数据查询、表结构同步),反推触发原因。
  • 临时禁用Hive Catalog:提交Spark作业时添加--conf spark.sql.catalogImplementation=in-memory,观察是否还会启动Tez作业,验证是否是Hive元数据支持导致的问题。

内容的提问来源于stack exchange,提问作者Shubham Acharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:10:31