文章目錄
注意事項
- 需要注意每一步執行的順序,例如如果在生成了ssh密鑰後修改了主機名,則需要重新在生成密鑰,還有許多類似的細節需要注意,不然會做出很多重複無用的工作。
- 注意權限問題,
大部分操作都需要加sudo,但是sudo也只是獲取root的部分權限,😂😂一開始切換到root用戶就行了,不需要每個命令加sudo,切換su root
如果出現其他權限問題的話,只能自行百度了。 - 虛擬機真的很容易崩(可能是因爲我窮的原因。。。),如果出現問題一定要耐心耐心,搜一搜,等一等,多試試總是能解決的,畢竟我這個小集羣也配了四五天,每天都有新問題呢。。。。頭有點禿。。。
下面是完整步驟。。
1. 安裝虛擬機
本篇博客用的是VMWare和CentOS7
開啓虛擬機
開始安裝。。。等很久
設置root密碼
2. 複製虛擬機
在創建了一個虛擬機後,找到存放地址,直接將虛擬機複製粘貼即可複製虛擬機
打開文件夾中的.vmx文件即可打開復制後的虛擬機,會跳出一個選項,選擇複製虛擬機即可
在VMware中可以對虛擬機重命名,直接右鍵可以看到選項
由於是直接複製的虛擬機,所以三個虛擬機的MAC地址是相同的,後面需要對其進行修改
3. 設置IP和MAC地址
首先需要查看不同虛擬機的mac地址,路徑爲:虛擬機->設置->網絡適配器->高級
點擊生成按鈕就可以自動生成新的mac地址
3.1 更改mac地址
sudo vim /etc/udev/rules.d/70-persistent-ipoib.rules
將文件中的MAC地址更改爲虛擬機對應的mac地址即可
3.2 更改ip地址
本篇博客使用的網絡連接方式是橋接模式,橋接網絡是wlan,因此ip應該與WLAN在一個網段,在cmd中輸入ipconfig即可查詢本地WLAN的ip及其他網絡信息。
更改配置文件地址爲
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
需要注意的是CentOS6中沒有ifcfg-ens33 文件,對應的是ifcfg-eth0文件,因此如果找不到ifcfg-ens33 文件則需要修改ifcfg-eth0文件
重啓網絡
service network start
需要ifconfig和ping一下驗證網絡配置是否好了。
4. 關閉防火牆和SELinux
4.1 關閉防火牆
sudo service iptables stop
報錯Failed to stop iptables.service: Unit iptables.service not loaded.
參考博客https://blog.csdn.net/zhou_438/article/details/86761398 找到的解決方法如下(大概還是CentOS版本問題,如果是7以上可以用上面的命令完成,7以後的需要用下面的命令完成):
systemctl stop firewalld
systemctl disable firewalld.service
CentOS7中關於防火牆的命令有下面這些:
# 查看防火牆狀態
firewall-cmd --state
# 停止防火牆
systemctl stop firewalld.service
# 禁止防火牆開機啓動
systemctl disable firewalld.service
4.2 關閉selinux
SELinux是Linux中的一種安全子系統,在文件權限外增加了對進程的限制,進程只能在進程允許的範圍內操作資源。如果開啓了SELinux, 需要做非常複雜的配置, 才能正常使用系統, 在學習階段, 在非生產環境, 一般不使用SELinux 。
SELinux的工作模式:
- enforcing 強制模式
- permissive 寬容模式
- disabled 關閉
修改配置文件
# 修改selinux的配置文件
sudo vim /etc/selinux/config
將工作模型從強制模式改爲關閉
5. 虛擬機免密登陸
Hadoop 節點衆多, 所以一般在主節點啓動從節點, 這個時候就需要程序自動在主節點登錄到從節點中, 如果不能免密就每次都要輸入密碼, 非常麻煩
免密登陸利用SSH密鑰:
- 先在B節點 配置 A節點 的公鑰
- A節點請求B節點 要求登錄
- B節點使用A節點的公鑰, 加密一段隨機文本
- B節點使用 A節點的公鑰, 加密一段隨機文本
- B節點 驗證文本是否正確
首先需要修改主機名,配置文件路徑如下,將主機名修改爲自己需要的名稱
sudo vim /etc/hostname
修改後可以通過hostnamectl
命令查看主機名是否被修改
5.1 生成公鑰和私鑰
ssh-keygen -t rsa
如果這條命令執行後生成了id_rsa id_rsa.pub
兩個文件,需要加入授權
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
需要更改.ssh和authorized_keys的權限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
5.2 複製公鑰到同一臺機器
給每臺虛擬機設置ip和域名映射
sudo vim /etc/host
192.168.88.120 hadoop1
192.168.88.130 hadoop2
192.168.88.140 hadoop3
本博客是以三臺虛擬機爲例搭建hadoop集羣,將hadoop1作爲Master,hadoop2和hadoop3分別爲Slave1、Slave2
將hadoop1的公鑰複製給hadoop2
ssh-copy-id -i zoe@hadoop2
報錯ERROR: ssh: Could not resolve hostname hadoop2: Name or service not known
解決方法:將hadoop2和hadoop3的ip加到hadoop1的etc/hosts中
例如192.168.80.100 hadoop0
成功
再次確認ssh hadoop2
6. 安裝SecureCRT並連接虛擬機
參考博客https://blog.csdn.net/qq_39052513/article/details/100272502
7. 安裝jdk
通過SecureCRT連接三臺虛擬機,SecureCRT可以打開交互窗口同時給三臺虛擬機發送命令。View->Command Window->right click->send commands to all sessions
7.1 卸掉自帶的java
# grep是查找含java的文件
rpm -qa | grep java
# 把上面搜索到的文件都刪除,--nodeps是跳過依賴檢查
sudo rpm -e java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64 --nodeps
7.2 創建安裝目錄
sudo mkdir -p /export/softwares #軟件包存放目錄
sudo mkdir -p /export/servers #安裝目錄
7.3 上傳jdk包並解壓
使用rz -E
從本地上傳文件,如果報錯,則需要安裝lrzsz配置工具。
sudo yum -y install lrzsz
將壓縮包放到上面建好的安裝目錄下
# 將壓縮包放到軟件包存放目錄下
sudo mv jdk-8u141-linux-x64.tar.gz /export/softwares/
#上傳jdk到/export/softwares路徑下去,並解壓
sudo tar -zxvf jdk-8u141-linux-x64.tar.gz -C ../servers/
7.4 配置環境變量
vim /etc/profile
export JAVA_HOME=/export/servers/jdk1.8.0_141
export PATH=:$JAVA_HOME/bin:$PATH
修改後要讓文件生效
source /etc/profile
# 查看Java是否安裝
java -version
一個虛擬機安裝好後可以直接複製到其他虛擬機中
scp -r jdk1.8.0_141/ hadoop2:/export/services/
8. 安裝ZooKeeper
8.1 下載zookeeper壓縮包
http://archive.apache.org/dist/zookeeper/
8.2 解壓壓縮包
使用rz -E
從本地上傳文件
sudo rz -E
解壓文件
sudo tar -zxvf zookeeper-3.4.9.tar.gz -C ../servers/
8.3 修改配置文件
第一臺服務器修改配置文件
cd /export/servers/zookeeper-3.4.9/conf/
sudo cp zoo_sample.cfg zoo.cfg
sudo mkdir -p /export/servers/zookeeper-3.4.9/zkdatas/
sudo vim zoo.cfg
修改配置文件
注意服務器配置不能用主機名要用ip,否則後面可能報錯
dataDir=/export/servers/zookeeper-3.4.9/zkdatas
# 保留多少個快照
autopurge.snapRetainCount=3
# 日誌多少小時清理一次
autopurge.purgeInterval=1
# 集羣中服務器地址
server.1=192.168.88.120:2888:3888
server.2=192.168.88.130:2888:3888
server.3=192.168.88.140:2888:3888
8.4 添加myid配置
將第一臺機器上的安裝包傳給其他兩臺機器
scp -r /export/servers/zookeeper-3.4.9/ hadoop2:/export/servers/
scp -r /export/servers/zookeeper-3.4.9/ hadoop3:/export/servers/
在第一臺服務器的/export/servers/zookeeper-3.4.9/zkdatas /這個路徑下創建一個文件,文件名爲myid ,文件內容爲1
sudo sh -c 'echo 1 > /export/servers/zookeeper-3.4.9/zkdatas/myid'
第二臺服務器myid改爲2,第三臺改爲3
sudo sh -c 'echo 2 > /export/servers/zookeeper-3.4.9/zkdatas/myid'
sudo sh -c 'echo 3 > /export/servers/zookeeper-3.4.9/zkdatas/myid'
8.5 啓動zookeeper服務
三臺機器都啓動服務
sudo /export/servers/zookeeper-3.4.9/bin/zkServer.sh start
如果報錯看zookeeper.out文件,文件在/export/servers/zookeeper-3.4.9/zkdatas/下
剛開始報錯nohup: 無法運行命令"java": 沒有那個文件或目錄
,這大概是因爲之前把自帶的jdk刪掉了重新下載的,Java能運行也沒有用,必須在/export/servers/zookeeper-3.4.9/bin/zkServer.sh
下增加JAVA_HOME=/export/servers/jdk1.8.0_141
,注意要加在最前面,我剛開始加後面也沒有用。
然後又報錯。。。。。。
在配置文件zoo.cfg中添加
quorumListenOnAllIPs=true
查看狀態
/export/servers/zookeeper-3.4.9/bin/zkServer.sh status