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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335