事前準備
- 一台VM,為了節省時間我們用GCP來進行示範,每台VM的配置自行斟酌,本次範例使用的是ubuntu18.04版,windows系統有點自找麻煩就不示範了。
- 後續使用到的防火牆port記得開,不再多做贅述。
- 所以機器先新增一個hadoop使用者並擁有sudo權限,與root做區別避免混淆,方法如下:
建好VM後打以下語法即可
sudo adduser hadoop #建使用者
sudo adduser hadoop sudo #hadoop有sudo權限
su - hadoop #登入hadoop腳色
4. Hadoop很多步驟需要登入重複打密碼,為了減少流程負擔,透過SSH的認證設定,讓之後都不用打密碼即可登入。
ssh-keygen -t rsa -P ""
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
試試看是否可以正常SSH
ssh localhost
沒問題後我們就開始進行Hadoop安裝吧!!
安裝Java
因為Hadoop底層是透過Java驅動,所以要先安裝Java,Java版本會牽涉到Hadoop的版本,詳細可以參考 這裡 。
sudo apt-get update
sudo apt-get install default-jdk default-jre
接下來下載Hadoop的檔案,可以到 官網 找自己要的版本安裝,以下用Hadoop 2.9.2進行示範。
wget http://apache.stu.edu.tw/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz
tar xzvf hadoop-2.9.2.tar.gz
sudo mv hadoop-2.9.2 /usr/local/hadoop
修改環境變數
接下來要將Java及Hadoop加入環境變數,讓系統可以直接調用。
vim ~/.bashrc
新增以下內容:
#jvm後面的路徑會根據你Java的版本有異
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
重啟環境變數
source ~/.bashrc
測試單機Hadoop運行
運用Hadoop自身的例子確認運作是否正常,在目錄建立一個input的資料夾,拷貝測試資料到新資料夾後,用mapreduce分析出出a開頭的單詞頻率。
mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep ./input/ ./output 'a[a-z.]+'
注意第三行程式運行的jar會跟上面的hadoop version顯示的一樣,我的是3.1.3所以會是上面所示,如果不同版本記得要改。
後面將結果導出到output資料夾,如果有正常跑出來下面訊息代表成功囉。
cat ~/output/*
偽分佈式Hadoop設定
Hadoop是分散式運算的架構,可以用兩個以上的分離process運行,意思就是一當NameNode及幾個當DataNode,同時讀取的是HDFS文件,為了達到以上功能,進行一些文件的設定,因為目前只有一台VM,所以稱偽分佈式,真實的叢集後面再說明。
後續的操作都會在該機器上的Hadoop路徑下,如果忘記你的路徑可以往上拉看一下,或是下以語法確認Hadoop位置。
接下來要修改Hadoop下 ./etc/hadoop/ 的一些文件,以下都是指該目錄內的文件。
首先是hadoop-env.sh,需要加上Java的路徑設定。
cd /usr/local/hadoop/etc/hadoop
vim hadoop-env.shexport JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
然後是core-site.xml
vim core-site.xml
主要都是修改configuration裡面的內容,每個參數都用property包起來,name是指參數名,value則是參數值,加入下面內容放在<configuratio>和</configuratio>裡面。
再來是hdfs-site.xml
vim hdfs-site.xml
一樣在<configuration>與</configuration>中加入下面內容。
因為指定了儲存目錄,要記得去建資料夾及開權限給使用者。
sudo mkdir -p /usr/local/hadoop/tmp/dfs/name
sudo mkdir -p /usr/local/hadoop/tmp/dfs/data
sudo chown hadoop:hadoop -R /usr/local/hadoop/
接下來設定mapreduce文件,文件名是mapred-site.xml,有的時候裡面會是空的或沒有該文件,不影響接下來的編輯內容。
vim mapred-site.xml
加入以下內容。
既然使用了yarn,當然也要設定一些參數,所以到yarn-site.xml設定檔加入一些內容。
vim yarn-site.xml
最後一個文件的是slaves,有時也會有無該文件的狀況,沒關係我們重建一個新的就好。剛剛都是設定主節點,該文件在建立叢集節點的設定,因為目前只有一台主機,所以就進去打上localhost即可。
vim slaves
到此為止文件就都完成囉。
啟動服務
文件設定好後就可以啟動服務,啟動前要先做一些事前動作,首先先用以下語法將NameNode初始化。
cd /usr/local/hadoop
./bin/hdfs namenode -format
接下來要啟動相關的服務,可以到sbin路徑下,看到很多自動化的指令檔。
cd /usr/local/hadoop/sbin
啟動HDFS,可以透過瀏覽器打上IP+port 50070連到WebUI畫面。
./start-dfs.sh
同樣的位置啟動yarn,並且可以透過port 8088連到WebUI畫面。
./start-yarn.sh
如果要關掉這兩個,也有直接的shell檔取用。
./stop-dfs.sh
./stop-yarn.sh
此外可以透過jps查看已啟動的服務
因為都集中在一台機器,所以可以看到HDFS跟Yarn都在一台伺服器內。本篇的資訊量夠多了,下一個章節再來說怎麼建多個機器的Hadoop。