Scala Spark运行WordCount报Tracer$Builder类未找到错误如何解决
问题根因
- 依赖的htrace组件groupId、版本完全不匹配:你引入的
org.htrace:htrace-core:3.0.4是Apache接管htrace项目之前的旧版本,包路径为org.htrace.core,和报错缺失的org.apache.htrace.core.Tracer$Builder路径完全不符,无法匹配。 - 引入的hbase依赖无效:你加的
org.apache.hbase:hbase:2.4.5是pom类型的父模块,不会引入任何实际的业务依赖,除非你确实使用HBase,否则该依赖完全多余。 - 依赖版本冲突:你同时引入了htrace-core 3.x和htrace-hbase 4.x,两个大版本不兼容,反而会导致类加载异常。
解决方案
方案1:替换正确的htrace依赖
首先删除你当前pom.xml中已添加的3个错误依赖,替换为匹配Hadoop版本的htrace核心包:
<!-- 适配Hadoop 2.8+/3.x版本所需的htrace核心包 --> <dependency> <groupId>org.apache.htrace</groupId> <artifactId>htrace-core4</artifactId> <version>4.1.0-incubating</version> <!-- 若提交到已内置该依赖的Spark集群运行,放开下面的scope配置 --> <!-- <scope>provided</scope> --> </dependency>
如果确实需要使用HBase,替换原有的pom类型hbase依赖为具体的功能模块,同时排除旧版本htrace传递依赖:
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.4.5</version> <exclusions> <exclusion> <groupId>org.htrace</groupId> <artifactId>htrace-core</artifactId> </exclusion> </exclusions> </dependency>
方案2:临时规避(无需改依赖)
如果只是本地调试,不想调整依赖,可以在初始化FileSystem之前关闭Hadoop的tracing功能,跳过该类加载:
// 添加在你调用FileSystem.get之前 spark.sparkContext.hadoopConfiguration.set("hadoop.tracing.enabled", "false") FileSystem.get(spark.sparkContext.hadoopConfiguration).delete(new Path(outputFile), true)
排查验证
调整后可执行以下命令检查依赖冲突:
mvn dependency:tree | grep htrace
确保输出中仅存在一个版本的org.apache.htrace:htrace-core4依赖即可。
内容的提问来源于stack exchange,提问作者CloudSparkie
相关产品推荐
相关产品推荐

