一、搭建環境這裏不作闡述(jdk、hadoop)html
二、本地運行模式、僞分佈式運行模式、徹底分佈式運行模式三種模式,前兩種你們不用去看,直接看徹底分佈式運行模式java
集羣模式使用3臺機子,分別是hadoop10二、hadoop10三、hadoop104node
三、集羣主要配置web
(1)、核心配置文件vim
vim core-site.xml:指定HDFS中NameNode的地址,datanode目錄地址centos
(2)、HDFS配置文件瀏覽器
hadoop-env.sh:配置java環境變量安全
hdfs-site.xml:副本數,指定Hadoop輔助名稱節點主機配置bash
(3)、YARN配置文件服務器
yarn-env.sh:配置java環境變量
yarn-site.xml:日誌彙集功能使能、日誌保留時間設置多少天、Reducer獲取數據的方式、指定YARN的ResourceManager的地址
(4)、MapReduce配置文件
mapred-env.sh:配置java環境變量
mapred-site.xml:、歷史服務器端地址、歷史服務器web端地址、指定MR運行在Yarn上
說明:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四個配置文件存放在$HADOOP_HOME/etc/hadoop這個路徑上,用戶能夠根據項目需求從新進行修改配置,xxx.site.xml的配置文件優先級高於xxx.default.xml的配置文件的優先級,好比core-site.xml優先級高與core-default.xml,高優先級的覆蓋低優先級的配置文件
重要:總結了core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四個文件企業級別集羣配置大全
參考地址:http://www.javashuo.com/article/p-bzdjlech-hq.html
分析:
1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱)
2)安裝JDK
3)配置環境變量
4)安裝Hadoop
5)配置環境變量
6)配置集羣
7)單點啓動
8)配置ssh
9)羣起並測試集羣
1. scp(secure copy)安全拷貝
(1)scp定義:
scp能夠實現服務器與服務器之間的數據拷貝。(from server1 to server2)
(2)基本語法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 遞歸 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
(3)案例實操
(a)在hadoop101上,將hadoop101中/opt/module目錄下的軟件拷貝到hadoop102上。
[atguigu@hadoop101 /]$ scp -r /opt/module root@hadoop102:/opt/module
(b)在hadoop103上,將hadoop101服務器上的/opt/module目錄下的軟件拷貝到hadoop103上。
[atguigu@hadoop103 opt]$sudo scp -r atguigu@hadoop101:/opt/module root@hadoop103:/opt/module
(c)在hadoop103上操做將hadoop101中/opt/module目錄下的軟件拷貝到hadoop104上。
[atguigu@hadoop103 opt]$ scp -r atguigu@hadoop101:/opt/module root@hadoop104:/opt/module
注意:拷貝過來的/opt/module目錄,別忘了在hadoop102、hadoop103、hadoop104上修改全部文件的,全部者和全部者組。sudo chown atguigu:atguigu -R /opt/module
(d)將hadoop101中/etc/profile文件拷貝到hadoop102的/etc/profile上。
[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile
(e)將hadoop101中/etc/profile文件拷貝到hadoop103的/etc/profile上。
[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile
(f)將hadoop101中/etc/profile文件拷貝到hadoop104的/etc/profile上。
[atguigu@hadoop101 ~]$ sudo scp /etc/profile root@hadoop104:/etc/profile
注意:拷貝過來的配置文件別忘了source一下/etc/profile,。
2. rsync 遠程同步工具
rsync主要用於備份和鏡像。具備速度快、避免複製相同內容和支持符號連接的優勢。
rsync和scp區別:用rsync作文件的複製要比scp的速度快,rsync只對差別文件作更新。scp是把全部文件都複製過去。
(1)基本語法
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 選項參數 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
選項參數說明
表2-2
選項 |
功能 |
-r |
遞歸 |
-v |
顯示覆制過程 |
-l |
拷貝符號鏈接 |
(2)案例實操
(a)把hadoop101機器上的/opt/software目錄同步到hadoop102服務器的root用戶下的/opt/目錄
[atguigu@hadoop101 opt]$ rsync -rvl /opt/software/ root@hadoop102:/opt/software
3. xsync集羣分發腳本
(1)需求:循環複製文件到全部節點的相同目錄下
(2)需求分析:
(a)rsync命令原始拷貝:
rsync -rvl /opt/module root@hadoop103:/opt/
(b)指望腳本:
xsync要同步的文件名稱
(c)說明:在/home/atguigu/bin這個目錄下存放的腳本,atguigu用戶能夠在系統任何地方直接執行。
(3)腳本實現
(a)在/home/atguigu目錄下建立bin目錄,並在bin目錄下xsync建立文件,文件內容以下:
[atguigu@hadoop102 ~]$ mkdir bin
[atguigu@hadoop102 ~]$ cd bin/
[atguigu@hadoop102 bin]$ touch xsync
[atguigu@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 具備執行權限
[atguigu@hadoop102 bin]$ chmod 777 xsync
(c)調用腳本形式:xsync 文件名稱
[atguigu@hadoop102 bin]$ xsync /home/atguigu/bin
注意:若是將xsync放到/home/atguigu/bin目錄下仍然不能實現全局使用,能夠將xsync移動到/usr/local/bin目錄下。
1. 集羣部署規劃
表2-3
|
hadoop102 |
hadoop103 |
hadoop104 |
HDFS
|
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
2. 配置集羣
(1)核心配置文件
配置core-site.xml
[atguigu@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
[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置hdfs-site.xml
[atguigu@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
[atguigu@hadoop102 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置yarn-site.xml
[atguigu@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
[atguigu@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置mapred-site.xml
[atguigu@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[atguigu@hadoop102 hadoop]$ vi mapred-site.xml
在該文件中增長以下配置
<!-- 指定MR運行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3.在集羣上分發配置好的Hadoop配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
4.查看文件分發狀況
[atguigu@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
(1)若是集羣是第一次啓動,須要格式化NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
(2)在hadoop102上啓動NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[atguigu@hadoop102 hadoop-2.7.2]$ jps
3461 NameNode
(3)在hadoop10二、hadoop103以及hadoop104上分別啓動DataNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[atguigu@hadoop102 hadoop-2.7.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[atguigu@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[atguigu@hadoop103 hadoop-2.7.2]$ jps
3190 DataNode
3279 Jps
[atguigu@hadoop104 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[atguigu@hadoop104 hadoop-2.7.2]$ jps
3237 Jps
3163 DataNode
(4)思考:每次都一個一個節點啓動,若是節點數增長到1000個怎麼辦?
早上來了開始一個一個節點啓動,到晚上下班恰好完成,下班?
1. 配置ssh
(1)基本語法
ssh另外一臺電腦的ip地址
(2)ssh鏈接時出現Host key verification failed的解決方法
[atguigu@hadoop102 opt] $ ssh 192.168.1.103
The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.
(3)解決方案以下:直接輸入yes
2. 無密鑰配置
(1)免密登陸原理,如圖2-40所示
圖2-40 免密登錄原理
(2)生成公鑰和私鑰:
[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
而後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
(3)將公鑰拷貝到要免密登陸的目標機器上
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104
注意:
還須要在hadoop102上採用root帳號,配置一下無密登陸到hadoop102、hadoop103、hadoop104;
還須要在hadoop103上採用atguigu帳號配置一下無密登陸到hadoop102、hadoop103、hadoop104服務器上。
3. .ssh文件夾下(~/.ssh)的文件功能解釋
表2-4
known_hosts |
記錄ssh訪問過計算機的公鑰(public key) |
id_rsa |
生成的私鑰 |
id_rsa.pub |
生成的公鑰 |
authorized_keys |
存放受權過得無密登陸服務器公鑰 |
1. 配置slaves
/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[atguigu@hadoop102 hadoop]$ vi slaves
在該文件中增長以下內容:
hadoop102
hadoop103
hadoop104
注意:該文件中添加的內容結尾不容許有空格,文件中不容許有空行。
同步全部節點配置文件
[atguigu@hadoop102 hadoop]$ xsync slaves
2. 啓動集羣
(1)若是集羣是第一次啓動,須要格式化NameNode(注意格式化以前,必定要先中止上次啓動的全部namenode和datanode進程,而後再刪除data和log數據)
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format
(2)啓動HDFS
[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguigu@hadoop102 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[atguigu@hadoop103 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps
[atguigu@hadoop104 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
(3)啓動YARN
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
注意:NameNode和ResourceManger若是不是同一臺機器,不能在NameNode上啓動 YARN,應該在ResouceManager所在的機器上啓動YARN。
(4)Web端查看SecondaryNameNode
(a)瀏覽器中輸入:http://hadoop104:50090/status.html
(b)查看SecondaryNameNode信息,如圖2-41所示。
圖2-41 SecondaryNameNode的Web端
3. 集羣基本測試
(1)上傳文件到集羣
上傳小文件
[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/atguigu/input
[atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/atguigu/input
上傳大文件
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put
/opt/software/hadoop-2.7.2.tar.gz /user/atguigu/input
(2)上傳文件後查看文件存放在什麼位置
(a)查看HDFS文件存儲路徑
[atguigu@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在磁盤存儲文件內容
[atguigu@hadoop102 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce
atguigu
atguigu
(3)拼接
-rw-rw-r--. 1 atguigu atguigu 134217728 5月 23 16:01 blk_1073741836
-rw-rw-r--. 1 atguigu atguigu 1048583 5月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 atguigu atguigu 63439959 5月 23 16:01 blk_1073741837
-rw-rw-r--. 1 atguigu atguigu 495635 5月 23 16:01 blk_1073741837_1013.meta
[atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file
[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file
[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.file
(4)下載
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get
/user/atguigu/input/hadoop-2.7.2.tar.gz ./
1. 各個服務組件逐一啓動/中止
(1)分別啓動/中止HDFS組件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
(2)啓動/中止YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager
2. 各個模塊分開啓動/中止(配置ssh是前提)經常使用
(1)總體啓動/中止HDFS
start-dfs.sh / stop-dfs.sh
(2)總體啓動/中止YARN
start-yarn.sh / stop-yarn.sh
時間同步的方式:找一個機器,做爲時間服務器,全部的機器與這臺集羣時間進行定時的同步,好比,每隔十分鐘,同步一次時間。
配置時間同步具體實操:
1. 時間服務器配置(必須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
2. 其餘機器配置(必須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分鐘,節省時間。