Hadoop徹底分市式集羣是典型的主從架構(master-slave),通常須要使用多臺服務器來組建。咱們準備3臺服務器(關閉防火牆、靜態IP、主機名稱)。若是沒有這樣的環境,能夠在一臺電腦上安裝VMWare Workstation。在VM上安裝三臺Linux,分別是1個主節點,2個從節點,以下圖所示。java
節點類型node |
IP地址linux |
主機名web |
NameNodevim |
192.168.86.150安全 |
master服務器 |
DataNode網絡 |
192.168.86.160架構 |
slave1app |
DataNode |
192.168.86.170 |
slave2 |
注意:這3個節點的IP地址在實際搭建時會有所不一樣。
在Linx系統命令終端,執行命令 vim ifcfg-eth0,並修改文件的內容,按「鍵入編輯內容編譯完成後按Esc鍵退出編譯狀態,以後執行命令wq,保存並退出。IPADDR、 NETMASK、 GATEWAY、DNS1的值能夠根據本身的本機進行修改,以下所示。
DEVICE="eth0" #設備名字
BOOTPROTO="static" #靜態ip
HWADDR="00:0C:29:ED:83:F7" #mac地址
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes" #開啓自啓動
TYPE="Ethernet" #網絡類型
UUID="28354862-67a7-4a5b-9f9a-54561401f614"
IPADDR=192.168.11.10 #IP地址
NETMASK=255.255.255.0 #子網掩碼
GATEWAY=192.168.11.2 #網關
DNS1=192.168.11.2 # dns
(1)啓動命令終端,在任何目錄下執行命令cd/ etc/sysconfig,切換到該目錄並查看目錄下的文件,能夠發現存在文件 network,如圖所示。
(2)在/etc/sysconfig目錄下找到文件 network,而後執行命令 vim network,按「i」進入編輯內容,編譯完成後按Esc退出編譯狀態,以後執行命令wq保存並退出,後面兩臺也都這樣,以下圖所示。
(3)修改主機名和iP地址具備映射關係,執行命令vim/ etc/hosts,按「i」進入編輯內容,編譯完成後按Esc退出編譯狀態,以後執行命令wq保存並退出,把三臺的ip和主機名都編輯,如圖所示。
(4)scp命令傳送文件
scp /etc/hosts root@slave1:/etc/hosts
scp /etc/hosts root@slave2:/etc/hosts
把修改好的發送給slave1,再用相同的方法,發送給slave2。
下面咱們詳細介紹一下scp命令,scp是secure copy的縮寫,是用於Linux之間複製文件和目錄的。scp是Linux系統下基於ssh登錄進行安全的遠程文件拷貝命令。
scp數據傳輸能夠使用ssh1或ssh2。scp命令能夠使用IPv4尋址或IPv6尋址。
l 複製文件語法:
scp /源文件完整路徑 遠程用戶名@IP地址: /目標文件完整路徑
或者
scp /源文件完整路徑 遠程用戶名@機器名: /目標文件完整路徑
scp /home/space/music/1.mp3 root@slave1:/home/root/others/music
scp /home/space/music/1.mp3 root@192.168.86.153:/home/root/others/music/001.mp3
l 複製目錄語法:
scp -r /源目錄完整路徑 遠程用戶名@IP地址: /目標目錄所在路徑
或者
scp -r /源目錄完整路徑 遠程用戶名@機器名: /目標目錄所在路徑
scp -r /home/space/music/ root@slave3:/home/root/others/
scp -r /home/space/music/ root@192.168.86.153:/home/root/others/
l 從遠程複製到本地
從遠程複製到本地,只要將從本地複製到遠程的命令的後2個參數調換順序便可。
scp root@slave3:/home/root/others/music/1.mp3 /home/space/music
參數:
-r |
遞歸複製整個目錄。 |
-v |
和大多數linux命令中的-v意思同樣,用來顯示進度。能夠用來查看鏈接、認證、或是配置錯誤。 |
-C |
容許壓縮。(將-C標誌傳遞給ssh,從而打開壓縮功能)。 |
-1 |
強制scp命令使用協議ssh1。 |
-2 |
強制scp命令使用協議ssh2。 |
-4 |
強行使用IPV4地址。 |
-6 |
強行使用IPV6地址。 |
-q |
不顯示傳輸進度條。 |
(1)啓動 Linux命令終端,分別在三臺虛擬機上建立目錄,執行命令mkdir /usr/java,切換到該目錄下執行命令cd/usr/java,
[root@hadoop ~] mkdir/usr/java
[root@hadoop ~]cd /usr/java
(2)把JDK文件jdk-8u181-linux-x64.tar.gz上傳到該目錄下
(3)而後對/usr/java目錄下的JDK壓縮文件jdk-8u181-linux-x64.tar.gz,執行命令
對jdk-8u181-linux-x64.tar.gz進行解壓
[root@hadoop java]#tar -xzvf jdk-8u181-linux-x64.tar.gz
(4)解壓以後,執行命令 Il,能夠看到該目錄下多了一個解壓後的Jdk文件,如圖2-43所示。
(5)把jdk文件上傳到其餘兩臺,經過命令上傳到其餘兩臺虛擬機上,指定命令
scp –r /usr/java root@主機名:/usr
[root@master ~]scp –r /usr/java root@slave1:/usr
[root@master ~] scp –r /usr/java root@slave2:/usr
(6)而後到slave1和slave2的/usr目錄下看,是否有java這個目錄
(7)完成上一步以後,能夠執行cd jdk.1.7.0_80,進入JDK安裝目錄
(8)肯定解壓無誤以後,此時須要配置JDK環境變量,執行命令 vim /etc/profile單擊」i「進入編輯內容,編譯完成後按Esc退出編譯狀態,以後執行命令wq保存並退出。如圖
(9)編輯完後進行配置文件刷新,執行命令 source /etc/profile,刷新配置,配置的信息纔會生效.
[root@hadoop jdk1.7.0_80]# source /etc/profile
(10)完成以上步驟以後,須要測試環境變量是否配置成功,只須要在任何目錄下執行Java –version ,如圖,出現下圖狀況就是配置成功。
關閉Linux防火牆有如下3個步驟:
1.查看防火牆狀態
service iptables status
2. 關閉防火牆
service iptables stop
3. 永久性關閉防火牆
chkconfig iptables off
(1)在Linux系統的終端的任何目錄下經過切換cd ~/.ssh,進入到.ssh目錄下。
~表示當前用戶的home目錄,經過cd ~能夠進入到你的home目錄。.開頭的文件表示隱藏文件,這裏.ssh就是隱藏目錄文件。
(2)在Linux系統命令框的.ssh目錄下
[root@root .ssh]# ssh-keygen -t rsa
(連續按四次回車)執行完上面命令後,會生成兩個id_rsa(私鑰)、id_rsa.pub(公鑰)兩個文件,如圖所示
(3)受權SSH免密碼
[root@master .ssh]# ssh-copy-id master
[root@master .ssh]# ssh-copy-id slave1
[root@master .ssh]# ssh-copy-id slave2
給當前主機和其餘兩臺都設置免密碼登陸,這樣三臺能夠互通。(根據提示輸入yes並輸入訪問主機所須要的密碼。)
(4)在master主機上執行下面的3條命令。
[root@master .ssh]# ssh master
[root@master .ssh]# ssh slave1
[root@slave1 ~]# exit
[root@master .ssh]# ssh slave2
發現不須要密碼就能鏈接任意一臺虛擬機。
注意:當執行ssh slave1命令後,就以SSH免密方式登陸到slave1。必須使用exit命令退出登陸slave1,再嘗試執行ssh slave2。
(1)安裝NTP服務。
在各節點執行命令 yum install -y ntp便可。如果最終出現了「Complete」信息,就說明安裝NTP服務成功。
(2)設置 master節點爲NTP服務主節點,那麼其配置以下。
使用命令「 vim /etc/ntp.conf」來打開/etc/ntp.conf文件,註釋掉以 server開頭的行,並添加代碼所示的內容。
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)分別在slave1,slave2中配置NTP,一樣修改/etc/ntp.conf文件,註釋掉server開頭的行,並添加下面代碼所示的內容。
server master
(4)永久性關閉防火牆,主節點和從節點都要關閉。執行命令
service iptables stop
chkconfig iptables off
(5)啓動NTP服務
①在 master節點執行命令「 service ntpd start& chkconfig ntpd on」,以下圖所示,說明NTP服務啓動成功。
②在slave一、slave2上同步時間。執行命令
ntpdate master
③在 slave一、slave2上分別執行「 service ntpd start& chkconfig ntpd on」,即永久啓動NTP服務。
④分別在master、slave一、slave2上分別輸入date,看時間是否一致。
master主機上
(1)建立目錄mkdir /usr/hadoop,執行命令cd/usr/hadoop,切換到該目錄下,把Hadoop文件上傳到該目錄下
(2)而後對/usr/hadoop目錄下的Hadoop壓縮文件hadoop-2.6.5.tar.gz,執行命令
tar -zxvf hadoop-2.6.5.tar.gz -C /usr/hadoop
-C是指解壓壓縮包到指定位置
(3)修改配置文件
切換到$HADOOP_NAME/etc/hadoop 目錄下並查看該目錄下的包,如圖
下面咱們須要修改如下的7個文件。
文件名 |
文件路徑 |
hadoop-env.sh |
$HADOOP_NAME/etc/hadoop |
core-site.xml |
$HADOOP_NAME/etc/hadoop |
hdfs-site.xml |
$HADOOP_NAME/etc/hadoop |
mapred-site.xml |
$HADOOP_NAME/etc/hadoop |
yarn-site.xml |
$HADOOP_NAME/etc/hadoop |
yarn-env.sh |
$HADOOP_NAME/etc/hadoop |
profile |
/etc/ profile |
slaves |
$HADOOP_NAME/etc/hadoop |
(4)在$HADOOP_NAME/etc/hadoop目錄下執行命令
vim hadoop-env.sh
按「i」鍵進入編輯內容,在文件中添加以下內容:
export JAVA_HOME=/usr/java/ jdk1.8.0_181
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"
編譯完成後,按ESC退出編輯狀態,以後執行命令wq保存並退出
(5)在$HADOOP_NAME/etc/hadoop目錄下執行命令
vim core-site.xml
並修改配置文件core-site.xml ,內容以下:
<configuration> <!—指定HDFS的(Namenode)的缺省路徑地址:master是計算機名,也能夠是ip地址--> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <!—指定Hadoop運行時產生文件的存儲目錄,須要建立/usr/hadoop/tmp目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/hadoop/tmp</value> </property> </configuration>
(6)$HADOOP_NAME/etc/hadoop目錄下執行命令vim hdfs-site.xml,並修改配置文件hdfs-site.xml ,內容以下
<configuration> <!--指定HDFS副本的數量 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!--namenode上存儲hdfs名字空間元數據,/home/hadoop/dfs/name須要自建 --> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/dfs/name</value> </property> <!--datanode上數據塊的物理存儲位置,/home/hadoop/dfs/data須要自建 --> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/dfs/data</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> </configuration>
(7)在$HADOOP_NAME/etc/hadoop目錄下查看是否有配置文件mapred-site.xml。目錄下默認狀況下沒有該文件,可經過執行命令
mv mapred-site.xml.template mapred-site.xml,修改一個文件的命名。
而後執行命令
vim mapred-site.xml
並修改配置文件mapred-site.xml,內容以下:
<configuration> <!—指定mr運行在yarn上-> <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>
(8)在$HADOOP_NAME/etc/hadoop目錄下執行命令vim yarn-site.xml,並修改配置文件yarn-site.xml ,內容以下
<configuration> <!—指定resourcemanager的地址,主機是master--> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <!—獲取數據的方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
(9)在$HADOOP_NAME/etc/hadoop目錄下執行命令
vim yarn-env.sh
修改配置文件yarn-env.sh ,增長以下內容
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"
(10)執行命令vim /etc/profile,把Hadoop的安裝目錄配置到環境變量中
#hadoop
HADOOP_HOME=/usr/hadoop/hadoop-2.6.5
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
(11)而後讓配置文件生效,執行命令
source /etc/profile
(12)在$HADOOP_NAME/etc/hadoop目錄下執行命令vim slaves,並修改配置文件slaves,內容以下。
slave1
slave2s
注意:刪除localhost
在master上執行命令,將配置好的hadoop分發到兩個從節點slave1,slave2上。
scp -r /usr/hadoop/hadoop-2.6.5 root@slave1:/usr/hadoop/
scp -r /usr/hadoop/hadoop-2.6.5 root@slave2:/usr/hadoop/
注:在slave1和slave2上提早先建立好/usr/hadoop目錄
在從節點slave1,slave2上修改/etc/profile
master主機是NameNode,必須格式化以後才能使用,格式化命令只須要執行一次。在任意目錄下,執行命令
hdfs namenode -format
或者
hadoop namenode -format
注意:以上命令必須在配置Hadoop環境變量的狀況下才能執行。因此必須修改/etc/profile文件而且執行下面的命令啓動修改。
source /etc/profile
(1)首先啓動HDFS系統,master上$HADOOP_HOME/sbin目錄下執行命令start-dfs.sh(注意slave1和slave2不須要執行命令),而後在master、slave一、slave2主機上用jps查看進程,如圖所示。
如上圖能夠看出master主機是NameNode同時仍是SecondNameNode。slave1和slave2主機是DataNode。
注意:在slave1和slave2上修改/etc/profile,執行12.2.11中的步驟10和步驟11。
(2)首先啓動yarn系統,master上執行命令start-yarn.sh(注意slave1和slave2不須要執行命令),而後在master、slave一、slave2主機上用jps查看進程,如圖所示。
如上圖能夠看出master主機上有ResourceManager。slave1和slave2主機上有NodeManager。
至此,咱們的Hadoop的徹底分佈式集羣搭建已經大功告成了。