必须先安装jdk 11+(非jre),再用coursier执行cs install scala:3.3.3安装scala 3;jdk 8或仅装jre会导致noclassdeffounderror等错误,且spark等大数据组件目前仍不支持scala 3字节码。

必须先确认 JDK 版本,否则 scala 命令根本起不来
Scala 3(如 scala:3.3.3)**只支持 JDK 11+**,JDK 8 或 JRE 都会直接报错:NoClassDefFoundError 或 UnsupportedClassVersionError。别跳过这步——很多“安装失败”其实卡在这儿。
- 运行
java -version和javac -version,两个输出都得是11、17或21(LTS 版本最稳) - 没装或版本低:Ubuntu/Debian 执行
sudo apt install openjdk-17-jdk;CentOS/RHEL 用sudo dnf install java-17-openjdk-devel - 手动解压 JDK 的用户,
JAVA_HOME必须指向 JDK 根目录(含bin/javac),不是jre/子目录;验证:echo $JAVA_HOME非空且$JAVA_HOME/bin/javac可执行
用 coursier 安装 Scala 3 是当前最干净的方式
官方已弃用传统 tar 包分发,cs 能自动处理 scalac、scala REPL 和 scaladoc,还避免路径冲突。别再下载 scala-3.x.x.tgz 手动解压了。
- 对 x86_64 机器,执行:
curl -fL https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-linux.gz | gzip -d > cs && chmod +x cs && ./cs setup - 它会自动读取
JAVA_HOME,把二进制软链接到~/.local/bin/;记得把该路径加进PATH(比如写入~/.bashrc) - 验证:
scala -version应输出类似Scala code runner version 3.3.3;注意:别用cs install scala@3——它默认装旧版,要写全cs install scala:3.3.3
想用 Scala 3 写 Spark 作业?得绕开几个硬坑
Spark 3.5.0 仍以 Scala 2.12/2.13 为主流,直接提交 Scala 3 字节码大概率在 YARN/Flink 上崩溃,不是语法问题,而是反射和字节码层面不兼容。
- 开发阶段可用 Scala 3 写逻辑,但打包时必须加编译参数:
-target:jvm-11,否则生成的字节码 Spark runtime 无法加载 -
spark-shell本身是 Scala 2.x 启动的,不能直接输入 Scala 3 语法(比如def f(x: Int): Int = x * 2会报错;得退化成def f(x: Int) = x * 2) - 真实跑通需用 sbt,且
build.sbt中明确写:scalaVersion := "3.3.3"+libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.5.0" % "provided",并禁用 Scala 3 特有语法(如enum、given/using)
手动解压方式只适用于 Scala 2.x,且顺序和路径极易出错
如果非要用传统 tar 包(比如维护老项目),必须严格按顺序操作,且环境变量配置稍有偏差就失效。
- 顺序不能颠倒:先下载上传(如到
/export/software/),再解压(tar -zxvf scala-2.13.13.tgz -C /export/servers/);直接解压会因文件不存在失败 - 环境变量必须写全:
export SCALA_HOME=/export/servers/scala-2.13.13和export PATH=$PATH:$SCALA_HOME/bin;漏掉任一值或路径写错(比如多一个斜杠、少一个版本号)都会导致scala命令 not found - 生效后要重新开终端,或手动
source ~/.bashrc;source /etc/profile对非 root 用户无效
真正麻烦的不是安装命令本身,而是 JDK 版本与 Scala 版本的隐式绑定、以及大数据生态对 Scala 3 的滞后支持——这两点踩中任何一个,都会让看似成功的安装在实际运行时崩掉。











