解决Spark本地sbt run时hadoop-client-api文件不存在的无害错误
解决Spark本地运行时
java.nio.file.NoSuchFileException无害错误的隐藏方法 针对你遇到的本地执行sbt run时出现的hadoop-client-api-xxx.jar找不到的无害异常,以下是几种直接有效的隐藏方案:
1. 针对性调整日志级别(推荐)
这个异常通常是Hadoop文件系统组件输出的低级日志,你可以通过修改日志配置,将对应类的日志级别调高,从而屏蔽这条错误:
若使用Log4j(Spark默认日志框架)
在项目的src/main/resources/log4j.properties中添加:
# 屏蔽Hadoop文件系统相关的低级日志 log4j.logger.org.apache.hadoop.fs=ERROR
如果项目中没有该配置文件,可复制Spark安装目录下的log4j.properties.template到项目资源目录后再修改。
若使用Logback
在src/main/resources/logback.xml中添加:
<logger name="org.apache.hadoop.fs" level="ERROR" additivity="false"> <appender-ref ref="console"/> </logger>
临时生效方式(无需修改配置文件)
运行sbt时通过JVM参数直接指定日志级别:
sbt -J-Dlog4j.logger.org.apache.hadoop.fs=ERROR run
2. 显式配置本地Hadoop文件系统实现
在Spark应用代码中指定本地文件系统的实现类,避免程序去查找不存在的HDFS相关依赖:
import org.apache.spark.SparkConf import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.LocalFileSystem object YourSparkApp { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("YourApp").setMaster("local[*]") // 配置Hadoop本地文件系统 val hadoopConf = new Configuration() hadoopConf.set("fs.file.impl", classOf[LocalFileSystem].getName) conf.set("spark.hadoop.conf", hadoopConf) val sc = new org.apache.spark.SparkContext(conf) // 业务代码逻辑... sc.stop() } }
3. 调整SBT全局日志级别(不推荐)
如果上述方案无效,可直接将SBT的全局日志级别设为ERROR,但这会屏蔽所有警告信息,可能错过其他有用提示:
sbt -error run
内容的提问来源于stack exchange,提问作者Hongbo Miao
相关产品推荐
相关产品推荐

