學習Spark——環境搭建(Mac版)


大數據情結

還記得上次跳槽期間,與很多獵頭都有聊過,其中有一個獵頭告訴我,整個IT跳槽都比較頻繁,但是相對來說,做大數據的比較“懶”一些,不太願意動。后來在一篇文中中也證實了這一觀點,分析說大數據領域從業者普遍認為這是一個有前景,有潛力的方向,大多數希望有所積累,所以跳槽意願不是很強烈。
14年的時候開始接觸Hadoop,在Windows下搭了好幾次環境,單機版、偽分布式和分布式都搭建過。那時候需要在Windows下裝個虛擬機,在虛擬機中再裝個Ubuntu,之后在Ubuntu上開始裝jdk,hadoop等等,雖然麻煩了點,但是樂此不疲。一般環境搭建好了,再遠程連接到Windows下的Eclipse然后開始把玩自帶的10來個example,看着控制台齊刷刷的打印各種信息,那一刻,仿佛我已經深得大數據的要領。再到后來就是看看Hadoop的部分源碼,因為功力不夠,很多也是看的稀里糊塗的,現在殘留在腦瓜子里的大概只有HDFS和MapReduce了。
轉眼三年了,開始瞄上了Spark,與Hadoop的離線計算不同,Spark基於內存計算要比Hadoop更快,更高效。而且Spark是用Scala寫的,這同樣是一門簡潔高效的語言,早在15年同事在研究Spark的時候就說過,Scala剛用的時候蹩手蹩腳,用習慣了,就愛不釋手了。當然了,開發Spark也是支持Java和Python的。


環境搭建

想必之前搭建Hadoop環境的Windows系統的相對繁瑣步驟,Mac下顯得簡單不少。
雖然我們需要搭建的是Sppark環境,但是因為Spark依賴了Hadoop的HDFS以及YARN計算框架,當然還有類似軟件包管理軟件。

安裝前必備

操作系統:Mac OS X
JDK:1.8.0_121
命令終端:iTerm2(Mac自帶的命令終端也一樣,只是配置環境參數需要到~/.bash_profile下添加,對於iTerm2需要到~/.zshrc中添加)
軟件包管理工具:brew(能夠方便的安裝和卸載軟件,使用brew cash還可以安裝圖形化的軟件,類似於Ubuntu下的apt-get以及前端里的npm


安裝Hadoop

上面步驟和條件如果都具備的話,就可以安裝Hadoop了,這也是我唯一遇到坑的地方。

1. 配置ssh

配置ssh就是為了能夠實現免密登錄,這樣方便遠程管理Hadoop並無需登錄密碼在Hadoop集群上共享文件資源。
如果你的機子沒有配置ssh的話,在命令終端輸入ssh localhost是需要輸入你的電腦登錄密碼的。配置好ssh后,就無需輸入密碼了。
第一步就是在終端執行ssh-keygen -t rsa,之后一路enter鍵,當然如果你之前已經執行過這樣的語句,那過程中會提示是否要覆蓋原有的key,輸入y即可。
第二步執行語句cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys用於授權你的公鑰到本地可以無需密碼實現登錄。
理論上這時候,你在終端輸入ssh lcoalhost就能夠免密登錄了。

但是,我在這里遇到了個問題,折騰了我蠻久。當我執行cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys的時候,總是出現如下警告zsh: permission denied: /Users/jackie/.ssh/authorized_keys
顯然這是權限問題,我直接為ssh目錄賦予777740700都無效,還是報同樣的錯。於是查了下資料在這里看到了解決方案。
設置authorized_keys權限——$ chmod 600 authorized_keys
設置.ssh目錄權限——$ chmod 700 -R .ssh
參考資料給出的解釋是:文件和目錄的權限千萬別設置成chmod 777.這個權限太大了,不安全,數字簽名也不支持--!。


2. 下載安裝Hadoop

這時候brew的好處就體現出來了,你無需到Hadoop官網去找下載鏈接,只要在命令終端輸入brew install hadoop等命令執行完,你就可以看到在/usr/lcoal/Cellar目錄下就有了hadoop目錄,表示安裝成功。(當然命令執行過程中會因為網絡或其他原因中斷,這時候你只需要重新執行一次brew install hadoop即可)


3. 配置Hadoop

3.1 進入安裝目錄/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop,找到並打開hadoop-env.sh文件,將
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"
改為

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc="
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"

(java_home請寫上你本機上jdk安裝的位置)


3.2 配置hdfs地址和端口
進入目錄/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop,打開core-site.xml<configuration></configuration>替換為

<configuration>
  <property>
     <name>hadoop.tmp.dir</name>
<value>/usr/local/Cellar/hadoop/hdfs/tmp</value>
    <description>A base for other temporary directories.</description>
  </property>
  <property>
     <name>fs.default.name</name>
     <value>hdfs://localhost:8020</value>
  </property>
</configuration>

3.3 配置mapreduce中jobtracker的地址和端口
在相同的目錄下,你可以看到一個mapred-site.xml.template首先將文件重命名為mapred-site.xml,同樣將<configuration></configuration>替換為

<configuration>
      <property>
        <name>mapred.job.tracker</name>
        <value>localhost:8021</value>
      </property>
</configuration>

3.4 修改hdfs備份數
相同目錄下,打開hdfs-site.xml加上

<configuration>
   <property>
     <name>dfs.replication</name>
     <value>1</value>
    </property>
</configuration>

4. 格式化HDFS

這個操作相當於一個文件系統的初始化,執行命令hdfs namenode -format
在終端最終會顯示成功

17/05/06 15:51:29 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/Cellar/hadoop/hdfs/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
17/05/06 15:51:29 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/Cellar/hadoop/hdfs/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 322 bytes saved in 0 seconds.
17/05/06 15:51:29 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
17/05/06 15:51:29 INFO util.ExitUtil: Exiting with status 0
17/05/06 15:51:29 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at jackies-macbook-pro.local/192.168.*.*
************************************************************/

5. 配置Hadoop環境變量

因為我用的是iTerm2,所以打開~/.zshrc添加

export HADOOP_HOME=/usr/local/Cellar/hadoop/2.8.0
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

再執行source ~/.zhsrac以確保配置生效
配置這個是方便在任意目錄下全局開啟關閉hadoop相關服務,而不需要到/usr/local/Cellar/hadoop/2.8.0/sbin下執行。


6. 啟動關閉Hadoop服務

啟動/關閉HDSF服務

./start-dfs.sh          
./stop-dfs.sh

啟動成功后,我們在瀏覽器中輸入http://localhost:50070可以看到

啟動/關閉YARN服務

./start-yarn.sh        
./stop-yarn.sh

啟動成功后,我們在瀏覽器中輸入http://localhost:8088可以看到

啟動/關閉Hadoop服務(等效上面兩個)

./start-all.sh   
./stop-all.sh

安裝Scala

同樣的配方,執行brew install scala你就可以擁有Scala。
在終端執行scala -version,如果出現類似Scala code runner version 2.12.2 -- Copyright 2002-2017, LAMP/EPFL and Lightbend, Inc.說明你安裝成功了。
同樣,不要忘了配置Scala的環境變量,打開~/.zshrc添加

export SCALA_HOME=/usr/local/Cellar/scala/2.12.2
export PATH=$PATH:$SCALA_HOME/bin

安裝Spark

有了前面這么多的准備工作,終於可以安裝Spark了。也是比較簡單,起碼我沒有遇到坑。
Spark官網下載你需要的Spark版本,注意這里我們看到需要有依賴的Hadoop,而且還讓你選擇Hadoop的版本。
下載完直接雙擊壓縮包就會解壓(建議安裝一個解壓軟件),將其重命名為spark放到/usr/local下面。

毫無例外,我們還需要一個環境參數配置,打開~/.zshrc添加

export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin

走到這一步,我們終於可以啟動spark了,打開終端,輸入spark-shell,這時候會看到

妥了!雖然整個安裝過程沒有遇到什么大坑,但是還是比較耗時間。

如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!如果您想持續關注我的文章,請掃描二維碼,關注JackieZheng的微信公眾號,我會將我的文章推送給您,並和您一起分享我日常閱讀過的優質文章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM