Hadoop及Spark單機及分佈式集羣Ubuntu環境搭建(詳細)

  • 對於各種語言的學習,環境搭建是學習的第一步,本文對Hadoop和Spark的單機及分佈式集羣的環境搭建步驟詳述如下,供大家參考(文章較長,可以只關注自己需要的部分,常見問題及解決方法本文及另一篇博客也有介紹,博客 地址:https://blog.csdn.net/m0_37568814/article/details/80785445)。

一、平臺環境:

虛擬機 VMware Workstation Pro虛擬機操作系統:Ubuntu16.04Windows Server 2008

二、 軟件配套版本包:
jdk-7u80-linux-x64(java version 1.7.0_80)Hadoop 2.6.5
Hadoop-native-64-2.6.0
Scala-2.11.11
Spark-2.1.1-bin-hadoop2.7

三、Hadoop 單機環境及僞分佈式安裝步驟:
1.在 VMware 上新建三個虛擬機(Master,Slave1,Slave2),其中 Master,Slave用於集羣環境的搭建。Slave2 用於 Hadoop 單機環境及僞分佈式環境搭建。

2.在三個虛擬機上分別創建 hadoop 用戶

3.三個虛擬機在 hadoop 用戶下分別安裝 jdk
1) 下載 jdk-7u80-linux-x64.tar.gz,上傳下載包到/opt 目錄。
2) 使用命令tar –xf jdk-7u80-linux-x64.tar.gz解壓壓縮包到當前文件夾。
3) 使用命令配置vim ~/.bashrc配置文件,配置環境變量(詳見下圖),之後使用命令source ./.bashrc 使文件修改生效。
4) 使用命令java –version檢查 jdk 是否安裝成功。

4.更新 apt

5.安裝 vim

6.安裝 SSH,配置 SSH 無密碼登陸
1) 使用命令安裝 ssh server: $sudo apt-get install openssh-server

2) 啓動 SSH 服務

3) 之後使用命令 ssh localhost測試是否成功,使用如下命令設置無密碼登陸。

$exit # 退出剛纔的 ssh localhost

$cd ~/.ssh/ # 若沒有該目錄,請先執行一次 ssh localhost

$ssh-keygen -t rsa # 會有 示,都按回車就可以

$cat ./id_rsa.pub >> ./authorized_keys # 加入授權

7.安裝配置 Hadoop
1) 從官網下載文件 Hadoop2.6.5,上傳到 usr/local 下,配置.bashrc 文件,並使用命令 source ~/.bashrc 使修改生效。

2) 使用命令 hadoop version 檢查 Hadoop 是否安裝成功

8. Hadoop 單機配置(非分佈式),使用如下命令查看單機配置下的執行結果

$cd /usr/local/hadoop

$mkdir ./input

$cp ./etc/hadoop/*.xml ./input # 將配置文件作爲輸入文件

$./bin/hadoop

jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar

$grep ./input ./output 'dfs[a-z.]+'

$cat ./output/* # 查看運行結果

至此,Hadoop 單機配置安裝測試完成。

9. 配置 Hadoop 僞分佈式:
1) 按照如下方式編輯文件 vim ./etc/hadoop/core-site.xml

2) 編輯文件 vim ./etc/hadoop/hdfs-site.xml,修改如下

3) 配置完成後,執行 NameNode 的格式化$./bin/hdfs namenode –format,出現以下 status 0 表示格式化成功。

10. 開啓 NameNode 和 DataNode 守護進程 $./sbin/start-dfs.sh

11. 進程開啓後,使用 jps 命令查看節點情況

12. 登陸前臺 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode信息及在線查看 HDFS 中的文件

13. 運行 Hadoop 僞分佈式示例使用以下命令運行及查看示例運行結果:

$./bin/hdfs dfs -mkdir input

$./bin/hdfs dfs -put ./etc/hadoop/*.xml input

$./bin/hdfs dfs -ls input

$./bin/hadoop

jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input

output 'dfs[a-z.]+'

$./bin/hdfs dfs -cat output/*

14. 啓動 YARN
1) 修改配置文件 mapred-site.xml,首先進行重命名:
$mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml

2) 編輯./etc/hadoop/mapred-site.xml,如下所示

3) 編輯./etc/hadoop/yarn-site.xml 如下所示

4) 修改完成後,啓動 YARN

5) 啓動 YARN 成功後,使用命令 jps 檢查節點信息如下,相比只啓動 hadoop時多了 ResourceManager 和 NodeManager 進程。

15.通過 Web 界面查看任務運行情況:http://localhost:8088/cluster,如下圖所示。

Hadoop 僞分佈式環境搭建完成。

. Hadoop 集羣安裝配置

1. 集羣環境:一個 master 主機,一個 slave 主機。其中選擇主機 IP 爲115.157.200.152 作爲 master,IP 爲 115.157.200.163 的主機作爲 slave。安裝單機部署的步驟完成以下工作:
· 在 master 節點上配置 hadoop 用戶、安裝 SSH server、安裝 Java 環境

· 在 master 節點上安裝 Hadoop,並完成配置
· 在其他 slave 節點上配置 hadoop 用戶、安裝 SSH server、安裝 Java 環境· 將 master 節點上的 /usr/local/hadoop 目錄複製到 slave 節點上
· 在 master 節點上開啓 Hadoop

2. 檢查主機名稱是否爲 master 和 slave,如果不是,修改配置文件/etc/hostname和/etc/hosts,修改完成後 reboot 重啓服務器。

3. 按照單機部署方式安裝 jdk,配置 SSH 登陸,配置 Hadoop。集羣/分佈式模式需要修改 /usr/local/hadoop/etc/hadoop 中的 5 個配置文件,更多設置項可點擊查看官方說明,這裏僅設置了正常啓動所必須的設置項:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves。

1) 修改如下:core-site.xml

2) 修改 hdfs-site.xml

3) mapred-site.xml

4) yarn-site.xml

5) slaves

4. 配置好後,將 master 上的 /usr/local/hadoop 文件夾複製到 slave 節點上。因爲之前有跑過僞分佈式模式,建議在切換到集羣模式前先刪除之前的臨時文件。

1) 在 master 節點上執行:

 

$cd /usr/local

$sudo rm -r ./hadoop/tmp # 刪除 Hadoop 臨時文件

$sudo rm -r ./hadoop/logs/* # 刪除日誌文件

$tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先壓縮再複製

 

$cd ~

$scp ./hadoop.master.tar.gz slave1:/home/hadoop

2) 在 slave1 節點上執行:

 

$sudo rm -r /usr/local/hadoop # 刪掉舊的(如果存在)

$sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local

$sudo chown -R hadoop /usr/local/hadoop

5. 首次啓動需要先在 master 節點執行 NameNode 的格式化:
$ hdfs namenode -format # 首次運行需要執行初始化,之後不需要

6. 啓動 hadoop,在 master 節點上進行:

 

$start-dfs.sh

$start-yarn.sh

$mr-jobhistory-daemon.sh start historyserver

7. 通過命令 jps 可以查看各個節點所啓動的進程。
1) 啓動成功,在 master 節點上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程,如下圖所示:

2) 在 slave 節點可以看到 DataNode 和 NodeManager 進程,如下圖所示:

3) 在 master 節點上通過命令 hdfs dfsadmin -report 查看 DataNode 是否正常啓動,如果 Live datanodes 不爲 0 ,則說明集羣啓動成功。

8. 通過 Web 頁面看到查看 DataNode 和 NameNode 的狀態:http://master:50070/

9. 在 Hadoop 分佈式集羣上運行示例如下。命令類似於僞分佈式集羣。

 

$hdfs dfs -mkdir -p /user/hadoop

$hdfs dfs -mkdir input

$hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

$hadoop jar

/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.j

ar grep input output 'dfs[a-z.]+'

10. 通過 Web 界面查看任務進度 http://master:8088/cluster,在 Web 界面點擊 Tracking UI 這一列的 History 連接,可以看到任務的運行信息,如下圖所示:

至此,Hadoop 集羣搭建完成。

. Spark 集羣的搭建

分別在 master 和 slave 機器上完成 scala 和 spark 的安裝。

1. scala 安裝:

1) 下載scala-2.11.11.tgz,解壓到 /opt 目錄下,即:/opt/scala-2.11.11。

2) root 用戶修改 scala-2.11.11 目錄所屬用戶和用戶組爲 hadoop,使用命令 sudo chown -R hadoop:hadoop scala-2.11.11,修改環境變量 vim ~/.bashrc,添加如下內容:

3)  添加完成後,使用命令 source ~/.bashrc 使其生效。

4)  測試 scala 安裝是否成功,出現如下所示界面,測試驗證成功。

2. Spark 的安裝:

1) 下載 Spark-2.1.1-bin-hadoop2.7.tgz,解壓到 /opt 目錄下並重命名爲spark。
修改 spark 目錄所屬用戶和用戶組$sudo chown -R hadoop:hadoop spark

2) 修改環境變量 vim ~/.bashrc,添加如下內容:

3) 添加完成後,使用命令 source ~/.bashrc 使其生效。
4) 進入 Spark 安裝目錄下的 conf 目錄,拷貝 spark-env.sh.template到 spark-env.sh。cp spark-env.sh.template spark-env.sh
編輯 spark-env.sh,在其中添加以下配置信息:

SCALA_HOME:指定 Scala 安裝目錄;
JAVA_HOME:指定 Java 安裝目錄;
SPARK_MASTER_IP:指定 Spark 集羣 master 節點的 IP 地址;SPARK_WORKER_MEMORY: 指 定 的 是 Worker(Slave) 節 點 能 夠 分 配 給Executors 的最大內存大小;
HADOOP_CONF_DIR:指定 Hadoop 集羣配置文件目錄。
5) 將 slaves.template 拷貝到 slaves, 編輯其內容爲:

4. 啓動 Spark 集羣
1) 啓動 hadoop 集羣:在 hadoop 安裝目錄下,用命令./sbin/start-dfs.sh 啓動hadoop 集羣,用 jps 命令分別在 master 和 slave 上查看進程信息(參考 hadoop集羣搭建相關介紹)。

2) 啓動 spark 集羣,在 master 節點上運行 start-master.sh,結果如下:

可以看到 master 上多了一個新進程 Master。
3) 在 master 節點上啓動 worker(這裏即爲 slave),運行 start-slaves.sh,結果如下:

可以看到,多了一個 Worker 進程。
4) 前臺界面查看 Spark 集羣信息。瀏覽器中輸入:http://master:8080, 如下圖:

5) 運行 spark-shell,可以進入 Spark 的 shell 控制檯,如下:

6) 瀏覽器訪問 SparkUI
瀏覽器中輸入: http://master:4040, 如下圖:

可以從 SparkUI 上查看一些 如環境變量、Job、Executor 等信息。至此,整個 Spark 分佈式集羣的搭建完成。

7) 停止集羣時,運行 stop-master.sh 來停止 Master 節點, 之後運行可以停止所有的 Worker 節點,Worker 進程停止完成後,最

後使用命令 停止 Hadoop 集羣。

. Spark 示例分析

1. 編寫一個 Spark 應用程序,對某個文件中的單詞進行詞頻統計。hadoop 用戶下執行如下命令:

stop-slaves.sh

$cd /opt/spark

./sbin/stop-dfs.sh

$mkdir anmycode

$cd anmycode

$mkdir wordcount

$cd wordcount

$vim word.txt

  1. 使用命令 spark-shell 啓動 spark-shell 如下所示表示成功:

  2. 在 spark 終端,輸入如下命令:

scala>val textFile = sc.textFile("file:///opt/spark/anmycode/wordcount/word.txt")

scala>textFile.first()

first()是一個“行動”(Action)類型的操作,會啓動真正的計算過程,從文件中加載數據到變量 textFile 中,並取出第一行文本。屏幕上會顯示很多反饋信息,這裏不再給出,你可以從這些結果信息中,找到 word.txt 文件中的第一行的內容。Spark 採用了惰性機制,在執行轉換操作的時候,即使我們輸入了錯誤的語句,spark-shell 也不會馬上報錯,而是等到執行“行動”類型的語句時啓動真正的計算,那個時候“轉換”操作語句中的錯誤就會顯示出來。如下所示:

 

4. 加載 HDFS 中的文件(參考 Hadoop 搭建介紹)

cd /opt/hadoop

./sbin/start-dfs.sh

./bin/hdfs dfs -mkdir -p /user/hadoop

注意:這個目錄是在 HDFS 文件系統中,不在本地文件系統中。創建好以後,下面我們使用命令查看一下 HDFS 文件系統中的目錄和文件:
./bin/hdfs dfs -ls .

5. 切換回到 spark-shell 窗口,編寫語句從 HDFS 中加載 word.txt 文件,並顯示第一行文本內容:
scala>val textFile = sc.textFile("hdfs://master:9000/user/hadoop/word.txt")
scala>textFile.first()

6) 將 HDFS 上的文本保存到 write back 目錄下,並查看

6. 詞數統計:

scala>val textFile = sc.textFile("file:///opt/spark/anmycode/wordcount/word.txt")

scala>val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word,

1)).reduceByKey((a, b) => a + b)

scala>wordCount.collect()

測試完成。

七. 常用命令

常用 Hadoop 命令

1. 啓動Hadoop(NameNode 和 DataNode 守護進程):


    $hdfs namenode -format  # 首次運行需要執行初始化,之後不需要

    $ ./sbin/start-dfs.sh 

2. 關閉 Hadoop:./sbin/stop-dfs.sh

3. 啓動yarn: 先啓動Hadoop,再使用命令 ./sbin/start-yarn.sh

4. 關閉yarn:  

     1) ./sbin/stop-yarn.sh  

     2) ./sbin/mr-jobhistory-daemon.sh stophistoryserver

5. 查看hadoop版本:/usr/local/hadoop下使用./bin/hadoopversion

6. 測試命令:/usr/local/hadoop下使用

./bin/hadoopjar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output'dfs[a-z.]+’

7. 查看運行結果的命令(查看的是位於 HDFS中的輸出結果):

  
  ./bin/hdfs dfs -cat output/*


8. 集羣的Master節點啓Hadoop 


    start-dfs.sh


    start-yarn.sh


    mr-jobhistory-daemon.sh start historyserver

9. 查看各個節點所啓動的進程jps

常用Spark命令:

  1. 啓動 Master 節點: Master主機上:start-master.sh

  2. 啓動所有 Worker 節點:Master主機運行:start-slaves.sh

  3. 運行 spark-shell,可以進入 Spark 的 shell 控制檯

  4. 測試命令:Spark中運行示例程序JavaWordCount.java,程序所在目錄如下

    (Spark安裝目錄):./examples/src/main/java/org/apache/spark/examples/JavaWordCount.java

常用Hadoop&YARN web界面URL:

1. http://localhost:50070 ---查看 NameNode 和 Datanode 信息,在線查看HDFS 中的文件

2. 查看任務的運行情況http://localhost:8088/cluster(單機)http://master:8088/cluster(集羣)

常用Spark web界面URL:

  1. http://master:8080---瀏覽器查看 Spark 集羣信息

  2. http://master:4040---瀏覽器訪問 SparkUI

八. 遇到的問題及解決方法

1. 虛擬機 root用戶默認密碼修改: sudo passed 回車修改密碼

  1. hostname設置(master,slave1),修改/etc/hosts和/etc/hostname

  2. ping命令無法使用:虛擬機設置,選擇網絡連接方式(橋接方式)

  3. ssh命令報錯: connect to host slave1 port 22: Connection refused

    解決方法:安裝並啓動ssh服務,安裝如下:apt-get install -f

    apt-get install openssl-client---ubuntu 默認安裝

    apt-get install openssl-server

    sudo /etc/init.d/ssh start—啓動 ssh 服務

  1. 安裝jdk時,手動下載軟件包(jdk1.7版本:jdk-7u80-linux-x64),之後配置./bashrc文件。

  2. 安裝過程中啓動hadoop時報JAVA_HOME路徑找不到。 解決方法:檢查~/bashrc 設置正確。檢查設置hadoop的安裝路徑下:/usr/local/hadoop/etc/hadoop中的hadoop-env.sh中JAVA_HOME需要設置爲jdk所在的目錄。

  3. 運行hdfs在/user下新建hadoop文件夾時報錯:Unable to load native-hadooplibrary for your platform... using builtin-java classes where applicable解決方法:下載對應的native-hadoop 64位的包,解壓到hadoop安裝目錄下的lib和lib/native下,配置環境變量,並令其生效即可。

    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

  4. 運行 Hadoop 程序時,爲了防止覆蓋結果,程序指定的輸出目錄(如output)不能存在,否則會 示錯誤,因此運行前需要先刪除輸出目錄。在實際開發應用程序時,可考慮在程序中加上如下代碼,能在每次運行時自動刪除輸出目錄,避免繁瑣的命令行操作

    Configuration conf = new Configuration();                                                                                                                         Job job = new Job(cont);

    /* 刪除輸出目錄 */
    Path outputPath = new Path(args[1]);
                                                                                                                    outputPath.getFileSystem(conf).delete(outputPath, true);

  5. ./sbin/start-dfs.sh啓動hadoop時,報以下錯誤'/usr/local/hadoop/logs':Operation not permitted                                                    解決方式:檢查/usr/local/hadoop/logs宿主爲root用戶,原因:chown -Rhadoop:hadoop hadoop/ 最後沒加”/" 。                      root用戶修改/usr/local/hadoop/logs宿主爲hadoop用戶(chown -R hadoop hadoop/)即可。

10. 運行示例時,一直停留在如下界面,程序運行阻塞。

解決方法:增加虛擬機內存(從1G—>2G:OK) 即可。

九. 總結

學習入手各門語言或者框架,搭建環境是個基本的過程,也是學習的第一步。搭建環境過程中可能遇到各種問題,如:版本匹配問題,權限問題,莫名其妙的報錯甚至連報錯也沒有的奇葩問題等等。

好的安裝指導或資料能給我們帶來很多方便。如果安裝過程中遇到上訴各種問題,對於不同的問題,解決方式也不同。版本匹配問題,下載對應的版本重新安裝即可。建議到官網下載版本,版本比較權威,後續搭建環境過程中因爲版本出問題的可能性較小,省去一些不必要的麻煩。有報錯的問題,根據報錯信息耐心檢查或者網上搜索資料,跟同學們一起討論,這類問題往往都可以找到解決方法。對於一些莫名其妙的問題,如果沒有具體報錯信息,把問題現象 述清楚,到各大論壇(個人習慣:百度,CSDN,stackoverflow等)去找類似問題,耐心找找,也可以找到一些線索,或者供一些idea給我們。搭建環境如此,後續學習也是如此。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章