VMware 下Hadoop叢集環境搭建之虛擬機器克隆,Hadoop環境配置
在上一篇我們完成了ContOS網路配置以及JDK的安裝,這一篇將在上一篇的基礎上繼續講解虛擬機器的克隆,hadoop環境搭建
虛擬機器克隆.
利用上一篇已經完成網路配置和jdk安裝的虛擬機器在克隆兩臺虛擬機器.
1. 將擬機hadoop01關機.
2. 如動圖演示那樣,選中hadoop01,然後滑鼠右鍵,在出來的選單中選擇 管理—>克隆:
3. 下一步:
4. 選中虛擬機器中當前狀態,然後下一步:
5. 選擇建立完成克隆,然後下一步:
6. 這一步,將虛擬機器名稱更改為hadoop02,並將儲存位置修改為與上一個虛擬機器在相同資料夾下,其中每個虛擬機器各自有一個資料夾,這裡我的目錄可能與上面兩篇文章的目錄有所不一樣,原因是我發現之前的Hadoop就存了一個hadoop01,為了區分我的其他虛擬機器,以及讓每個虛擬機器單獨一個資料夾,我將Hadoop命名為hadoop01,並在上層目錄下新建了一個bolg-hadoopes目錄,然後將hadoop01拖到bolg-hadoopes下.注意,在改動了目錄機構以後,在VMware中選中虛擬機器可能就會報一個找不到虛擬機器的錯誤,然後提示移除,移除就好了,然後VMware的選單中 檔案—>開啟—>定位到hadoop01的位置,選中hadoop01.vmx開啟即可.
7. 點選完成,等待克隆結束,就又建立了一個和上面那個一模一樣的虛擬機器:
8. 同樣的方式,再克隆一臺取名為hadoop03的虛擬機器.
9. 分別開啟剛克隆的這兩臺以及之前的那一臺共3臺虛擬機器.
10. 用XShell登入到hadoop01,hadoop02,hadoop03,為避免混亂,在XShell中分別將3個虛擬機器命名為h1,h2,h3.XShell連線到虛擬機器的方式請參見上一篇文章.
11. 開啟克隆的兩臺虛擬機器的時候,我們會看到主機名都是hadoop1,ip也沒有規律,這將給初學者的我們帶來很大的不便,所以我決定將他們規劃如下:
hadoop1(192.168.93.120),
hadoop2(192.168.93.121),
hadoop3(192.168.93.122)
分別修改克隆的兩臺虛擬機器主機名和IP地址
編輯/etc/udev/rules.d/70-persistent-net.rules 這個檔案:
vim /etc/udev/rules.d/70-persistent-net.rules# PCI device 0x8086:0x100f (e1000) #這條是來自克隆的那臺虛擬機器的配置,將這條註釋:原因是ATTR{address}=="00:0c:29:21:6f:26"的實體地址資訊是來自克隆的虛擬機器 #SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:21:6f:26"
編輯網絡卡配置資訊,修還實體地址和IP地址即可.實體地址檢視方式請參見上一篇文章.
vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0 HWADDR=00:0c:29:64:74:a4 #修改實體地址,實體地址請根據自己的VMware獲取 TYPE=Ethernet UUID=afcc5664-3e15-4768-b5ab-45f1c53f7a68 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.93.121 #修改IP地址 PREFIX=24 GATEWAY=192.168.93.2 DNS1=8.8.8.8 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0"
修改主機名:
vim /etc/sysconfig/networkNETWORKING=yes HOSTNAME=hadoop2
分別編輯3臺機器的hosts檔案,在已有內容後面新增地址對映:
vim /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.93.120 hadoop1 www.hadoop1.com 192.168.93.121 hadoop2 www.hadoop2.com 192.168.93.122 hadoop3 www.hadoop3.com
- 重啟克隆的兩臺機器.
- 測試3臺機器之前是否可以相互通訊.
- 用hadoop1分別ping hadoop2,hadoop3:
- 用hadoop2分別ping hadoop1,hadoop3.
- 用hadoop3分別ping hadoop1,hadoop2.
- 用hadoop1分別ping hadoop2,hadoop3:
新建使用者並配置sudo許可權
- 我們在安裝CentOS系統的時候,因為直接用root使用者而被警告,因為root使用者許可權過大,如果經常有刪除修改操作,可能會有危險,接下來,我們在hadoop1上新建一個hadoop使用者,之後搭建hadoop環境,都用hadoop使用者來完成,除非特別說明.
- 新增hadoop使用者
useradd hadoop - 給hadoop設定密碼
passwd hadoop 給hadoop配置sudo許可權(在命令前加上sudo,可以執行root許可權才能執行的命令)
編輯sudoers檔案,在編輯之前我們可能檢視一下sudoers的資訊:
ll /etc/sudoers-r--r-----. 1 root root 4002 Mar 2 2012 /etc/sudoers
我們可以看到該檔案連root使用者都是隻讀的.所以要想修改該檔案內容,需要先修改一下該檔案的許可權,給root新增寫許可權:
chmod u+w /etc/sudoers
編輯該檔案:vim /etc/sudoers## ## Allow root to run any commands anywhere root ALL=(ALL) ALL #給hadoop使用者新增sudo許可權 hadoop ALL=(ALL) ALL ## Allows members of the 'sys' group to run networking, software, ## service management apps and more. # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS ## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL # 執行sudo許可權時不需要輸入密碼 %hadoop ALL=(ALL) NOPASSWD: ALL ## Allows members of the users group to mount and unmount the
測試sudo許可權.
- 在hadoop的home下新建一個file1檔案.
touch /home/file1. 檢視/home/file1. 資訊:
-rw-r--r--. 1 root root 0 May 1 00:32 /home/file1
從檔案資訊 可以看出,只有root可以讀寫刪除該檔案.
- 切換到hadoop
su hadoop 刪除/home/file1檔案
rm -rf hadooprm: cannot remove `/home/file1': Permission denied
結果是刪除檔案失敗,許可權異常.
- 用新增sudo來刪除
sudo rm -rf /home/file1
可以看到結果刪除成功了,說明我們sudo許可權配置成功.
- 在hadoop的home下新建一個file1檔案.
- 在hadoop2,hadoop3上同樣的分別新建一個hadoop使用者,並配置sudo許可權.
安裝hadoop並配置相關檔案.
- 在hadoop1上切換至hadoop使用者,注意,接下來的配置需要在hadoop使用者下完成,如果在配置過程中,隨意切換使用者,導致某些操作在不同使用者下來完成的,後期啟動hadoop叢集的時候會因hadoop檔案的許可權問題導致啟動失敗,排查起錯誤來也會比較困難.
- 在hadoop的家目錄下新建一個apps資料夾
mkdir /home/hadoop/apps - 用xftp上傳hadoop-2.7.5.tar.gz包到該目錄下(具體操作請參見上一篇)上傳jdk的方式.
hadoop-2.7.5.tar.gz的連結:https://pan.baidu.com/s/1o9CXsn71kfNVNKIQX0PW5w 密碼:hf19 - 解壓hadoop-2.7.5.tar.gz包:
tar -zxvf /home/hadoop/apps/hadoop-2.7.5.tar.gz - 解壓後的結果:
- 進入到hadoop-2.7.5
cd /home/hadoop/apps/hadoop-2.7.5 - 在/home/hadoop/apps/hadoop-2.7.5新建一個data目錄(hadoop引數的資料存放目錄)
mkdir /home/hadoop/apps/hadoop-2.7.5/data 配置hadoop-env.sh檔案:
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim hadoop-env.sh# set JAVA_HOME in this file, so that it is correctly defined on # remote nodes. # The java implementation to use. #在這裡新增JDK安裝目錄的環境變數,這裡我又嘗試過 JAVA_HOME=${JAVA_HOME},但是不能起作用,還是老老實實的寫吧 export JAVA_HOME=/home/java/jdk1.7.0_79 # The jsvc implementation to use. Jsvc is required to run secure datanodes
配置core-site.xml配置檔案
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim core-site.xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:9000</value><!--這裡hadoop需要換成自己配置的第一臺機器的hostname,比如我的是hadoop1,所以我這裡寫的就是hadoop1--> </property> <property> <name>hadoop.tmp.dir</name> <!--配置hadoop叢集資料存放路徑,注意最後不要有空格--> <value>/home/hadoop/apps/hadoop-2.7.5/data</value> </property> </configuration>
設定hdfs-site.xml配置檔案
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim hdfs-site.xml<configuration> <!--配置副本數量--> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
配置mapred-site.xml配置檔案
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
預設mapred-site.xml不存在,將mapred-site.xml.template改成mapred-site.xml即可
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml<configuration> <!--指定mapreduce在yarn上執行--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
配置yarn-site.xml配置檔案
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim yarn-site.xml<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
配置slaves配置檔案
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim slaves#指定幹活的datanode hadoop2 hadoop3
- 配置hadoop1到hadoop2,hadoop3之間的免密通訊,完成這一步操作,需要安裝ssh軟體,注意 如果機器中沒有安裝ssh-client軟體,先需要安裝,如果沒有安裝軟體技能,推薦先了解下linux安裝安軟的知識.安裝步驟如下1,2:
- 查詢適合的軟體包:yum list | grep openssh-clients
- 安裝:yum install openssh-clients.x86_64 (openssh-clients.x86_64 是我查詢到的結果).
- 啟動hadoop2,hadoop3,並都切換到hadoop使用者下.
- 配置免密登入之前,登入到hadoop2看看效果:
ssh hadoop2
退出hadoop2的登入:exit
- 在hadoop1的hadoop使用者根目錄下(注意,必須用hadoop使用者來執行),執行以下命令產來金鑰對:
cd ~
ssh-keygen -t rsa
結果如下:
- 將金鑰拷貝到hadoop2,hadoop3:
cd .ssh #.ssh是生成金鑰對時產生的資料夾
ssh-copy-id hadoop1 #拷貝到hadoop1(hadoop1就是當前的機器,當前機器也需要設定免密登入)
ssh-copy-id hadoop2 #拷貝到hadoop2
ssh-copy-id hadoop3 #拷貝到hadoop3
拷貝到hadoop2的截圖如下:
拷貝到其他機器也是一樣,就不一一截圖了. - 驗證免密登入是否配置成功.
不需要密碼,直接就登入成功了.記得退出登入.
配置hadoop軟體的環境變數:
- 配置之前:輸入: which hadoop
發現是找不到hadoop這個命令的. 在/etc/profile檔案中新增hadoop的環境變數
sudo vim /etc/profile #因為只有root使用者才能編輯該檔案,所以hadoop想要編輯,需要用sudo許可權:``` export JAVA_HOME=/home/java/jdk1.7.0_79 #申明hadoop的路徑變數 export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.5 #在之前配置JAVA的環境變數之後追加hadoop的環境變數 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ```
- source vim /etc/profile #讓環境變數生效
- 驗證配置是否成功:which hadoop
結果如上表示配置成功.
- 配置之前:輸入: which hadoop
- 將已經配置好的hadoop整個檔案包拷貝到hadoop2,hadoop3,這裡需要注意的是hadoop2和hadoop3中即將放置hadoop包的路徑需要保持一致,如果不一致,需要在上面配置的那幾個hadoop配置檔案中修改有路徑的地方.
- 在hadoop2,hadoop3的hadoop家目錄下新建一個apps目錄.
- scp -r /home/hadoop/apps/hadoop-2.7.5 hadoop2:/home/hadoop/apps/
- scp -r /home/hadoop/apps/hadoop-2.7.5 hadoop3:/home/hadoop/apps/
- 根據上面配置hadoop軟體的環境變數一樣去hadoop2和hadoop3上配置好hadoop的環境變數.
- 分別重啟3臺機器.
- 在hadoop1上,使用者hadoop使用者,格式化hadoop 的HDFS(檔案系統),第一次使用需要格式化:
hadoop namenode -format
- 在hadoop1上啟動hdfs檔案系統:
start-dfs.sh
待啟動完成,再驗證是否有該有程序:jps
在hadoop2,hadoop3上檢視hadoop的程序:jps
- 在hadoop1上啟動yarn叢集
start-yarn.sh
在hadoop2,hadoop3上檢視程序:
- 使用瀏覽器檢視叢集狀態:http://192.168.93.120:8088
如果沒法訪問,檢視防火牆狀態:
sudo service iptables status
關閉防火牆:
sudo service iptables stop
最後正確的結果:
- 檢視HDFS檔案系統狀態:http://192.168.93.120:50070
如果結果都如上,表示hadoop叢集搭建成功.那這篇文章的目的就達到了.
總結
我在配置的時候,也出現這樣那樣的問題.所以配置過程中需要注意以下幾點:
1. 配置主機名時,以及在新增使用者時,千萬不要使用帶有下劃線的以及其他不符合規範的命名,我第一次配置時因為使用了下劃線,導致啟動叢集時一直啟動失敗,折騰了好久好久.
2. hadoop的解壓,配置,拷貝,需要使用配置了免密登入的使用者來完成.比如我以上配置的就是hadoop使用者來完成的.
3. 初始hadoop叢集的時候,需要使用與解壓,配置,拷貝hadoop時的使用者一致.
4. 配置的時候仔細,仔細再仔細.可能因為一個字母錯誤,就會導致很多問題.
5. 我的3臺虛擬機器的hostname命名分別是hadoop1,hadoop2,hadoop3,在這三臺虛擬機器下都有一個用來搭建hadoop叢集的使用者hadoop,所以再閱讀的時候不要混淆了.
6. 如果按照我的步驟來搭建,最後叢集搭建完成時,每臺機器的程序規劃如下:
主機名 | 程序 |
---|---|
hadoop1 |
SecondaryNameNode ResourceManager NameNode |
hadoop2 |
DataNode NodeManager |
hadoop3 |
DataNode NodeManager |
盡情期待下一篇Zookeeper的環境搭建,或者HDFS的API操作
創作不易.轉載註明出處.
qq交流群:775661488