• 【吐血经验】在 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 。

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

  • 相关阅读:
    第3章 MFC框架程序剖析
    第2章 掌握C++
    第1章 Windows程序内部运行机制
    【MFC】画线
    使用RegSetValueEx修改注册表时遇到的问题(转)
    读书笔记
    POJ 1182[并查集]
    读书笔记
    HihoCoder 1532 : 最美和弦
    HihoCode 1531 : 德国心脏病
  • 原文地址:https://www.cnblogs.com/piperliu/p/14882731.html
Copyright © 2020-2023  润新知