macOS安装Spark时遇到的问题

由于 spark-shell 报错的问题了解到Apache spark官方不支持 Java 10 ,而系统里装的却是最新的 Java 11。折腾了半天算是把整个安装流程走通了。做个笔记mark一下。

首先对于 Java 版本的问题,在终端可以先自检系统里的 Java 版本号

$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

1. 卸载当前使用的Java

macOS在 System Preference 里可以找到 Java 图标,点开后会弹出 Java control panel ,但没有发现能够卸载 java的按钮。那只好找官方文档看看了:(https://www.java.com/en/download/help/mac_uninstall_java.xml)

两种办法卸载当前版本

  • 下载官方的 Java Uninstall Tool
  • 以管理员身份在终端执行命令:
    • sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
    • sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane
    • sudo rm -fr ~/Library/Application\ Support/Oracle/Java

但是,此时用$ java -version 查询 Java 的版本号,还是之前的版本,为什么呢?

印度小哥的视频:https://youtu.be/a-aW1pKvLsg

macOS系统下默认读取/Library/Java/JavaVirtualMachines 路径下的.jdk 文件,自动读取最高版本的 Java。我们只需要到这个路径下把正在使用的版本对应的.jdk文件。这样该版本Java 就被删除了(需要管理员身份)。

此时系统没有里没有Java,如果再次查询Java的版本号:

$ java -version
No Java runtime present, requesting install.

2. 安装Java

由于甲骨文公司已经将Java 8 从官网上下架,用brew 来安装 Java8 会出现"无法发现名为"java8"可用的cask"。对于这个问题有两种解决方法,首先先把Java8的包下载下来

Java 8下载地址(需要注册登录):https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

对于brew cask的安装方法较为复杂,推荐直接用下载的包直接双击安装。

  • brew安装 Java

    参考:https://github.com/Homebrew/homebrew-cask-versions/issues/7253#issuecomment-484356654

    • 首先用PythonSimpleHTTPServer 做一个简单的Web服务器

      SimpleHTTPServer是Python 2自带的一个模块,是Python的Web服务器。它在Python 3已经合并到http.server模块中。SimpleHTTPServer在Python 3的用法与在Python 2的用法相似(python3 -m http.server 6789), 本文以Python 2为例。

      使用时还要注意防火墙因素。

      进入Java 安装包所在目录,在终端执行:

      $ python -m SimpleHTTPServer 8000
      

      此时可以通过localhost:8000/进行访问该目录下的文件。

    • 运行以下命令,使brew可以根据版本号来安装包

      $ brew tap caskroom/versions
      
    • 在Homebrew的Taps目录下找到Caskroom,在/usr⁩/⁨local/Homebrew⁩/Library⁩/Taps⁩/caskroom⁩/homebrew-versions⁩/Casks/ 下创建java8.rb文件:

      java8.rb 脚本参照:https://github.com/Homebrew/homebrew-cask-versions/commit/75334737c961a4c16e9889ef5bb67a65fa6eee4b#diff-ddb5930ea70cb853215ab5f523c0c016

      cask 'java8' do
        version '8u212,b10:59066701cf1a433da9770636fbc4c9aa'
        sha256 '9bcb4265a55e2fe63b9c58ca6c5a54eb6dda303bb69510ca6eddc2f088e41b2a'
          #authparam 'XXXX'
        
        #url "https://download.oracle.com/otn/java/jdk/#{version.before_comma}-#{version.after_comma.before_colon}/#{version.after_colon}/jdk-#{version.before_comma}-macosx-x64.dmg?AuthParam=#{authparam}" 
        url "http://localhost:8000/jdk-#{version.before_comma}-macosx-x64.dmg",
            cookies: {
                       'oraclelicense' => 'accept-securebackup-cookie',
                     }
        name 'Java 8 Standard Edition Development Kit'
        homepage 'https://www.oracle.com/technetwork/java/javase/overview/index.html'
      
        # auto_updates true: JDK does not auto-update
        depends_on macos: '>= :yosemite'
      
        pkg 'JDK 8 Update 212.pkg'
      
        postflight do
          system_command '/bin/ln',
                         args: ['-nsf', '--', "/Library/Java/JavaVirtualMachines/jdk-#{version.before_comma}.jdk/Contents/Home", '/Library/Java/Home'],
                         sudo: true
          system_command '/bin/ln',
                         args: ['-nsf', '--', "/Library/Java/JavaVirtualMachines/jdk-#{version.before_comma}.jdk/Contents/MacOS", '/Library/Java/MacOS'],
                         sudo: true
          system_command '/bin/mkdir',
                         args: ['-p', '--', "/Library/Java/JavaVirtualMachines/jdk-#{version.before_comma}.jdk/Contents/Home/bundle/Libraries"],
                         sudo: true
          system_command '/bin/ln',
                         args: ['-nsf', '--', "/Library/Java/JavaVirtualMachines/jdk-#{version.before_comma}.jdk/Contents/Home/lib/server/libjvm.dylib", "/Library/Java/JavaVirtualMachines/jdk-#{version.before_comma}.jdk/Contents/Home/bundle/Libraries/libserver.dylib"],
                         sudo: true
        end
      
        uninstall pkgutil: "com.oracle.jdk#{version.before_comma}",
                  delete:  [
                             "/Library/Java/JavaVirtualMachines/jdk-#{version.before_comma}.jdk/Contents",
                             '/Library/Java/Home',
                             '/Library/Java/MacOS',
                           ],
                  rmdir:   "/Library/Java/JavaVirtualMachines/jdk-#{version.before_comma}.jdk"
      
        caveats do
          license 'https://www.oracle.com/technetwork/java/javase/terms/license/javase-license.html'
        end
      end
      

      需要改动的地方是sha256,文件用sha256来验证文件源。可以用oppenssl工具进行验证,最后将得到的sha256码复制到对应的地方:

      $ openssl dgst -sha256 PathToPack
        sha256 '9bcb4265a55e2fe63b9c58ca6c5a54eb6dda303bb69510ca6eddc2f088e41b2a'
      

      version部分对应着下载安装包的地址,例如下载地址为https://download.oracle.com/otn/java/jdk/8u212-b10/59066701cf1a433da9770636fbc4c9aa/jdk-8u212-macosx-x64.dmg?AuthParam=XXXX, 那么版本号就是8u212,后面的数字对应着修改就行,得到:

      version '8u212,b10:59066701cf1a433da9770636fbc4c9aa'
      

      注意到下载地址里有AuthParam的字段,这里是和账户相关联的。

      authparam 'XXXX'
      

      所以url部分也要改为

      url "https://download.oracle.com/otn/java/jdk/#{version.before_comma}-#{version.after_comma.before_colon}/#{version.after_colon}/jdk-#{version.before_comma}-macosx-x64.dmg?AuthParam=#{authparam}"
      

      以上是利用安装包下载地址的配置方法。在本例中我们已经下载好了安装包,也用Python做了一个简单的Web服务器,所以除了url要改为:

      url "http://localhost:8000/jdk-#{version.before_comma}-macosx-x64.dmg"
      

      保存,准备安装。

    • 运行以下命令执行安装:

      $ brew cask install java8
      

安装spark

先把scala装上:

$ brew install scala

再装apache-spark

$ brew install apache-spark

最后在工作目录下的 bash 配置文件 .bash_profile 中添加 spark 目录

export SPARK_HOME=/usr/local/Cellar/apache-spark/2.0.1/libexec

最后推荐一篇简易安装说明,如果早点看到这篇文章也不用那么折腾了……

How to Install PySpark and Apache Spark on MacOS: https://sharing.luminis.eu/blog/how-to-install-pyspark-and-apache-spark-on-macos/

你可能感兴趣的:(macOS安装Spark时遇到的问题)