1. 程式人生 > >Hadoop學習筆記(3)-搭建Hadoop偽分散式

Hadoop學習筆記(3)-搭建Hadoop偽分散式

0.前言

1.配置core-site.xml檔案

配置hadoop目錄下的etc/Hadoop/core-site.xml檔案。
這裡寫圖片描述
新增如下內容:
這裡寫圖片描述
官網上只配置了fs.defaultFS引數,這個引數是配置hdfs的url地址。配置好後就可以在頁面訪問hdfs檔案系統。
參考多數部落格配置其零時資料夾tmp。原因後面解釋。

2.配置hdfs-site.xml檔案

這裡寫圖片描述
新增如下內容:
這裡寫圖片描述
官網上只配置了dfs.replication引數,參考大多數部落格配置了namenode和datanode資料夾。
這裡寫圖片描述
注:為什麼要比官方多配置tmp,namenode,datanode檔案呢?
先說這3個資料夾的作用,tmp是用來存放零時檔案,比例執行過程中的檔案等。namenode和datanode資料夾預設是放在tmp裡面的,這2個資料夾用來儲存hdfs裡的內容。
不配置的話,hadoop預設把tmp會建立在ubuntu系統裡的/tmp資料夾裡,電腦一旦重啟會自動清除tmp資料夾內容,同時也清除了裡面的namenode和datanode檔案內容,這樣就會造成每次重啟電腦namenode和datanode內容都不在了,那就需要重寫格式化Hadoop檔案系統hdfs,以前執行的記錄和檔案都會沒有。所有配置了tmp和namenode和datanode資料夾,重啟後可以不用格式化,原檔案依然保持在hadoop檔案系統上,只是放在了自己的目錄裡。

3.安裝ssh

輸入:sudo apt-get install ssh
這裡寫圖片描述
SSH (Secure Shell)為建立在應用層和傳輸層基礎上的安全協議。專為遠端登入會話和其他網路服務提供安全性的協議。Ssh在hadoop中用來實現節點的登入和節點間傳輸檔案。

4.安裝rsync

輸入:sudo apt-get install rsync
這裡寫圖片描述
rsync(remote synchronize)顧名思意就知道它是一款實現遠端同步功能的軟體,它在同步檔案的同時,可以保持原來檔案的許可權、時間、軟硬連結等附加資訊。可以通過ssh方式來傳輸檔案。

5.配置ssh免祕密

分散式系統中需要用ssh來登入本地以及其他節點,然後進行檔案的操作,以及傳輸。但是ssh預設下登入機器是需要使用者密碼的。而分散式的檔案跨節點讀寫,若是每次都要輸入密碼時不現實的。所以需要ssh能免密碼登入本地以及其他分散式節點。

5.1 生成祕鑰對

輸入指令:ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa
這裡寫圖片描述
從截圖提示可以看出,這個命令生成了一個id_dsa(私鑰)檔案,和一個id_dsa.pub(公鑰)檔案。

5.2 用cat命令追加公鑰

輸入指令:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
這裡寫圖片描述
這部完成之後,就可以ssh登入本機來看是否已經可以無密碼登入本機了。如下圖,已經可以無密碼登入啦。
這裡寫圖片描述
這裡寫圖片描述

6.格式化Hadoop檔案系統

相當於我們新買來硬碟,裝系統時候要先格式化一樣。剛分配好的Hadoop檔案系統也要格式化。
輸入如下命令完成格式化:bin/hdfs namenode -format
這裡寫圖片描述


格式化完成。

7.執行hdfs檔案系統

輸入如下程式碼:
sbin/start-dfs.sh
執行成功後再用jps檢視程序,可以看到在程序中跑的namenode,datanode,secondarynamenode。
這裡寫圖片描述
也可以在網頁上檢視,輸入:localhost:50070
可以看到有一個節點活著。說明hdfs配置成功。
這裡寫圖片描述

8.在hdfs中建立資料夾

現在的Hadoop檔案系統時空的,我們來建立資料夾,用了作為根目錄。官網提供如下2句程式碼。其中必須和本地的使用者名稱同,比如下圖所示,我的使用者名稱是root。以後root使用者名稱操作的所有的檔案會在root資料夾裡。
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

9.測試偽分散式

把本地的input資料夾上傳上來,作為後面測試的輸入檔案。
輸入:bin/hdfs dfs -put input
這裡寫圖片描述
可以在頁面上檢視input資料夾,自動放在了你的使用者名稱root下,如下圖所示:
這裡寫圖片描述

和本地模式一樣,這裡測試2個mapreduce程式,一個grep,一個wordcount。

9.1例子一:grep

該例子是搜尋input資料夾內所有檔案,找到以dfs開始後面跟著字母a-z的單詞,並輸出在output/grep資料夾裡。

輸入程式碼如下:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep input output/grep ‘dfs[a-z.]+’
這裡寫圖片描述
這裡寫圖片描述

輸入如下程式碼,檢視結果:
bin/hdfs dfs -cat output/*
這裡寫圖片描述

9.2例子二:wordcount

該例子是搜尋input資料夾內所有檔案,統計所有單詞出現的次數,並輸出在output/wordcount資料夾裡。

輸入程式碼如下:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar wordcount input output/wordcount
這裡寫圖片描述

顯示內容比較多,用get命令獲取到本地hadoop目錄下的output資料夾裡檢視。
輸入:bin/hdfs dfs -get output output
這裡寫圖片描述
可以在本地的output裡檢視。
這裡寫圖片描述
當然也可以用cat檢視,只是不能顯示完整的內容。
cat output/*
這裡寫圖片描述
這裡寫圖片描述

以上內容就是配置完了hdfs並測試完成。

官網還提供了修改mapred-site.xml和yarn-site.xml檔案來執行yarn。

10. 配置mapred-site.xml檔案

這裡寫圖片描述
新增如下內容:
這裡寫圖片描述
測試中發現,配置了mapreduce.framework.name的值,執行程式報錯。原因是ubuntu開啟了防火牆,使得nodemanager處於安全模式。所以要先關閉ubuntu防火牆。命令如下:
這裡寫圖片描述

另外在mapred-site.xml中比官網多配置了mapreduce.job.tracker。配置後job可以提交到叢集裡執行,預設是在本地執行。對於偽分散式不配置也不會有問題。

11. 配置yarn-site.xml檔案

這裡寫圖片描述
新增如下內容:
這裡寫圖片描述

12.執行yarn資源管理器

可用jps檢視
這裡寫圖片描述
可以在頁面localhost:8088中看到資源管理器。
這裡寫圖片描述
到此yarn配置完成。

13.測試

執行hdfs和yarn(以後可以使用start-all.sh來同時執行)來測試grep和wordcount例子:
程式碼如下,結果請自行檢視是否正確。
這裡寫圖片描述
這裡寫圖片描述

除了在50070上看輸出結果,還可以在8088上看mapreduce作業的記錄。
這裡寫圖片描述

14.關閉hdfs和yarn

能開啟自然也要會關閉,hdfs和yarn的關閉命令為:
stop-dfs.sh
stop-yarn.sh
或者
stop-all.sh

XianMing