VMware平臺的Ubuntu部署完全分布式Hadoop環境
前言:
此文章是本人初次部署Hadoop的過程記錄以及所遇到的問題解決,這篇文章只有實際操作部分,沒有理論部分。因本人水平有限,本文難免存在不足的地方,如果您有建議,歡迎留言或私信告知于我,非常感謝。
部分參考網絡資料,如有侵權,聯系刪除。
環境準備(需提前下載好):
1.VMware workstation 17.5,作為虛擬化平臺
(官網下載地址:vmware workstation17.5(需登錄))
2.Ubuntu20.04 (18.04,22.04,24.04應該也可以)
(清華源鏡像地址:Ubuntu20.04)
3.JDK8(其他版本不適配)
(官網下載鏈接(需登錄):下載頁面(選x64 Compressed Archive))
(清華源的openjdk下載鏈接: openjdk8)
4.Hadoop-3.3.6
(官網下載鏈接:Hadoop-3.3.6)
1.安裝Ubuntu
(1)點擊創建新的虛擬機
(如果沒有這一頁,可以點擊上面的選項卡,再點擊轉到主頁)

(2)點擊自定義,下一步

(3)默認即可,點下一步

(4)點稍后安裝操作系統,下一步

(5)這里選Linux,版本Ubuntu 64位

(6)點擊瀏覽選擇合適的存儲位置

(7)處理器數量和內核數量選 1

(8)內存4GB,可根據個人情況調整(如果物理機只有16G,可改為3GB(3072MB))。

(9)均默認,點下一步




(10)建議磁盤大小30G,避免后續使用時空間不足,可根據個人情況調整

(11)默認,點下一步

(12)點擊完成

(13)點編輯虛擬機設置

(14)點擊CD/DVD,點擊“使用ISO鏡像文件”,再點擊瀏覽,找到剛剛下載的Ubuntu20.04鏡像

(15)點擊Install Ubuntu ,建議使用英文,避免中文報錯。

(16)點continue,
這里如果窗口太小,看不到按鈕,同時按Alt + F7,然后會出現一個手的標志,可以移動窗口,再點擊鼠標左鍵來固定

(17)點Minimal installation,點continue

(18)默認,點Install Now

(19)點擊 continue

(20)默認,點擊continue

(21)
Your name 填Hadoop
Your conputer's name 填master
設置好密碼后,點continue

(22)等待安裝

(23)安裝完成,點擊Restart Now

(24)這里直接按回車即可

(25)點擊Hadoop,輸入密碼
注意:Ubuntu安裝之后,數字小鍵盤默認關閉,按鍵盤上NumLock打開。

(26)進入之后的設置,全部點擊右上角的skip和next即可

(27)會有版本更新彈窗,點擊Don't Upgrade,再點擊OK


(28)右上角會有一個紅色圓圈,點擊,再點Show update,然后點擊Install Now,之后輸入密碼,更新即可。




(29)如果窗口太小,按Ctrl+Alt+T打開終端,輸入下面兩行代碼,運行結束之后再重啟一下虛擬機。
sudo apt update
sudo apt install open-vm-tools-desktop -y
注:輸入 sudo apt update后,如果第(28)的更新未完成的話,會報錯,等待更新完成再輸入即可

(30)現在第一個虛擬機以及創建完畢。
創建第二個和第三個虛擬機時,只有第(21)不一樣,
第二個虛擬機的Your conputer's name 填slave01
第三個虛擬機的Your conputer's name 填slave02
2.配置hosts網絡映射(三個機器均需要)
(1)輸入命令,安裝網絡工具
注:Ubuntu中,Ctrl + Shift + C 是復制,Ctrl + Shift + V 是粘貼
sudo apt install net-tools
(2)輸入命令查看ip地址
ifconfig
圖中第三行的192.168.61.142為本機IP,每個人電腦不相同。

(3)在slave01機器和slave02機器執行相同操作,并記下IP。
我的slave01的IP:192.168.61.143

我的slave02的IP:192.168.61.144

(4)三個機器都下載vim,方便后續使用。
sudo apt install vim -y
(5)編輯修改hosts文件,使節點之間通信方便
sudo vim /etc/hosts
進入之后,如下圖所示

按鍵盤“ i ”進入編輯模式(插入模式),然后用上下左右方向鍵移動光標到第三行,輸入剛剛查詢到的IP,然后加上機器名(@后面的)
例:【hadoop@master:~$】,中,master是機器名。
編輯好后如圖所示(ip地址不相同,根據自己Ubuntu的IP來修改)

編輯好之后,按鍵盤左上角ESC退出編輯模式,再按Shift + “;”,左下角會出現一個冒號“:”,然后輸入“wq”保存并退出文件。
(6)配置好hosts后,使用ping命令來測試是否配置成功,之后在另外兩個機器也配置。
ping slave01
ping slave02
出現如圖類似之后,即hosts配置成功,按Ctrl + C 終止,

3.Java JDK8 配置(三個機器均需要)
(1)在自己電腦下載好JDK之后,粘貼到虛擬機的Downloads里,鼠標右鍵,點Paste即可粘貼。
注:打開左邊第二個圖標,打開之后點Downloads,再粘貼
(也可以復制鏈接到虛擬機的瀏覽器,直接在虛擬機下載,省的再復制粘貼)


注:如果出現類似報錯,點擊Retry再點擊Skip。如果不行的話就等待一會再復制粘貼試試。如果還是不行,執行下面的命令之后重啟虛擬機。

sudo apt update
sudo apt ?autoremove open-vm-tools -y
sudo apt install open-vm-tools-desktop -y
(2)執行命令,解壓jdk
注:這里jdk-8u441-linux-x64.tar.gz不一定相同,根據個人情況修改,可以輸入jdk之后,按Tab鍵自動補全。
cd /usr/lib
sudo mkdir jvm
cd ~/Downloads //即 cd /home/hadoop/Downloads
sudo tar -zxvf jdk-8u441-linux-x64.tar.gz -C /usr/lib/jvm
(3)查看具體安裝的jdk版本號,例如我的是jdk1.8.0_441
cd /usr/lib/jvm
ls

(4)配置java環境變量
sudo vim ~/.bashrc
進入文件后,按上下方向鍵,翻到最后,插入下面語句
注:第一句的jdk不一定相同,根據第三步查詢的來修改。
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_441
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
執行命令:source ~/.bashrc,然后關閉終端,再重新打開,輸入java -version,如下圖所示即配置成功

(5)在slave01和slave02執行相同的1~4,完成配置
4.SSH 配置(三個機器均需要)
(1)安裝ssh
sudo apt install openssh-server -y
(2)測試登錄本地,驗證是否成功。
ssh localhost
輸入之后,會停頓一下,如下圖,然后輸入yes,之后會讓輸入本機密碼。

成功登錄如圖

然后輸入exit 會出現退出登錄信息

(3)前兩步驟三個機器均需下載,下載完成之后在進行第四步。
(4)在master節點生成公鑰
cd ~/.ssh
rm ./id_rsa* //如果是第一次下載ssh,可以不執行這一句
ssh-keygen -t rsa //輸入之后有停頓,全部按回車即可

(5)在本機節點上設置免密登錄并測試
cat ./id_rsa.pub >> ./authorized_keys
ssh localhost
會發現,再次執行ssh連接不再需要密碼

(6)將公鑰傳到slave01、slave02(只在master機器上操作)
注:第二個命令中hadoop@slave01需要根據自己Ubuntu的用戶名和機器名進行修改,如果你的用戶名+機器名是zhangsan@slave01,那么命令中的hadoop@slave01就需要修改為zhangsan@slave01,同理/home/hadoop也一樣改為/home/zhangsan,如果與示例相同則不需要更改
cd ~/.ssh
scp ~/.ssh/id_rsa.pub hadoop@slave01:/home/hadoop //將公鑰給slave01
scp ~/.ssh/id_rsa.pub hadoop@slave02:/home/hadoop //將公鑰給slave02
注:第二個和第三個命令之后需要輸入密碼,這個密碼是登錄slave01和slave02機器的密碼
(7)在slave節點中將公鑰保存(此步驟只在slave01和slave02上操作)
cat ~/id_rsa.pub>>~/.ssh/authorized_keys
rm ~/id_rsa.pub
(8)驗證免密連接(只在master機器上執行)
ssh slave01
注:如果你的用戶名和master機器的用戶名不一樣,那這里需要輸入完整的用戶名+機器名
例 : slave節點用戶名和機器名是zhangsan@slave01,那你這里需要輸入ssh zhangsan@slave01
這一次不需要密碼就能連接上,并且會看到用戶名和機器名由hadoop@master變成hadoop@slave01。
然后輸入exit退出連接,再測試slave02
ssh slave02
成功連接后,輸入exit退出連接
5.Hadoop安裝配置
5.1master機器執行部分
(1)在自己電腦下載好Hadoop文件之后,粘貼到虛擬機的Downloads里,鼠標右鍵,點Paste即可粘貼。
注:打開左邊第二個圖標,打開之后點Downloads,再粘貼
(如果下載速度過慢,可以搜索“磁力下載軟件”,找個順眼的安裝,這里不再推薦,將下載鏈接粘貼到磁力工具中再下載,速度會快點)

(2)解壓
注:我下載的是Hadoop-3.3.6的版本,根據自己下載的版本修改~/Downloads/hadoop-3.3.6.tar.gz這一部分,
sudo tar -zxvf ~/Downloads/hadoop-3.3.6.tar.gz -C /usr/local
cd /usr/local
sudo mv ./hadoop-3.3.6 ./hadoop //如果你的不是3.3.6,根據實際修改
sudo chown -R hadoop ./hadoop
(3)配置環境變量
sudo vim ~/.bashrc
進入文件后,按上下方向鍵,翻到最后,插入下面語句
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lin/native
export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
執行命令:source ~/.bashrc,然后關閉終端,再重新打開一個終端,輸入hadoop version,如下圖即配置成功

(4)文件配置
文件1
cd /usr/local/hadoop/etc/hadoop
vim core-site.xml
打開文件后,翻到最后一行,先將文件自帶的<configuration>和</configuration>刪除,(<configuration> 是XML文件的根元素,只能出現一次,必須唯一!)

再將下面內容粘貼到文件中
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abasefor other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.spark.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.spark.groups</name>
<value>*</value>
</property>
</configuration>
文件2:
vim hdfs-site.xml
操作跟上面一樣,翻到文件最下面后,先將文件自帶的<configuration>和</configuration>刪除,再將內容粘貼到文件上
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
文件3:
vim yarn-site.xml
操作同上,先將文件自帶的<configuration>和</configuration>刪除,再將下面代碼粘貼到文件里
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
文件4:
vim mapred-site.xml
//如果你打開之后是空白文件,先退出文件,再執行下面的命令;如果打開之后有內容,不用執行
cp mapred-site.xml.template mapred-site.xml
操作同上,先將文件自帶的<configuration>和</configuration>刪除,再將下面代碼粘貼到文件里
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
文件5:
sudo vim hadoop-env.sh
操作同上,這個不用刪<configuration>和</configuration>,直接將下面代碼粘貼到文件最后,可以按方向鍵上面的PgDn/PageDown按鍵加快翻動
注:jdk版本根據自己下載的更改,此處與剛剛Java環境變量配置的路徑一樣。
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_441
文件6:
sudo vim workers

打開之后默認是localhost,刪除,然后將下面內容粘貼到里面。
hadoop@slave01
hadoop@slave02
注:此處是兩個slave節點的完整用戶名和機器名,如果你的用戶名或機器名與示例不同,需要修改。

(5)壓縮文件
cd /usr/local
sudo rm -rf ./hadoop/tmp
sudo rm -rf ./hadoop/logs
tar -zcvf ~/hadoop.master.tar.gz ./hadoop
(6)將壓縮好的文件發送到slave機器上
scp ~/hadoop.master.tar.gz hadoop@slave01:/home/hadoop
scp ~/hadoop.master.tar.gz hadoop@slave02:/home/hadoop
注:此處hadoop@slave01是slave01虛擬機的完整用戶名和機器名,如果與示例不同,根據自己的用戶名和機器名修改,/home/hadoop的hadoop同理。
5.2 slave機器執行部分(slave01和slave02均需要執行一遍)
(1)在slave節點上解壓hadoop.master.tar.gz文件,并給予授權
sudo rm -rf /usr/local/hadoop
sudo tar -zxvf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
注:-R 后面的hadoop是slave節點的用戶名,如果與示例不同,根據自己的情況修改。
/usr/local/hadoop這部分是固定的,不需要修改。
6. Hadoop啟動與停止
(1)格式化NameNode(只在master上操作)
hdfs namenode -format
注:只執行一次就行,之后再使用Hadoop,不需要再格式化?。?!
運行完結果類似下圖

(2)啟動HDFS(只在master節點上操作)
start-dfs.sh
然后在master,slave01,slave02上分別輸入jps,結果如下圖
master節點
slave01節點
slave02節點
(3)啟動YARN(只在master節點上操作)
start-yarn.sh
然后在master,slave01,slave02上分別輸入jps,結果如下圖
master節點
slave01節點
salve02節點
(4)網頁訪問(在master機器上操作)
在瀏覽器中打開http://master:8088/cluster/nodes,節點情況如下圖

如果能正常打開網頁,但沒有節點,先stop停止進程,
執行sudo vim /etc/hosts,在第二行加個#和空格,如圖,
之后再次運行進程就好了

(5)停止HDFS和YARN
stop-yarn.sh
stop-dfs.sh
也可以直接執行stop-all.sh全部關閉。
附錄:
有小伙伴兩小時急速完成,期待有新的記錄產生
有小伙伴1小時17分鐘急速完成,期待有新的記錄產生
7.部分問題解決:
1.多次執行格式化操作hdfs namenode -format之后,導致DataNode進程或namenode看不到了。
解決:這里給出一個適用于重啟運行的方式:刪除所有節點的/usr/local/hadoop/dfs中的內容,一般是name和data兩個文件夾,因為這里記錄了上次運行的集群ID等信息可能會導致沖突(當然這里只是部署階段,如果運行了很久,重要的數據需要小心)。然后清一下logs數據,方便再運行查看錯誤問題。最后在master節點上執行hadoop namenode -format,就可以再啟動Hadoop了。
舉個不恰當的例子,就好像第一次格式化之后,dfs的實際位置id刷新在麻辣燙,第二次格式化之后,dfs實際位置刷新到火鍋,但是文件仍然保存著第一次麻辣燙的位置,實際位置與文件保存的位置不一樣,命令運行的時候部分信息就亂跑了,導致datanode與namenode無法加載出來。
注:在執行之前,先stop-all.sh,將進程都停止了
(1)以下是直接操作的代碼:(master和slave上都要執行)
cd /usr/local/hadoop
rm -rf /usr/local/hadoop/dfs
rm -rf /usr/local/hadoop/tmp
rm -rf /usr/local/hadoop/logs
(2)把第一步的代碼,在master和slave機器上都執行之后,再進行下一步
(3)在master機器上執行下面代碼
hdfs namenode -format //格式化
(4)啟動HDFS(只在master節點上操作)
start-dfs.sh
(5)啟動YARN(只在master節點上操作)
start-yarn.sh
(6)之后jps與查看網頁步驟同上
2.IP自動更改
部分人的虛擬機,在再次打開后,會發現ip與上一次的ip不一樣了,可以修改hosts(參考第二大步),或者參考網上設置靜態IP。







浙公網安備 33010602011771號