1. 程式人生 > >Hadoop及spark叢集搭建踩過的坑

Hadoop及spark叢集搭建踩過的坑

本叢集總共有三臺主機,一臺master,兩臺slave

  • Hadoop有一個節點無法啟動

在按照教程子雨大資料之Spark入門教程(Python版)搭建Hadoop叢集時,執行jps命令,發現master和其中一個slave能正常工作,執行./bin/yarn node -list發現只有一個alive節點

再次申明:本文只是針對搭建叢集中有一個節點無法啟動,而不是所有的節點

進一步觀察,發現執行jps命令後,未啟動節點的nodemanager不能正常啟動

根據網上相關的建議在datanode上檢視log檔案(檔案會在啟動Hadoop叢集時顯示其所在目錄),發現datanode連線不到主機,進一步檢視其連線的主機IP地址,發現同伴將主機IP地址寫錯了\吐血

將host檔案主機的IP地址改正後,重啟即可正常執行

  • Incompatible clusterIDs in /usr/local/hadoop/tmp/dfs/data

這個錯誤出現了兩次

第一次是同伴在第一次執行hadoop時,根據上述教程運行了bin/hdfs namenode -format這個命令

還有一次是另一個同伴將從節點關機重啟後,master的clusterID就和slaves的不一樣了。

解決方式有兩種:

第一種:把配置檔案hdfs.site.xml中dfs.datanode.data.dir在本地系統的路徑下的current/VERSION(一般$HADOOP/tmp/dfs/data/current資料夾下)中的clusterID改為與namenode一樣。重啟即可!

第二種:重灌一遍hadoop叢集,刪除tmp和log資料夾後重新向slaves節點發送一遍hadoop資料夾

注意:這會刪除HDFS中原有的所有資料,慎重使用

  • Exception: Python in worker has different version 3.4 than that in driver 3.5, PySpark cannot run with different minor versions.Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set

問題原因:如上圖所示,spark會在每個worker節點上執行python程式,所以要保證每個worker節點上python版本一致

解決方式:

import os 

os.environ["PYSPARK_PYTHON"] = /usr/bin/python3.5

  • there appears to be a gap in the edit log. we expected txitd 1, but got txid 2070

根據網上經驗來看,最後那串數字有很多種,但是感覺應該都能用同一種方法

原因:namenode元資料被破壞,需要修復

恢復一下namenode

    hadoop namenode –recover    先選擇Y,再選擇c,然後再重啟一遍hadoop