《Hadoop大數據技術》
- 實驗目的
- 安裝Java環境
- 搭建Hadoop單機模式
- 在hadoop僞分佈式基礎上搭建Hadoop完全分佈式模式環境
- 實驗環境
Win10+Centos7(Vmware workstation14)+winscp
- jdk 環境變量配置
打開一個terminal窗口,切換到管理員命令,關閉網絡防火牆,並取消開機自啓防火牆。
查找系統自帶的openjdk並刪除。
刪除後再檢查一次是否完全刪除openjdk
查看本機的地址
打開安裝的winscp,將下載好的hadoop-2.6.0.tar.gz和jdk-8u181.tar.gz傳到虛擬機的Documents中
再usr文件下創建java文件夾
將Documents中jdk的壓縮包移動到新建的java文件中並解壓
編輯 /home/wj/.bash_profile 文件
使用source /home/wj/.bash_profile命令時文件生效,然後用java -version命令檢驗jdk配置是否成功。
- 安裝hadoop
解壓hadoop-2.6.0.tar.gz安裝包:解壓安裝包至~目錄下
用 vi ~/.bashrc 命令 編輯.bashrc文件,並使之生效
添加配置信息:
export HADOOP_HOME=~/hadoop-2.6.0/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使用hadoop version命令,檢驗配置信息是否生效。
切換目錄: cd hadoop-2.6.0/etc/hadoop/
編輯 hadoop-env.sh 文件
修改
export JAVA_HOME=/usr/java/jdk1.8.0_181/
配置core-site.xml文件
<property>
<name>fs.defaultFS</name>
<value>hdfs://master</value>
</property>
配置hdfs-site.xml文件
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
配置mapred-site.xml
先將mapred-site.xml.template文件複製爲mapred-site.xml。
再修改mapred-site.xml文件
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
配置yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
格式化HDFS文件系統:格式化的過程是創建初始目錄和文件系統結構的過程。格式化只需進行一次,下次啓動不再需要格式化
hdfs namenode -format
使用jps命令,正確啓動會出現至少三個進程
NameNode
DataNode
SecondaryNameNode
啓動YARN,用$ jps命令驗證,正確啓動將多出以下兩個進程
瀏覽器驗證
在瀏覽器地址欄中輸入master:50070網址,查看NameNode 和 Datanode 信息
停止所有進程
stop-all.sh
用命令jps查看:關閉了Hadoop所有進程
- 在hadoop僞分佈式基礎上搭建Hadoop完全分佈式模式環境
準備工作:
- 在僞分佈模式下,確保已關閉Hadoop所有進程。
- 爲了完全分佈式能正確格式化HDFS系統,刪除${HADOOP_HOME}/logs目錄下的所有內容。
刪除${HADOOP_HOME}/log目錄下所有內容:
$ rm -rf ~/hadoop/log/*
配置完全分佈式模式:
- 修改主機名稱
將/etc/ hostname文件修改成Master:
vi /etc/hostname
將內容改爲Master
reboot重啓後生效
- 將/etc/hosts文件修改成如下內容
文件原內容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
修改爲
127.0.0.1 localhost
192.168.81.142 master
192.168.81.143 slave1
192.168.81.144 Slave2
注:192.168.81.139 master爲本機的ip,這裏先指定了Slave1/Slave2機器及對應的IP,這些機器在後面步驟會由Master機器克隆出來。
reboot重啓虛擬機使修改文件生效。
重啓後主機名變成了Master,連接網絡後
用命令$ ping Master,就可以ping通Master主機了
注:退出使用ctrl+c。
測試slave1連通性
測試slave2連通性
- 克隆客戶機
因爲要搭建由3臺機器組成的完全分佈式集羣,現在只有1臺Master機器,所以需要用Master機器克隆出另外2臺機器。
克隆方法:
1) 關閉Linux客戶機,否則進行無法克隆操作
2) 左側欄點擊要克隆的LInux客戶機,右鍵管理克隆
3) 連續點擊下一步至克隆類型,選擇創建完整克隆,點擊下一步
4) 修改虛擬機名稱和位置:關於位置選擇,最好每臺客戶機單獨建一個文件夾:
5) 點擊完成,等待克隆完成,此過程大概需要3-5分鐘。
重複克隆方法5步,克隆slave2虛擬機
8)修改2臺克隆機的主機名稱
9)重啓兩臺虛擬機
打開第一臺克隆機,將其主機名稱命名爲Slave1,然後reboot重啓生效
vi /etc/hostname
打開第二臺克隆機,將它的主機名稱命名爲Slave2,然後reboot重啓生效。
- SSH配置
在完全分佈式模式下,集羣內所有機器需要免密登錄到集羣內所有機器,即 Master、Slave1、Slave2三臺機器需要免密登錄到其他任意兩臺機器。免密登錄的方法和僞分佈的免密登錄方法一樣,在Master、Slave1、Slave2機器生成公/私密鑰對,然後將公鑰發送給集羣內的所有機器,以Master免密登錄其他集羣內的所有機器爲例,其他兩臺機器重複以下操作。
1)在Master主機生成密鑰對
ssh-keygen -t rsa
將Master公鑰id_rsa.pub追加到Master的~/.ssh/authorized_keys文件中,並複製到另外2臺Slave機器上
scp ~/.ssh/authorized_keys wj@slave1: ~/
scp ~/.ssh/authorized_keys wj@slave2:~/
分別在slave1和slave2中使用ssh-keygen -t rsa命令產生密鑰
分別使用chmod 600 ~/.ssh/authorized_keys命令修改slave1和slave2中的文件權限
驗證免密登錄:在Master主機驗證免密碼登錄集羣所有機器
- 配置完全分佈式文件
1) 配置core-site.xml
修改core-site.xml文件內容爲:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>~/hadoop-2.6.0/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master</value>
</property>
</configuration>
2)配置hdfs-site.xml
修改hdfs-site.xml文件內容爲:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
3) 配置mapred-site.xml
mapred-site.xml與僞分佈式的配置一樣,不需改變。
4) 配置yarn-site.xml
修改yarn-site.xml文件內容爲:
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
5) 分發配置:將Master的配置目錄文件分發至其他機器
$ cd ~/hadoop/etc/
$ scp -r hadoop hadoop@Slave1:~/hadoop/etc/
$ scp -r hadoop hadoop@Slave2:~/hadoop/etc/
準備工作:
1. 在僞分佈模式下,確保已關閉Hadoop所有進程。
2. 爲了完全分佈式能正確格式化HDFS系統,刪除${HADOOP_HOME}/tmp及${HADOOP_HOME}/logs目錄下的所有內容。
1)刪除${HADOOP_HOME}/tmp目錄下所有內容:
$ rm -rf ~/hadoop/tmp/*
2) 刪除${HADOOP_HOME}/log目錄下所有內容:
$ rm -rf ~/hadoop/log/*
配置完全分佈式模式:
1.修改主機名稱
1)將/etc/ hostname文件修改成Master:
$sudo vi /etc/hostname
Master
注意:reboot重啓後才生效
2)將/etc/hosts文件修改成如下內容:
原內容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
修改爲:
$ sudo vi /etc/hosts
127.0.0.1 localhost
192.168.30.128 Master
192.168.30.129 Slave1
192.168.30.130 Slave2
注意:這裏先指定了Slave1/Slave2機器及對應的IP,這些機器在後面步驟會由Master機器克隆出來。
3)重啓Linux生效:
$ reboot
重啓後主機名變成了Master,用命令$ ping Master,就可以ping通Master主機了。
hadoop@Master:~$ ping Master
PING Master (192.168.30.128) 56(84) bytes of data.
64 bytes from Master (192.168.30.128): icmp_seq=1 ttl=64 time=0.014 ms
64 bytes from Master (192.168.30.128): icmp_seq=2 ttl=64 time=0.085 ms
2.刪除原來的SSH配置
因爲主機名稱已改變,新的主機名還沒有加到公私密鑰中,用$ ssh Master不能免密登錄,需要刪除原來的SSH,待重新生成新的SSH。
$ rm -rf ~/.ssh/*
3.克隆客戶機
因爲要搭建由3臺機器組成的完全分佈式集羣,現在只有1臺Master機器,所以需要用Master機器克隆出另外2臺機器。
克隆方法:
1) 關閉Linux客戶機,否則進行無法克隆操作
2) 左側欄點擊要克隆的LInux客戶機,右鍵管理克隆
3) 連續點擊下一步至克隆類型,選擇創建完整克隆,點擊下一步
4) 修改虛擬機名稱和位置:關於位置選擇,最好每臺客戶機單獨建一個文件夾:
5) 點擊完成,等待克隆完成,此過程大概需要3-5分鐘。
按照如上方法,一共克隆出2臺機器。
6) 修改2臺克隆機的主機名稱
打開第一臺克隆機,將其主機名稱命名爲Slave1,然後reboot重啓生效。
$ sudo vi /etc/hostname
Slave1
$ reboot
打開第二臺克隆機,將它的主機名稱命名爲Slave2,然後reboot重啓生效。
$ sudo vi /etc/hostname
Slave2
$ reboot
4.SSH配置
在完全分佈式模式下,集羣內所有機器需要免密登錄到集羣內所有機器,即 Master、Slave1、Slave2三臺機器需要免密登錄到其他任意兩臺機器。免密登錄的方法和僞分佈的免密登錄方法一樣,在Master、Slave1、Slave2機器生成公/私密鑰對,然後將公鑰發送給集羣內的所有機器,以Master免密登錄其他集羣內的所有機器爲例,其他兩臺機器重複以下操作。
1)在Master主機生成密鑰對
$ ssh-keygen -t rsa -P ''
2) 將Master公鑰id_rsa.pub追加到Master的~/.ssh/authorized_keys文件中,並複製到另外2臺Slave機器上
$ ssh-copy-id -i ~/.ssh/id-rsa.pub Master
$ ssh-copy-id -i ~/.ssh/id-rsa.pub Slave1
$ ssh-copy-id -i ~/.ssh/id-rsa.pub Slave2
3) 驗證免密登錄:在Master主機驗證免密碼登錄集羣所有機器
$ ssh Master
$ ssh Slave1
$ ssh Slave2
5.配置完全分佈式文件
在僞分佈式模式下已經配置了hadoop-env.sh,現在只需要配置4個xml即可,再將配置分發給其他機器。注意:以下配置均在Master機器操作。
進入Master機器的hadoop配置文件目錄${HADOOP_HOME}/etc/hadoop/
$ cd ~/hadoop/etc/hadoop/
1) 配置core-site.xml
修改core-site.xml文件內容爲:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>~/hadoop-2.6.0/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master</value>
</property>
</configuration>
注意:fs.defaultFS修改爲Master機器的IP地址或者主機名稱
2)配置hdfs-site.xml
修改hdfs-site.xml文件內容爲:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
3) 配置mapred-site.xml
mapred-site.xml與僞分佈式的配置一樣,不需改變。
4) 配置yarn-site.xml
修改yarn-site.xml文件內容爲:
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
5) 分發配置:將Master的配置目錄文件分發至其他機器
$ cd ~/hadoop/etc/
$ scp -r hadoop hadoop@Slave1:~/hadoop/etc/
$ scp -r hadoop hadoop@Slave2:~/hadoop/etc/
下面通通沒測試
6.指定集羣Slaves配置
此過程是與僞分佈式模式最根本的區別。配置Slavers文件就是制定哪些機器是Slave機器,Hadoop將變成完全分佈式模式。配置方法如下:
在Master主機操作,進入配置目錄${HADOOP_HOME}/etc/hadoop/,修改slavers文件
$ cd ~/hadoop/etc/hadoop
$ vi slaves
將slaves文件的內容修改爲:
Slave1
Slave2
注意:
1) 此配置只需要在Master機器進行,其他從機不需要配置此文件;
2) 要將slaves文件原來的localhost刪除掉,再添加Slave主機名稱, Slave主機名稱也可以改爲Slave IP地址。
7.格式化HDFS文件系統
$ hdfs namenode -format
8.啓動Hadoop守護進程
分別啓動HDFS和YARN
$ start-dfs.sh
$ start-yarn.sh
或者用以下命令啓動HDFS和YARN, 注意:此命令已經過時,不推薦使用。
$ start-all.sh
9.驗證Hadoop進程
1) $ jps命令驗證:
用$ jps命令分別在每一臺機器驗證
$ jps
執行jps命令後,Master主機包含以下三個進程爲啓動成功
SecondaryNameNode
NameNode
ResourceManager
分別在三臺Slave主機執行jps命令,包含以下兩個進程爲啓動成功
NodeManager
DataNode
注:如果某個機器少了某個進程,應該到相應機器去找對應的log查看原因,log存放路徑爲${HADOOP_HOME}/logs目錄下。例如:Slave2機器少了DataNode進程,則應該進入到Slave2機器的${HADOOP_HOME}/logs目錄下,查看datanode相關的log,找到啓動失敗的根源。
$ cd ~/hadoop/logs
$ more hadoop-hadoop-datanode-Slave2.log
2) 瀏覽器(WebUI)驗證
查看hadoop的文件系統,可以查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件:在Master機器瀏覽器輸入網址: http://Master:50070 ,出現以下界面爲成功。 注:用虛擬機內部的瀏覽器。宿主機(物理機)訪問則需要將localhost換成虛擬機的ip,用ifconfig命令查看虛擬機ip ,如:http://192.168.30.128:50070
點擊Datanodes,顯示有兩臺datanode信息。
瀏覽器查看集羣所有應用程序
訪問集羣中的所有應用程序的默認端口號爲8088。輸入網址:http://Master:8088
可以看到Active Nodes爲2,說明集羣有2個節點正在運行。
- 實驗總結(每項不少於20字)
存在問題:
1、在設置免密登陸時,由master將authorized_keys發送到另外兩臺主機上時,出現錯誤,
2、Hadoop集羣配置完成後無法成功分發配置
解決方法:
手動複製master中的authorized_keys的內容到slave1和slave2中。
收穫:
- Hadoop配置文件後需要格式化,修改配置後也需要格式化
- 正常情況下使用scp命令傳輸到slave1和slave2的文件在home文件下
- 使用jps命令後提示command not found,有兩個原因
- jdk沒有安裝,或者該命令被意外刪除。
- 檢查jdk的環境配置文件.bash_profile是否配置正確。