Spark 错误问题

1. 在windows下启动spark程序,报错如下

java.io.IOException: (null) entry in command string: null chmod 0644 C:\Users\xxxx\AppData\Local\...

或者如下错误

java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

解决方式:

  • 创建目录:D:\setup\hadoop 用来保存hadoop相关文件
  • https://github.com/steveloughran/winutils.git下载相关文件,注意hadoop版本,我的是3.0.0,所有使用hadoop-3.0.0文件夹下的文件
  • 把hadoop-3.0.0下的文件copy到D:\setup\hadoop
  • 配置环境变量:HADOOP_HOME=D:\setup\hadoop path添加 %HADOOP_HOME%\bin

2. spark程序提交到集群,报NoClassDefFoundError: scala/runtime/LambdaDeserialize错误

如果程序在集群运行时,报如下错误

Caused by: java.lang.NoClassDefFoundError: scala/runtime/LambdaDeserialize

基本上是由于集群的spark使用的scala版本与本地编译时使用的版本不一致导致的。
通过集群环境执行spark-shell,可以看到集群使用的scala版本为2.11.12

[hadoop@lfg01 ~]$ spark-shell
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://lfg01:4040
Spark context available as 'sc' (master = local[*], app id = local-1571298365414).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.4
      /_/

Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_201)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

所以,本地开发环境上,下载scala 2.11.12,修改idea的sdk为2.11.12,重新打包、上传即可。

推荐阅读更多精彩内容