在上一篇([07]更深入看看Hadoop裡面的YARN和HDFS)了解了整個jps的process代表的意思之後,在這篇將會延續之前([05]建立Hadoop環境 -上篇、[06]建立Hadoop環境 -下篇)建立出來pseudo-distributed mode的hadoop改成 fully-distributed mode
這篇結束之後,除了Master,會建立出一台slave。由於Master裡面也有DataNode和NodeManager,所以總共會有2個DataNode。
建立步奏
基本上整個的建立步奏可以分為6個部分:
- 修改原本的VM變成Master機器
- 從Master建立Slave
- 最後設定
- 重新Format指令
- 啟動和驗證
- 執行WordCount
修改原本的VM變成Master機器
- 修改Hostname改成master
開啟Terminal(快速鍵
Ctrl+Alt+ t
)然後輸入:sudo gedit /etc/hosts
在裡面的檔案把
ubuntu
改成master
記得透過右上角把整個機器重啟,然後開termianl會發現@後面是master重啟了之後,當輸入指令會需要等一下,因為他會嘗試和master溝通 - master不存在所以要等一下他timeout才會出現- 設定host的ip
透過右上角的network資訊找到目前機器的ip,並且用terminal執行:
sudo gedit /etc/hosts
在裡面加入:
{ip} master
- ip是上面找到的ip- 修改NameNode
在terminal執行:
gedit /usr/local/hadoop/etc/hadoop/master
在開的檔案,把裡面內容改成
master
- 修改cor-site.xml
在terminal輸入:
gedit /usr/local/hadoop/etc/hadoop/core-site.xml
把整個
configuration
內容改成:<property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property>
這邊把localhost改成了master
- 修改hdfs-site.xml
用terminal開啟:
gedit /usr/local/hadoop/etc/hadoop/hdfs-site.xml
在
Configuration
最後一筆的前面加上:<property> <name>dfs.permissions</name> <value>false</value> </property>
- 修改 mapred-site.xml
在terminal輸入:
gedit /usr/local/hadoop/etc/hadoop/mapred-site.xml
增加以下設定Configuration:
<property> <name>mapred.job.tracker</name> <value>master:54311</value> </property>
- 修改yarn-site.xml
在terminal輸入:
gedit /usr/local/hadoop/etc/hadoop/yarn-site.xml
增加以下設定到Configuration:
<property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8025</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8050</value> </property>
- slaves檔案設定
用terminal輸入:
gedit /usr/local/hadoop/etc/hadoop/slaves
改成以下設定:
master slave1
從Master建立Slave
先從設定找到Master VM的設定位置,並且複製一份出來
用開啟VM的方式打開複製出來的VM
對開啟的VM做出:
- 選擇剛剛開啟的VM
- 選擇設定
- 切換
Options
的頁簽 - 修改VM名稱為hadoop-slave
- 按下
ok
把slave那台啟動起來,當出現選擇的時候,記得選擇I Copied It
最後把兩個VM都啟動起來,可以再上面的title看到那一台是master和那台是slave
最後設定
- 修改slave那台的hostname改成slave1
開啟Terminal(快速鍵
Ctrl+Alt+ t
)然後輸入:sudo gedit /etc/hosts
在裡面的檔案把
master
改成slave1
記得一樣要重啟機器才會有作用- 設定slave的ip
透過右上角的network資訊找到slave機器的ip,並且在master和slave的機器terminal執行:
sudo gedit /etc/hosts
在裡面加入:
{ip} slave1
- ip是上面找到的ip- 確認master和slave 1可以互動
分別從master那台的terminal呼叫:
ping slave1
和slave那台機器的terminal呼叫:ping master
確保兩台之間溝通沒有問題
- 在master那台設定slave的sh key
在master的機器把slave ssh key建立出來然後做出測試,在terminal執行:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys scp -r ~/.ssh slave1:~/ ssh slave1 exit
重新Format指令
- 建立DataNode和NameNode資料夾
在master輸入以下來重建資料夾:
sudo rm -rf /usr/local/hadoop/hadoop_data/hdfs mkdir -p /usr/local/hadoop/hadoop_data/hdfs/namenode mkdir -p /usr/local/hadoop/hadoop_data/hdfs/datanode sudo chown -R hduser:hduser /usr/local/hadoop
在slave輸入以下來重建對應資料夾:
sudo rm -rf /usr/local/hadoop/hadoop_data/hdfs mkdir -p /usr/local/hadoop/hadoop_data/hdfs/datanode sudo chown -R hduser:hduser /usr/local/hadoop
- 格式化hdfs
在master輸入以下來format hdfs:
hadoop namenode -format hadoop datanode -format
在slave輸入以下來format hdfs:
hadoop datanode -format
啟動和驗證
在master呼叫start-all.sh
(這邊偷懶了,其實比較建議呼叫start-yarn和start-hdfs)來啟動整個hadoop。
啟動了之後可以再兩台的jps看到服務都出現:
檢查ResourceManager,在Firefox輸入:http://localhost:8088
檢查DataNode,在Firefox輸入:http://localohost:50070
執行WordCount
執行方式和之前一模一樣:
cd ~/Downloads hadoop fs -mkdir -p /user/hduser/input hadoop fs -copyFromLocal jane_austen.txt /user/hduser/input
執行WordCount程式:hadoop jar wordcount2.jar WordCount /user/hduser/input/jane_austen.txt /user/hduser/output
檢查執行結果:hadoop fs -cat /user/hduser/output/part-r-00000
hadoop fs -rm -r /user/hduser/output
結語
在這篇,透過之前建立的VM轉換成為Master,並且在從這個Master複製出來變成slave。
可以想象,如果要串聯多台電腦可以用這種方式達到分散式運算和分散式檔案儲存。只不過這邊用VM來模擬這個情況。
基本上,到目前為止對於整個Hadoop應該已經有個比較完整的感覺,並且了解如何建立一個測試來玩玩看。
不過有一個部分還沒有介紹,就是MapReduce裡面執行的WordCount程式是怎麼建立出來。
在下一篇將會介紹MapReduce執行的概念和WordCout是怎麼寫出來。
沒有留言 :
張貼留言