CentOS 7 + Hadoop3 伪分布式集群配置
轉(zhuǎn)自:https://www.cnblogs.com/thousfeet/p/8618696.html
ps:本文的步驟已自實現(xiàn)過一遍,在正文部分避開了舊版教程在新版使用導(dǎo)致出錯的內(nèi)容,因此版本一致的情況下照搬執(zhí)行基本不會有大錯誤。如果按本文步驟進(jìn)行的時候出事了,可以鼠標(biāo)選中博客頁面右側(cè)的目錄導(dǎo)航看看最后一部分的意外出事的坑點解決方案。
準(zhǔn)備linux主機(jī)環(huán)境
一、安裝虛擬機(jī)
下載地址:
VMware workstation 14 Pro (附:許可證秘鑰)
系統(tǒng)iso:CentOS7 Minimal
基本上就是下一步下一步這種簡單的默認(rèn)安裝就好了。除了在安裝過程中配置分區(qū)的時候可能需要手動分區(qū),然后選擇標(biāo)準(zhǔn)分區(qū)即可。
裝好后,修改內(nèi)存,因為不需要圖形界面,所以只給個512M內(nèi)存也沒問題。并更改網(wǎng)絡(luò)適配器為VMnet8(NAT)。
附上NAT方式的工作原理
(CentOS和Windows這兩臺機(jī)子通過虛擬網(wǎng)關(guān)互聯(lián),虛擬網(wǎng)關(guān)由VMware workstation生成,在Windows上會生成一個虛擬網(wǎng)卡VMnet8,這個網(wǎng)卡地址和本機(jī)的物理網(wǎng)卡沒有關(guān)系)
二、網(wǎng)絡(luò)配置
在VMware workstation的菜單 編輯 -> 虛擬網(wǎng)絡(luò)編輯器 可以查看和修改虛擬網(wǎng)關(guān)地址。
然后打開控制面板的網(wǎng)絡(luò)連接查看VMnet8的IP地址
如圖,在我這臺機(jī)子上:
虛擬網(wǎng)關(guān)地址 192.168.216.1
VMnet8 IP地址 192.168.216.2
運(yùn)行虛擬機(jī),進(jìn)行網(wǎng)絡(luò)配置:
1.輸入 ip addr 看到我的網(wǎng)卡叫做ens33
2.輸入 ls /etc/sysconfig/network-scripts/ 看到網(wǎng)卡ip信息的配置文件名叫做ifcfg-ens33
3.輸入 cat /etc/sysconfig/network-scripts/ifcfg-ens33 查看,可以發(fā)現(xiàn)雖然BOOTPROTO=dhcp,但是ONBOOT=no
(下面4-6步純屬實驗性質(zhì)可忽視,直接開始第7步)
4.輸入 vi /etc/sysconfig/network-scripts/ifcfg-ens33 將ONBOOT=no修改為yes,在此之前要先進(jìn)入root模式chmod 777 文件名把文件改為可寫狀態(tài)。修改完畢后,cat一下看看
5.輸入 shutdown -r now 重啟系統(tǒng)
6.重啟完成后,ip addr 看到分配到的地址是192.168.216.128
下面開始進(jìn)行固定ip的設(shè)置。
7.輸入vi /etc/sysconfig/network-scripts/ifcfg-ens33,用#將BOOTPROTO=dhcp注釋,并輸入以下參數(shù),把ip地址固定寫為192.168.216.100
(后來看到有BOOTPROTO=dhcp這行不注釋而是改為BOOTPROTO=static,以及多配置一行NETMASK=255.255.255.0而沒有DNS那行的,似乎也可以)
8.輸入 service network restart 重啟網(wǎng)絡(luò)服務(wù)
9.輸入 ip addr 確認(rèn)配置成功
10.PING 一波試試。
現(xiàn)在用windows主機(jī)ping一下剛配置好的虛擬機(jī)試試看能否ping通,行的話這步就已經(jīng)完成了。
三、修改主機(jī)名
下載安裝終端軟件 Mobaxterm。點擊 sessions -> New sessions -> SSH,輸入虛擬機(jī)的IP地址和用戶名。現(xiàn)在就可以把剛建好的虛擬機(jī)假裝是遠(yuǎn)程終端一樣的用了。
然后修改主機(jī)名方便集群間的訪問
sudo vi /etc/sysconfig/network ,假設(shè)我給它起名字叫node01,則輸入
NETWORKING=yes HOSTNAME=node01改好后需要重啟。若不想重啟可以輸入 sudo hostname node01 然后exit登出,重新登錄終端,就可以看到已經(jīng)生效了。
(可以看到原本是localhost的地方變?yōu)榱薾ode01)
修改域名解析映射文件使得后續(xù)可以直接通過主機(jī)名訪問,sudo vi /etc/hosts,添加一行 IP地址 主機(jī)名
PING一波試試是否已生效
到此為止linux主機(jī)環(huán)境已完成。
安裝jdk
一、下載解壓
在主目錄~下新建一個文件夾來放之后要裝的所有文件比如叫做app mkdir app
從官網(wǎng)下載jdk包,我下載的是 jdk-8u161-linux-x64.tar.gz
打開 Mobaxterm。點擊 sessions -> New sessions -> SFTP,注意要使用root登錄。然后打開相應(yīng)目錄直接把本地文件拖拽到那一大塊空白處即可。
把剛剛的壓縮包解壓到這個目錄下 tar -zxvf jdk-8u161-linux-x64.tar.gz -C ~/app/ (后面那個參數(shù)是由于我拖拽的時候把原壓縮包放到/usr/java文件夾了所以用 -C 把它解壓到指定文件夾下)
進(jìn)入 app/jdk1.8.0_161/bin 目錄下,./java -version 看是否成功安裝
二、配置環(huán)境變量PATH
sudo vi /etc/profile在最末尾處添加兩行
export JAVA_HOME=/home/thousfeet/app/jdk1.8.0_161 export PATH=$PATH:$JAVA_HOME/bin(JAVA_HOME變量的值可能因人而異,查看方式可以是在 mobaxterm 的左側(cè)這個 session 的圖標(biāo)上右擊->duplicate session 復(fù)制出一個新 session ,然后進(jìn)入之前jdk文件夾下輸入pwd,然后選中這串東西貼過來)
配置好了之后我們想要使它立刻生效,輸入 source /etc/profile,然后輸入 java -version看到能夠使用。這樣就已經(jīng)配置好了。
安裝Hadoop
下載 hadoop 3.0.0 壓縮包。
打開 Mobaxterm 剛剛那個 SFTP ,老樣子拖拽上傳解壓到/app。
進(jìn)入解壓目錄 cd /app/hadoop-3.0.0/etc/hadoop
一、配置 hadoop-env.sh
vi hadoop-env.sh,修改 JAVA_HOME 為之前那個參數(shù)
二、配置 core-site.xml
vi core-site.xml,在configuration中添加各配置項
1.配置默認(rèn)采用的文件系統(tǒng)。
(由于存儲層和運(yùn)算層松耦合,要為它們指定使用hadoop原生的分布式文件系統(tǒng)hdfs。value填入的是uri,參數(shù)是 分布式集群中主節(jié)點的地址 : 指定端口號)
2.配置hadoop的公共目錄
(指定hadoop進(jìn)程運(yùn)行中產(chǎn)生的數(shù)據(jù)存放的工作目錄,NameNode、DataNode等就在本地工作目錄下建子目錄存放數(shù)據(jù)。但事實上在生產(chǎn)系統(tǒng)里,NameNode、DataNode等進(jìn)程都應(yīng)單獨配置目錄,而且配置的應(yīng)該是磁盤掛載點,以方便掛載更多的磁盤擴(kuò)展容量)
(value的參數(shù)仍與之前一樣可以進(jìn)入解壓目錄輸入pwd查看)
三、配置 hdfs-site.xml
vi hdfs-site.xml,配置hdfs的副本數(shù)
(客戶端將文件存到hdfs的時候,會存放在多個副本。value一般指定3,但因為搭建的是偽分布式就只有一臺機(jī)器,所以只能寫1。)
四、配置 mapred-site.xml
vi mapred-site.xml,指定MapReduce程序應(yīng)該放在哪個資源調(diào)度集群上運(yùn)行。若不指定為yarn,那么MapReduce程序就只會在本地運(yùn)行而非在整個集群中運(yùn)行。
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>五、配置 yarn-site.xml
vi yarn-site.xml,要配置的參數(shù)有2個:
1.指定yarn集群中的老大(就是本機(jī))
<property> <name>yarn.resourcemanager.hostname</name> <value>node01</value> </property>2.配置yarn集群中的重節(jié)點,指定map產(chǎn)生的中間結(jié)果傳遞給reduce采用的機(jī)制是shuffle
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>六、配置環(huán)境變量PATH
輸入 sudo vi /etc/profile
加入一行 export HADOOP_HOME=/home/thousfeet/app/hadoop-3.0.0
以及修改PATH,追加參數(shù) export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
然后記得 source /etc/profile
現(xiàn)在就可以在任意地方使用hadoop指令了。
關(guān)掉防火墻
由于hadoop中的程序都是網(wǎng)絡(luò)服務(wù),需要監(jiān)聽端口,這些端口默認(rèn)會被linux防火墻擋住。因此要把hadoop中的端口一個個打開,或者把防火墻關(guān)掉。由于都是內(nèi)網(wǎng),所以關(guān)掉就好了。
sudo firewall-cmd --state 查看防火墻狀態(tài)
sudo systemctl stop firewalld.service 關(guān)閉防火墻
再次查看狀態(tài),看到已經(jīng)關(guān)閉了。但在下一次開機(jī)時還會自啟動,因此 sudo systemctl disable firewalld.service 禁止開機(jī)時防火墻自啟。
實現(xiàn)SSH免密碼遠(yuǎn)程登錄
SSH機(jī)制解析圖(假如有一臺叫做weekend110的終端要遠(yuǎn)程登錄叫做spark01的終端)
我們要做的只是黑色箭頭的步驟,綠色的是SSH機(jī)制的內(nèi)部實現(xiàn)。
一、創(chuàng)建公鑰/私鑰
ssh-keygen -t rsa,然后yes加一路回車
二、創(chuàng)建authorized_keys文件并修改權(quán)限為600
cd .ssh touch authorized_keys chmod 600 authorized_keys三、將公鑰追加到authorized_keys文件中去
cat id_rsa.pub >> authorized_keysssh node01 試試看能否成功免密登錄
(因為是偽分布式集群,其實就是自己登錄自己)
啟動Hadoop
一、初始化(格式化)
輸入 hadoop namenode -format
二、啟動
start-dfs.sh` `start-yarn.sh然后輸入jps 查看已成功啟動的進(jìn)程
若出現(xiàn)這六個都沒少則說明已全部成功啟動了。
幾個坑點
出事點1:can’t open file for writing
在網(wǎng)絡(luò)配置第4步的時候,遇到了can't open file for writing,然而試圖chmod也并沒有成功,查了半天得知可能需要刪除在/var/tmp路徑下的.swp隱藏文件(來自http://blog.csdn.net/luoluoguo/article/details/11557291)。然后chmod,發(fā)現(xiàn)root狀態(tài)下vi這個文件看到里面內(nèi)容是空的(?)于是切換回普通用戶vi修改保存后退出就成功了。
出事點2:不在sudoers文件中
第一次使用sudo命令的時候失敗提示“不在sudoers文件中”
因此要切換到root修改一下sudoers文件:vi /etc/sudoers,在如下圖的位置加上一行自己的用戶名
出事點3:wget下載JDK后解壓不了
安裝jdk的時候試圖用wget直接從官網(wǎng)下載,高高興興的一波操作
sudo wget http://download.Oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz tar -xf jdk-8u121-linux-x64.tar.gz發(fā)現(xiàn)GG了,怎么都解壓不了,查了下發(fā)現(xiàn)非要手動下載再傳,迷得不行orz(來自http://blog.csdn.net/jdjdndhj/article/details/73649419#/)
出事點4:Found a swap file by the name “/etc/.profile.swp”
環(huán)境變量配置到一半的時候電腦突然死機(jī)了(T T 渣機(jī)是真的難受),重啟后再次進(jìn)入編譯/etc/profile的時候出現(xiàn)如下錯誤提示
E325: ATTENTION
Found a swap file by the name “/etc/.profile.swp”
owned by: root dated: Wed Jul 14 10:01:10 2010
file name: /etc/profile
modified: YES
user name: root host name: zhaoyang-laptop
process ID: 1934
While opening file “/etc/profile”
dated: Thu Apr 29 20:18:30 2010
解決方法是:q!退出vi編輯器,在終端輸入sudo rm -f /etc/.profile.swp
出事點5:啟動hadoop后jps查看進(jìn)程只有一個
在配置完成后我直接啟動了hadoop并jps查看,發(fā)現(xiàn)只有JPS一個進(jìn)程,開始沒注意啟動過程提示一直在檢查配置錯誤,除去上文的配置又補(bǔ)做了如下操作:(事實上下面的做不做都并不需要,但為了避免最終操作和文中不符所以還是列出來)
修改了hadoop-env.sh配置了hadoop_home變量
把core-site.xml的9000后多余的/去掉
mapred-site.xml加上了
后來恍然意識到是沒有輸入密碼,啟動過程中也不會給輸入密碼的提示步驟,所以一定要先配置SSH免密登錄。
出事點6:啟動hadoop后jps查看進(jìn)程沒有datanode
這個坑點是重復(fù)格式化造成的。
當(dāng)我們執(zhí)行文件系統(tǒng)格式化時,會在namenode數(shù)據(jù)文件夾(即配置文件中dfs.name.dir在本地系統(tǒng)的路徑)中保存一個current/VERSION文件,記錄namespaceID,標(biāo)識了所格式化的 namenode的版本。如果我們頻繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系統(tǒng)的路徑)的current/VERSION文件只是你第一次格式化時保存的namenode的ID,因此就會造成datanode與namenode之間的id不一致。
我們之前配置的時候是一起放在一個data文件夾下,所以先進(jìn)到那個路徑下去查看:cd /home/thousfeet/app/hadoop-3.0.0/data/dfs,會看到一個data文件夾和一個name文件夾。
cd cd name/current/,然后cat VERSION,把namenode的clusterID復(fù)制下來。
然后回到data文件夾下的current文件夾,vi VERSION,果然datanode這里的clusterID和namenode里的不一致,就把這串替換成剛復(fù)制過來的就好了。
這時候stop-all.sh,然后重新啟動就好了。
出事點5:啟動hadoop后無法訪問50070端口
jps查看一切正常,防火墻也已經(jīng)關(guān)閉。查看監(jiān)聽的端口發(fā)現(xiàn)8088都有,就是沒有50070。
解決方案:
在 hdfs-site.xml 添加如下:
<property> <name>dfs.http.address</name> <value>192.168.216.100:50070</value> </property>然后重新格式化namenode,啟動hadoop。
(來自https://blog.csdn.net/Neone__u/article/details/53741786)
附:vi命令的使用
首先使用命令 vi filename 打開一個文件,這個時候進(jìn)入到的是命令模式
接下來按 i 進(jìn)入insert模式,然后鍵盤隨便輸入寫內(nèi)容。
然后按ESC重新進(jìn)入到命令模式。
在命令模式的情況下,按 : ,進(jìn)入到了末行模式。
輸入wq!,然后回車,強(qiáng)行保存退出。
下次再打開對應(yīng)文件(可用less filename命令打開),即可看到內(nèi)容已經(jīng)更改。
補(bǔ)充:
(1)末行模式下:q! 【強(qiáng)制退出不保存】 q【退出不保存】 wq【退出并保存后面也可以加個!】
(2)如果你不想保存直接退出有可以在命令模式下使用“ctrl+z”快捷鍵或者按住“shift”鍵,輸入兩個z即可退出。
參考資料
CentOS 7 網(wǎng)絡(luò)配置詳解
CentOS中防火墻相關(guān)的命令(CentOS7中演示)
VMware安裝Centos7超詳細(xì)過程(圖文)
總結(jié)
以上是生活随笔為你收集整理的CentOS 7 + Hadoop3 伪分布式集群配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VSCode + Latex 配置
- 下一篇: ubuntu下vi/vim 的基本使用法