大數據情結
還記得上次跳槽期間,與很多獵頭都有聊過,其中有一個獵頭告訴我,整個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目錄賦予777
、740
和700
都無效,還是報同樣的錯。於是查了下資料在這里看到了解決方案。
設置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的微信公眾號,我會將我的文章推送給您,並和您一起分享我日常閱讀過的優質文章。