1、過程分析html
一、準備3臺客戶機(關閉防火牆、修改靜態ip、主機名稱)node
二、安裝JDKweb
三、配置環境變量vim
四、安裝Hadoopcentos
五、配置集羣瀏覽器
六、單點啓動安全
七、配置ssh免密登陸bash
八、羣起並測試集羣服務器
2、編寫集羣分發腳本 xsync網絡
一、scp(secure copy)安全拷貝
1)scp定義
scp能夠實現服務器與服務器之間的數據拷貝。
2)基本語法
scp -r 文件 用戶名@主機:目標路徑/名稱
3)案例
a、在hadoop101上,將hadoop101中 /opt/module 目錄下的軟件拷貝到 hadoop102上。
[hadoop@hadoop101 /]$ scp -r /opt/module root@hadoop102:/opt/module
b、在hadoop103上,將hadoop101服務器上的/opt/module 目錄下的軟件拷貝到 hadoop103上。
[hadoop@hadoop103 opt]$sudo scp -r hadoop@hadoop101:/opt/module root@hadoop103:/opt/module
c、在hadoop103上操做hadoop101 中/opt/module 目錄下的軟件 拷貝到 hadoop104上。
[hadoop@hadoop103 opt]$ scp -r hadoop@hadoop101:/opt/module root@hadoop104:/opt/module
注意:拷貝過來的/opt/module目錄,別忘了在hadoop10二、hadoop10三、hadoop104上修改全部文件的全部者和全部者組。
sudo chown hadoop:hadoop -R /opt/module
d、分別將hadoop101 中/etc/profile 文件拷貝到hadoop10二、10三、10四、的/etc/profile上。
[hadoop@hadoop101 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile
[hadoop@hadoop101 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile
[hadoop@hadoop101 ~]$ sudo scp /etc/profile root@hadoop104:/etc/profile
注意:拷貝完成後,須要source一下
二、rsync 遠程同步工具
rsync主要用於備份和鏡像,具備速度快、避免複製相同內容和支持符號連接的優勢。
rsync 和 scp 區別:用 rsync 作文件的複製要比 scp 的速度快,rsync 只對差別文件作更新。scp是把全部文件都複製過去。
1)語法
rsync -rvl 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
選項參數說明:
選項 | 功能 |
-r | 遞歸 |
-v | 顯示覆制過程 |
-l | 拷貝符號鏈接 |
2)案例
a、把hadoop101 機器上的 /opt/software 目錄同步到 hadoop102 服務器的 root用戶下的 /opt目錄
[hadoop@hadoop101 opt]$ rsync -rvl /opt/software/ root@hadoop102:/opt/software
三、xsync集羣分發腳本
1)需求:循環複製文件到全部節點的相同目錄下
2)分析
a、rsync命令原始拷貝:
rsync -rvl /opt/module root@hadoop103:/opt/
b、指望腳本:
xsync 要同步的文件名稱
c、說明:在/home/hadoop/bin 這個目錄下存放的腳本,hadoop用戶能夠在系統任何地方直接執行。
3)腳本實現
a、在/home/hadoop 目錄下建立bin 目錄,並在 bin目錄下建立xsync文件,文件內容以下:
[hadoop@hadoop102 ~]$ mkdir bin [hadoop@hadoop102 ~]$ cd bin/ [hadoop@hadoop102 bin]$ touch xsync [hadoop@hadoop102 bin]$ vi xsync
在該文件中編寫以下代碼:
#!/bin/bash #1 獲取輸入參數個數,若是沒有參數,直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi #2 獲取文件名稱 p1=$1 fname=`basename $p1` echo fname=$fname #3 獲取上級目錄到絕對路徑 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir #4 獲取當前用戶名稱 user=`whoami` #5 循環 for((host=103; host<105; host++)); do echo ------------------- hadoop$host -------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done
b、修改腳本 xsync 具備執行權限
[hadoop@hadoop102 bin]$ chmod 777 xsync
c、調用腳本形式:xsync 文件名稱
[hadoop@hadoop102 bin]$ xsync /home/hadoop/bin
注意:若是將xsync 放到/home/hadoop/bin 目錄下仍然不能實現全局使用,能夠將xsync 移動到/usr/local/bin 目錄下。
3、集羣配置
一、集羣部署規劃
hadoop102 | hadoop103 | hadoop104 | |
HDFS | NameNode DataNode |
DataNode | SecondaryNameNode DataNode |
YARN |
NodeManager | ResourceManager NodeManager |
NodeManager |
二、配置集羣
1)核心配置文件
配置core-site.xml
[hadoop@hadoop102 hadoop]$ vi core-site.xml
在該文件中編寫以下配置:
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9000</value> </property> <!-- 指定Hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>
2)HDFS 配置文件
配置 hadoop-env.sh
[hadoop@hadoop102 hadoop]$ vi hadoop-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_131
配置 hdfs-site.xml
[hadoop@hadoop102 hadoop]$ vi hdfs-site.xml
在該文件中編寫以下配置:
<property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop輔助名稱節點主機配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:50090</value> </property>
3)YARN 配置文件
配置 yarn-env.sh
[hadoop@hadoop102 hadoop]$ vi yarn-env.sh export JAVA_HOME=/opt/module/jdk1.8.0_131
配置 yarn-site.xml
[hadoop@hadoop102 hadoop]$ vi yarn-site.xml
在該文件中增長以下配置:
<!-- Reducer獲取數據的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property>
4)MapReduce 配置文件
配置 mapred-env.sh
[hadoop@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_131
配置 mapred-site.xml
[hadoop@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml [hadoop@hadoop102 hadoop]$ vi mapred-site.xml
在該文件中增長以下配置
<!-- 指定MR運行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
三、在集羣上分發配置好的 Hadoop 配置文件
[hadoop@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
四、查看文件分發狀況
[hadoop@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
4、集羣單點啓動
一、若是集羣是第一次啓動,須要格式化 NameNode
[hadoop@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
注意:格式化完後,須要將生成的保存文件的目錄(data)同步到其餘機器上。
二、在 hadoop102 上啓動 NameNode
[hadoop@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode [hadoop@hadoop102 hadoop-2.7.2]$ jps 3461 NameNode
三、在 hadoop10二、hadoop103 以及 hadoop 104上分別啓動 DataNode
[hadoop@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode [hadoop@hadoop102 hadoop-2.7.2]$ jps 3461 NameNode 3608 Jps 3561 DataNode
[hadoop@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode [hadoop@hadoop103 hadoop-2.7.2]$ jps 3190 DataNode 3279 Jps
[hadoop@hadoop104 hadoop-2.7.2]$ hadoop-daemon.sh start datanode [hadoop@hadoop104 hadoop-2.7.2]$ jps 3237 Jps 3163 DataNode
四、思考:每次都一個一個節點啓動,若是節點數目增長到1000個 怎麼辦?
5、SSH 無密登陸配置
一、無密鑰配置
1)免登陸原理
2)生成公鑰和私鑰
[hadoop@hadoop102 .ssh]$ ssh-keygen -t rsa
而後敲(三個回車),就會生成兩個文件 id_rsa(私鑰)、id_rsa.pub(公鑰)
3)將公鑰拷貝到要免密登陸的目標機器上
[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop102 [hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop103 [hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop104
注意:還須要在hadoop102 上採用 root帳號,配置一下無密登陸到 hadoop10二、hadoop10三、hadoop104。
還須要在hadoop103 上採用 hadoop帳號,配置一下無密登陸到hadoop10二、hadoop10三、hadoop104 服務器上。
二、.ssh 文件夾下(~/.ssh)的文件功能解釋
known_hosts | 記錄ssh訪問過計算機的公鑰(public key) |
id_rsa | 生成的私鑰 |
id_rsa.pub | 生成的公鑰 |
authorized_keys | 存放受權過的無密登陸服務器公鑰 |
6、羣起集羣
一、配置 slaves
/opt/module/hadoop-2.7.2/etc/hadoop/slaves [hadoop@hadoop102 hadoop]$ vi slaves
在該文件中增長以下內容:
hadoop102
hadoop103
hadoop104
注意:該文件中添加的內容結尾不容許有空格,文件中不容許有空行。
同步全部節點配置文件:
[hadoop@hadoop102 hadoop]$ xsync slaves
二、啓動集羣
1)若是集羣是第一次啓動,須要格式化 NameNode(注意格式化以前,必定要先中止上次啓動的全部 namenode 和 datanode 進程,而後再刪除 data 和 log 數據)
[hadoop@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format
2)啓動 HDFS
[hadoop@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh [hadoop@hadoop102 hadoop-2.7.2]$ jps 4166 NameNode 4482 Jps 4263 DataNode
[hadoop@hadoop103 hadoop-2.7.2]$ jps 3218 DataNode 3288 Jps [hadoop@hadoop104 hadoop-2.7.2]$ jps 3221 DataNode 3283 SecondaryNameNode 3364 Jps
3)啓動 YARN
[hadoop@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
注意:NameNode 和 ResourceManager 若是不是同一臺機器,不能在NameNode上啓動 YARN,應該在 ResourceManager 所在的機器上啓動 YARN。
4)web 端查看 SecondaryNameNode
a、瀏覽器輸入:http://hadoop104:50090/status.html
b、查看SecondaryNameNode,如圖
5)web端查看 HDFS
a、瀏覽器輸入:http://hadoop102:50070/
b、進入首頁,如圖:
三、集羣基本測試
1)上傳文件到集羣
上傳小文件
[hadoop@hadoop102 hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/atguigu/input [hadoop@hadoop102 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/atguigu/input
上傳大文件
[hadoop@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/atguigu/input
2)上傳文件後查看文件存放在什麼位置
a、查看HDFS文件存儲路徑
[hadoop@hadoop102 subdir0]$ pwd /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
b、查看HDFS在磁盤存儲文件內容
[hadoop@hadoop102 subdir0]$ cat blk_1073741825 hadoop yarn hadoop mapreduce jiangchun jiangchun
3)拼接
-rw-rw-r--. 1 hadoop hadoop 134217728 5月 23 16:01 blk_1073741836 -rw-rw-r--. 1 hadoop hadoop 1048583 5月 23 16:01 blk_1073741836_1012.meta -rw-rw-r--. 1 hadoop hadoop 63439959 5月 23 16:01 blk_1073741837 -rw-rw-r--. 1 hadoop hadoop 495635 5月 23 16:01 blk_1073741837_1013.meta [hadoop@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file [hadoop@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file [hadoop@hadoop102 subdir0]$ tar -zxvf tmp.file
4)下載
[hadoop@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz ./
7、集羣啓動/中止方式總結
一、各個服務組件逐一啓動/中止
1)分別啓動/中止 HDFS 組件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
2)啓動/中止 YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager
二、各個模塊分開啓動/中止 (前提是配置ssh)
1)總體啓動/中止 HDFS
start-dfs.sh / stop-dfs.sh
2)總體啓動/中止 YARN
start-yarn.sh / stop-yarn.sh
8、集羣時間同步
時間同步的方式:找一個機器做爲時間服務器,全部的機器與這臺集羣時間進行定時的同步,好比:每隔十分鐘,同步一次時間。
具體步驟:
一、時間服務器配置(必須root用戶)
1)檢查 ntp 是否安裝
[root@hadoop102 桌面]# rpm -qa|grep ntp ntp-4.2.6p5-10.el6.centos.x86_64 fontpackages-filesystem-1.41-1.1.el6.noarch ntpdate-4.2.6p5-10.el6.centos.x86_64
2)修改 ntp 配置文件
[root@hadoop102 桌面]# vi /etc/ntp.conf
修改內容以下:
a、修改1(受權 192.168.1.0-192.168.1.255 網段上的全部機器能夠從這臺機器上查詢和同步時間)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 爲 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b、修改2(集羣在局域網中,不使用其餘互聯網上的時間)
server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst 爲
#server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst
c、添加3(當該節點丟失網絡鏈接,依然能夠採用本地時間做爲時間服務器爲集羣中的其餘節點提供時間同步)
server 127.127.1.0 fudge 127.127.1.0 stratum 10
3)修改 /etc/sysconfig/ntpd 文件
[root@hadoop102 桌面]# vim /etc/sysconfig/ntpd
增長以下內容(讓硬件時間與系統時間一塊兒同步)
SYNC_HWCLOCK=yes
4)重啓 ntpd 服務
[root@hadoop102 桌面]# service ntpd status
ntpd 已停
[root@hadoop102 桌面]# service ntpd start
正在啓動 ntpd: [肯定]
5)設置 ntpd 服務開機啓動
[root@hadoop102 桌面]# chkconfig ntpd on
二、其餘機器配置(必須root用戶)
1)在其餘機器配置 10 分鐘與時間服務器同步一次
[root@hadoop103桌面]# crontab -e
編寫定時任務以下:
*/10 * * * * /usr/sbin/ntpdate hadoop102
2)修改任意機器時間
[root@hadoop103桌面]# date -s "2017-9-11 11:11:11"
3)十分鐘後查看機器是否與時間服務器同步
[root@hadoop103桌面]# date 說明:測試的時候能夠將10分鐘調整爲1分鐘,節省時間