Scala中创建SparkSession时出现java.lang.InterruptedException求助
解决SparkSession初始化时的InterruptedException问题
我来帮你捋捋这个问题哈,你遇到的这个InterruptedException一般和线程中断、资源等待超时或者环境配置这块有关,结合你的Scala 2.11.12、Spark 2.3.0、Java 1.8.0_161版本环境,给你几个实用的排查和解决方向:
调整SparkSession的构建方式
你当前的代码是直接在builder里new SparkConf,试试把配置拆分出来,同时加上明确的AppName,避免初始化时的潜在线程冲突:val conf = new SparkConf() .setMaster("local[*]") .setAppName("MySparkApp") // 新增AppName,让Spark上下文标识更清晰 val spark = SparkSession.builder() .config(conf) .enableHiveSupport() .getOrCreate()排查Hive支持的配置问题
因为你启用了enableHiveSupport(),Spark会尝试初始化Hive元数据存储,很可能是等待metastore连接超时导致线程被中断:- 先临时注释掉
enableHiveSupport(),重新运行sbt run,如果不再报错,那问题肯定出在Hive配置上。 - 如果确实需要Hive支持,确保项目的
src/main/resources目录下有正确的hive-site.xml配置文件;或者直接在SparkConf里指定metastore地址(如果本地运行了Hive metastore服务):conf.set("hive.metastore.uris", "thrift://localhost:9083") - 要是不需要Hive功能,直接去掉
enableHiveSupport()就行。
- 先临时注释掉
调整JVM参数缓解超时问题
线程等待被中断可能是JVM堆内存不足或者超时时间太短,你可以在build.sbt里添加这些JVM参数:javaOptions ++= Seq( "-Xmx4g", // 增大堆内存,避免内存不足导致的线程异常 "-Dspark.sql.hive.metastore.timeout=300", // 延长Hive metastore连接超时时间,单位秒 "-Djava.net.preferIPv4Stack=true" // 规避IPv6可能带来的网络连接问题 )检查Java环境的一致性
虽然你用的是Spark 2.3.0支持的Java 8,但要确保系统的Java环境变量没冲突,终端里运行java -version和javac -version确认输出的版本都是1.8.0_161。清理sbt缓存重新构建
有时候sbt的缓存文件可能出问题,试试执行以下命令清理后重新构建:sbt clean sbt compile sbt run
内容的提问来源于stack exchange,提问作者jamiet
相关产品推荐
相关产品推荐

