吐血经验在 windows 上安装 spark 遇到的一些坑 | 避坑指南

Posted Piper蛋窝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了吐血经验在 windows 上安装 spark 遇到的一些坑 | 避坑指南相关的知识,希望对你有一定的参考价值。

在 windows 上安装 spark 遇到的一些坑 | 避坑指南

Ricky Kharawala @ unsplash.com

最近有个活:给了我一个阿里云桌面(windows 10系统),让我在上面用 scala + spark 写一些东西。

总是报错不断,基本的逻辑都运行不了。经历了很久的 debug ,我总结出来:凡是 IDEA 没有在我的脚本里明确指出哪行有问题的错误,都是因为版本不兼容。别犹豫,赶快检查版本。

检查涉及到:

  • 基本的 java 环境: 1.8.0_201
  • 语言 scala 版本: 2.12.13
  • hadoop 版本: 2.6.4
  • spark 版本: 2.4.8

第一关:scala小版本不兼容

尽管我们在 spark 官网看到:Spark 2.4.8 配置 Scala 2.12.x 版本就行,但是呵呵,运行时报错如下。

... java.lang.NoSuchMethodError: scala.Predef$.refArrayOps ...

我本身刚开始用 scala ,还以为是自己写的程序哪里出了问题。好家伙这顿找哇,最后感谢『运行spark出现java.lang.NoSuchMethodError: scala.Predef$.refArrayOps』,让我意识到了或许更换 scala 版本可以一试。

上面那篇文章建议在 mvnrepository.com/artifact/org.apache.spark/spark-core 上面看版本兼容,我觉得不靠谱。我这里推荐两个方法,都是我自己摸索的:

方法一: 打开我们的命令行(cmd或者powershell都行),输入 spark-shell ,看我们本地安装的 spark 用了啥版本的 scala 。如下图。

用了 2.11.12 版本的 Scala

方法二: 去 spark 安装路径下面看看里面那 scala 依赖都啥版本。如下图。

于是把 scala 2.12.13 卸载了,去 scala 官网下载了 scala 2.11.12 版本的。

第二关:Hadoop 版本

好家伙,之前的错误不报了,现在是新错误。

错误一:
... java.lang.Exception: java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows. ...

错误二:
... 【MapReduce】报错:java.lang.UnsatisfiedLinkError : org.apache.hadoop.io.nativeio ...

参考了两篇文章,没啥直接帮助,但是我意识到了可能是 Hadoop 版本不对:

毕竟咱的 spark 安装包就叫 spark-2.4.8-bin-hadoop2.7 ,怎么说都得安装个 2.7hadoop

换了 hadoop 2.7.3 。没啥问题了。

第三关:hadoop.dll

本以为大功告成了。直到我使用了一个方法:

result.coalesce(1).write.mode(SaveMode.Overwrite).csv(outputPath)

我想通过 spark 把数据写到硬盘上,好家伙,报错了。

... java.io.IOException: (null) entry in command string: null chmod 0644 ...

我又以为是自己对 API 理解不深刻造成的问题,于是乱改了半天。

直到我想起:凡是 IDEA 没有在我的脚本里明确指出哪行有问题的错误,都是因为版本不兼容。 我现在虽然版本没问题了,但是可能还有其他地方没配好。至少,很大概率不是自己写的代码有问题。

感谢老哥『Hadoop在window上运行出现:java.io.IOException: (null) entry in command string: null chmod 0644』,我安装老哥的指引在 github.com/4ttty/winutils/blob/master/hadoop-2.7.1/bin 下载了动态链接库 hadoop.dll ,放在了 C:/Windows/System32 下面。

我的版本本来是 2.7.3 ,但下载的版本是 2.7.1 (没有 2.7.3 ),心里祈祷:小版本兼容吧,小版本兼容吧。终于是好用了。

总结

不知道以后还会遇到什么版本问题。

归根结底,还是自己对于 Spark 极其依赖、生态不熟悉,如果是 Python 报错,我一下就能看出来是自己代码的问题,还是环境有问题。所以还是得系统了解一下 Spark 相关内容。学习系统性知识将让我的工作事半功倍。

还有,能用 linux 尽量用 linux 吧,把 docker 配好,谁要用直接拉镜像,剩多少事啊。但是话说回来,要是直接帮我配好了环境,我就学不到这么多了。

我是小拍,微信 PiperLHJ , 想要建一个 spark/scala/hadoop/大数据技术栈 群 ,想入伙的小伙伴加我微信 PiperLHJ 。

老铁别忘了给个关注、点赞。

以上是关于吐血经验在 windows 上安装 spark 遇到的一些坑 | 避坑指南的主要内容,如果未能解决你的问题,请参考以下文章

windows安装oracle遇INS 30131 错误

吐血整理三年老Java经验面经

Spark吐血整理,学习与面试收藏这篇就够了!

如何在 Windows 机器上设置 Spark 集群?

spark可以在windows下运行吗

八年测试经验,吐血整理出Selenium无法定位元素的几种解决方案