1. 程式人生 > >Hadoop-3.0.0 + spark-2.3.0 +storm-1.2.1 的安裝心得

Hadoop-3.0.0 + spark-2.3.0 +storm-1.2.1 的安裝心得

因為前段時間比賽用到spark,而實驗室叢集的spark版本還是1.6,帶來了不少麻煩,於是便想著把叢集的Hadoop和spark更新一下版本,另外,因為專案需要,再補裝個storm,一邊日後要用。

說句題外話。spark,storm,Hadoop三者取首字母是SSH,這讓我想起以前做web開發,Struts2,spring,hibernate三個也是簡稱SSH,另外ssh還是linux之間一種主機連線的方式。

實驗室叢集由16臺主機組成,這裡將第一臺主機作為主節點,剩餘15臺作為從節點。關於SSH免密碼連線,管理叢集的師兄只設置了主節點到15個從節點的免密碼連線,從節點到主節點以及從節點之間都無法免密碼連線。我覺得這是有問題的,畢竟當分散式儲存的檔案重分割槽的時候,是有從節點之間的通訊的,另外,從節點肯定也需要向主節點傳輸資訊。所以首先就先把SSH免密碼連線給完善了。16臺主機,除了自己跟自己連,也就是有16x15種連線,挺麻煩的,於是想寫個指令碼來自動執行,但是在執行完ssh命令後,就跳轉到其他主機了,指令碼也就暫停執行了,還是不行,於是只好就一個一個手敲了。

先說Hadoop吧,其實用的是Hadoop中的hdfs。以前弄過,這次弄又有了新的體會。記得剛開始學大資料時,只會對著部落格敲配置檔案,出了問題也不知道去看日誌檔案。Hadoop的配置檔案主要就是core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、slave。其實其他部落格中的很多配置都是可配可不配的,無關緊要的項不配置也不影響hdfs的啟動。最後有一個關鍵的步驟hdfs namenode -format 。之後才能正常啟動hdfs。對了,還有環境變數也要配置好。最後要說的是hdfs 的ui埠在3.0版本中從以前的50070變成了9870。挺好奇50070用著好好的,為什麼要改成9870的。

然後裝spark。spark其實和Hadoop的過程差不多。在spark-env.sh中要export好多變數,這使我想起之前1.6版本的叢集的一個問題:當每個節點使用的記憶體大於5G時,spark就會報錯。當時不知道為什麼,現在想想可能是spark-env.sh中spark_worker_memory的值設的小了。

最後裝一下storm,裝storm前,要先裝zookeeper。zookeeper要在配置檔案中寫各個主機的ip,主機太多寫起來麻煩,我就想能不能用主機名來代替,畢竟hosts中有主機名和ip的對應關係。然後試了一下證明這麼做是可以的。然後就拷貝到各個節點開始啟動storm,當啟動了5個節點時,我就迫不及待的檢視各個節點的狀態,看看是leader,還是follower。結果提示zookeeper可能沒啟動,於是檢視日誌檔案,日誌中報錯道:與xxx.xxx.xxx.xxx的連線失敗。這時我才意識到,應該先啟動全部節點,再檢視狀態。啟動了zookeeper後,修改寫下storm的配置,然後啟動storm 的nimbus、UI、supervisor。想通過瀏覽器檢視storm的狀態,發現storm和spark的ui都使用8080埠,因為先裝的spark,我想storm可能是在8081上,試了一下,8081上沒有。後來查了一下配置說明,ui.prot項可以改Ui埠,於是在配置中將ui.port手動設為8081。用瀏覽器開啟8081,一切正常。

過了幾個小時,當我再去檢視8081埠時,發現storm已經停止了。於是去檢視日誌檔案,發現日誌裡也顯示storm停止了,但是沒有報任何錯誤。這時想起來以前通過遠端連線執行spark程式時,遠端連線斷開後,程式也就停止了。我啟動storm也是用的遠端連線,這兩者應該是同一個道理吧。我跑到機房把storm再次啟動,果然,這次storm就不會再自己停止了。