步驟
- 準備3臺客戶機(關閉防火牆、靜態ip、主機名稱)
- 安裝JDK
- 配置環境變量
- 安裝Hadoop
- 配置環境變量
- 配置集羣
- 單點啓動
- 配置ssh
- 羣起並測試集羣
環境準備
分別在三臺虛擬機配置端口號爲129,130,131
scp(secure copy)安全拷貝
scp可以實現服務器與服務器之間的數據拷貝。(from server1 to server2)
基本語法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
-r表示遞歸,只要知道密碼就可以實現任意兩臺服務器之間的拷貝。
案例
需要知道拷貝文件的所有者,以及拷貝過去文件的所有者,否則權限會不足。
(a)在hadoop129上,將hadoop129中/opt/module目錄下的軟件拷貝到hadoop130上。
scp -r /opt/module root@hadoop130:/opt/module
(b)在hadoop131上,將hadoop129服務器上的/opt/module目錄下的軟件拷貝到hadoop131上。
sudo scp -r bushro@hadoop129:/opt/module ./
注意:拷貝過來的/opt/module目錄,修改所有文件的所有者和所有者組。
sudo chown bushro:bushro -R /opt/module
(c)將hadoop129中/etc/profile文件拷貝到hadoop130的/etc/profile上。
sudo scp /etc/profile root@hadoop130:/etc/profile
(d)將hadoop129中/etc/profile文件拷貝到hadoop131的/etc/profile上。
sudo scp /etc/profile root@hadoop131:/etc/profile
注意:拷貝過來的配置
source /etc/profile
rsync遠程同步工具
rsync主要用於備份和鏡像。具有速度快、避免複製相同內容和支持符號鏈接的優點。
rsync和scp區別:用rsync做文件的複製要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都複製過去。
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname
-r 遞歸、-v 顯示覆制過程、-l 拷貝符號連接
xsync集羣分發腳本
需求:循環複製文件到所有節點的相同目錄下
在/home/bushro目錄下創建bin目錄,並在bin目錄下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=129; host<=131; host++));do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
修改腳本權限
chmod 777 xsync
調用腳本形式:xsync 文件名稱
xsync /home/bushro/bin
如果不行的話把腳本放在在/usr/local/bin下
集羣配置
集羣部署規劃
— | hadoop129 | hadoop130 | hadoop131 |
---|---|---|---|
HDFS | NameNode,DataNode | DataNode | DataNode,SecondaryNameNode |
YARN | NodeManager | ResourceManager,NodeManager | NodeManager |
NameNode與SecondaryNameNode的內存關係是1:1,所有它們不能部署在同一臺電腦上面。ResourceManager也需要很多的內存,單獨一臺部署。
(1)核心配置文件
修改129下 /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop129: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,修改JAVA_HOME
配置hdfs-site.xml,修改副本,默認值就是3,因爲我們使用的是三臺服務器所有直接用,並指定輔助節點主機131,SecondaryNameNode
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop131:50090</value>
</property>
(3)YARN配置文件
配置yarn-env.sh,修改JAVA_HOME
配置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>hadoop130</value>
</property>
(4)MapReduce配置文件
配置mapred-env.sh,修改JAVA_HOME
配置mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
在該文件中增加如下配置
<!-- 指定MR運行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(5)在集羣上分發配置好的Hadoop配置文件
如果是自己家目錄的bin的話需要加 ./xsync
xsync /opt/module/hadoop-2.7.2/
集羣單節點啓動
如果集羣是第一次啓動,需要格式化NameNode
hadoop namenode -format
SSH無密登錄配置
原理
/home/bushro/.ssh目錄下執行
ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
ll -a
可以查看隱藏文件
將公鑰拷貝到要免密登錄的目標機器上
[bushro@hadoop129 .ssh]$ ssh-copy-id hadoop129
[bushro@hadoop129 .ssh]$ ssh-copy-id hadoop130
[bushro@hadoop129 .ssh]$ ssh-copy-id hadoop131
注意:
還需要在hadoop129上採用root賬號,配置一下無密登錄到hadoop129、hadoop130、hadoop131;
還需要在hadoop130上採用bushro賬號配置一下無密登錄到hadoop129、hadoop130、hadoop131服務器上。因爲它是ResourceManager需要分發
- known_hosts 記錄ssh訪問過計算機的公鑰(public key)
- authorized_keys 存放授權過得無密登錄服務器公鑰
集羣啓動
配置slaves
編輯/opt/module/hadoop-2.7.2/etc/hadoop/slaves,這裏面存放的都是dataNode節點,該文件是被start-dfs.sh調用的
hadoop129
hadoop130
hadoop131
注意:該文件中添加的內容結尾不允許有空格,文件中不允許有空行。
文件分發,到130,131
xsync slaves
啓動集羣
如果集羣是第一次啓動,需要格式化NameNode(注意格式化之前,一定要先停止上次啓動的所有namenode和datanode進程,然後再刪除data和log數據)
bin/hdfs namenode -format
啓動HDFS
129上面啓動
[bushro@hadoop129 hadoop-2.7.2]$ sbin/start-dfs.sh
Starting namenodes on [hadoop129]
hadoop129: starting namenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-bushro-namenode-hadoop129.out
hadoop131: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-bushro-datanode-hadoop131.out
hadoop130: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-bushro-datanode-hadoop130.out
hadoop129: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-bushro-datanode-hadoop129.out
Starting secondary namenodes [hadoop131]
hadoop131: starting secondarynamenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-bushro-secondarynamenode-hadoop131.out
Web端查看SecondaryNameNode
(a)瀏覽器中輸入:http://hadoop104:50090/status.html
啓動Yarn
因爲ResourceManager在130上面,所以必須在130上面啓動
[bushro@hadoop130 hadoop-2.7.2]$ sbin/start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-bushro-resourcemanager-hadoop130.out
hadoop130: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-bushro-nodemanager-hadoop130.out
hadoop131: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-bushro-nodemanager-hadoop131.out
hadoop129: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-bushro-nodemanager-hadoop129.out
You have new mail in /var/spool/mail/root
注意:NameNode和ResourceManger如果不是同一臺機器,不能在NameNode上啓動 YARN,應該在ResouceManager所在的機器上啓動YARN。
集羣測試
在HDFS上面創建一個文件夾
[bushro@hadoop129 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/bushro/input
上傳文件
[bushro@hadoop129 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /
[bushro@hadoop129 hadoop-2.7.2]$ hdfs dfs -put /opt/hadoop-2.7.2.tar.gz /
一大一小,大的超過了128M,它會分塊存儲。
上傳的文件存儲在/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-1080591534-192.168.233.129-1572886510354/current/finalized/subdir0/subdir0
目錄下
塊0和塊1對應Linux的兩塊數據,可以把他們合併成一個文件然後解壓,看是不是原來那個文件
[bushro@hadoop129 subdir0]$ cat blk_1073741828>>tmp.file
[bushro@hadoop129 subdir0]$ cat blk_1073741829>>tmp.file
[bushro@hadoop129 subdir0]$ tar -zxvf tmp.file
集羣啓動/停止方式
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
集羣時間同步
- 需要關閉防火牆,今天在使用ntpdate同步服務器時間的時候,出現“no server suitable for synchronization found”的錯誤提示,這樣的提示多數是因爲防火牆封鎖了udp的123端口
時間同步的方式:找一個機器如(129),作爲時間服務器,所有的機器與這臺集羣時間進行定時的同步,比如,每隔十分鐘,同步一次時間。
1. 時間服務器配置(必須root用戶)
(1)檢查ntp是否安裝
[root@hadoop129 ~]# rpm -qa|grep ntp
ntp-4.2.6p5-28.el7.centos.x86_64
ntpdate-4.2.6p5-28.el7.centos.x86_64
fontpackages-filesystem-1.44-8.el7.noarch
python-ntplib-0.3.2-1.el7.noarch
(2)修改ntp配置文件
vim /etc/ntp.conf
修改1(授權192.168.233.0-192.168.233.255網段上的所有機器可以從這臺機器上查詢和同步時間),去掉#並修改
restrict 192.168.233.0 mask 255.255.255.0 nomodify notrap
修改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
添加3(當該節點丟失網絡連接,依然可以採用本地時間作爲時間服務器爲集羣中的其他節點提供時間同步),末尾添加
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改/etc/sysconfig/ntpd 文件
vim /etc/sysconfig/ntpd
增加內容如下(讓硬件時間與系統時間一起同步)
SYNC_HWCLOCK=yes
(4)重新啓動ntpd服務
centos7
[root@hadoop129 ~]# systemctl stop ntpd.service
[root@hadoop129 ~]# systemctl start ntpd.service
centos6
service ntpd start
service ntpd stop
(5)設置ntpd服務開機啓動
centos7
systemctl enable ntpd.service
centos6
chkconfig ntpd on
其他機器配置
(1)在其他機器配置10分鐘與時間服務器同步一次
[root@hadoop130 ~]# crontab -e
編寫定時任務如下:
*/10 * * * * /usr/sbin/ntpdate hadoop129
(2)修改任意機器時間
[root@hadoop130 ~]# date -s "2017-9-11 11:11:11"
(3)十分鐘後查看機器是否與時間服務器同步
[root@hadoop129 ~]# date
測試的時候可以將10分鐘調整爲1分鐘,節省時間。