Hadoop執行模式之完全分散式部署Hadoop
Hadoop執行模式之完全分散式部署Hadoop
1 完全分散式部署Hadoop
分析:
1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱)
2)安裝jdk
3)配置環境變數
4)安裝hadoop
5)配置環境變數
6)安裝ssh
7)配置叢集
8)啟動測試叢集
1.1 虛擬機器準備
詳見之前章節。
1.2 主機名設定
詳見之前章節。
1.3 scp
1)scp可以實現伺服器與伺服器之間的資料拷貝。
2)案例實操
(1)將hadoop101中/opt/module檔案拷貝到hadoop102上。
scp -r /opt/module/ [email protected]:/opt
(2)將192.168.25.102伺服器上的檔案拷貝到當前使用者下。
scp [email protected]:/etc/profile /opt/tmp/
(3)實現兩臺遠端機器之間的檔案傳輸(hadoop103主機檔案拷貝到hadoop104主機上)
scp [email protected]:/opt/test/haha [email protected]:/opt/test/
1.4 SSH無密碼登入
1)配置ssh
(1)基本語法
ssh 另一臺電腦的ip地址 ssh hadoop101
2)無金鑰配置
(1)進入到我的家目錄
cd ~/.ssh
(2)生成公鑰和私鑰:
ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個檔案id_rsa(私鑰)、id_rsa.pub(公鑰)
(3)將公鑰拷貝到要免密登入的目標機器上
ssh-copy-id hadoop103
ssh-copy-id hadoop104
免密登入原理
3).ssh資料夾下的檔案功能解釋
(1)~/.ssh/known_hosts :記錄ssh訪問過計算機的公鑰(public key)
(2)id_rsa :生成的私鑰
(3)id_rsa.pub :生成的公鑰
(4)authorized_keys :存放授權過得無祕登入伺服器公鑰
1.5 rsync
rsync遠端同步工具,主要用於備份和映象。具有速度快、避免複製相同內容和支援符號連結的優點。
rsync和scp區別:用rsync做檔案的複製要比scp的速度快,rsync只對差異檔案做更新。scp是把所有檔案都複製過去。
(1)檢視rsync使用說明
man rsync | more
(2)基本語法
rsync -rvl $pdir/$fname [email protected]$host:$pdir
命令 命令引數 要拷貝的檔案路徑/名稱 目的使用者@主機:目的路徑
選項
-r 遞迴
-v 顯示覆制過程
-l 拷貝符號連線
(3)案例實操
把本機/opt/tmp目錄同步到hadoop103伺服器的root使用者下的/opt/tmp目錄
rsync -rvl /opt/tmp/* [email protected]:/opt/tmp
1.6 編寫叢集分發指令碼xsync
1)需求分析:迴圈複製檔案到所有節點的相同目錄下。
(1)原始拷貝:
rsync -rvl /opt/module [email protected]:/opt/
(2)期望指令碼:
xsync 要同步的檔名稱
(3)在/usr/local/bin這個目錄下存放的指令碼,可以在系統任何地方直接執行。
2)案例實操:
(1)在/usr/local/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=103; host<105; host++)); do
#echo $pdir/$fname [email protected]$host:$pdir
echo --------------- hadoop$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
(2)修改指令碼 xsync 具有執行許可權
[[email protected] bin]# chmod 777 xsync
(3)呼叫指令碼形式:xsync 檔名稱
1.7 編寫分發指令碼xcall
1)需求分析:在所有主機上同時執行相同的命令
xcall +命令
2)具體實現
(1)在/usr/local/bin目錄下建立xcall檔案
#!/bin/bash
pcount=$#
if((pcount==0));then
echo no args;
exit;
fi
echo -------------localhost----------
[email protected]
for((host=101; host<=108; host++)); do
echo ----------hadoop$host---------
ssh hadoop$host [email protected]
done
(2)修改指令碼 xcall 具有執行許可權
[[email protected] bin]# chmod a+x xcall
(3)呼叫指令碼形式: xcall 操作命令
[[email protected] ~]# xcall ls /opt/tmp/profile
1.8 配置叢集
1)叢集部署規劃
2)配置檔案
(1)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.4/data/tmp</value>
</property>
(2)Hdfs
hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
</configuration>
slaves
hadoop102
hadoop103
hadoop104
(3)yarn
yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8
yarn-site.xml
<configuration>
<!-- 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>
</configuration>
(4)mapreduce
mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8
mapred-site.xml
<configuration>
<!-- 指定mr執行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3)在叢集上分發以上所有檔案
xsync /opt/module/hadoop-2.7.4
4)檢視檔案分發情況
xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/slaves
1.9 叢集啟動及測試
1)啟動叢集
(0)如果叢集是第一次啟動,需要格式化namenode
[[email protected] hadoop-2.7.2]# bin/hdfs namenode -format
(1)啟動HDFS:
[[email protected] hadoop-2.7.2]# sbin/start-dfs.sh
[[email protected] hadoop-2.7.2]# jps
4166 NameNode
4482 Jps
4263 DataNode
[[email protected] hadoop-2.7.2]# jps
3218 DataNode
3288 Jps
[[email protected] hadoop-2.7.2]# jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
(2)啟動yarn
sbin/start-yarn.sh
注意:Namenode和ResourceManger如果不是同一臺機器,不能在NameNode上啟動 yarn,應該在ResouceManager所在的機器上啟動yarn。
2)叢集基本測試
(1)上傳檔案到叢集
建立檔案件
hadoop fs -mkdir -p /user/zhihua/input
上傳小檔案
hadoop fs -put test/ /user/zhihua/input
上傳大檔案
hadoop fs -put /opt/software/hadoop-2.7.4-with-centos-6.7.tar.gz /user/zhihua/input
(2)上傳檔案後檢視檔案存放在什麼位置
檔案儲存路徑
/opt/module/hadoop-2.7.4/data/tmp/dfs/data/current/BP-515947719-192.168.25.102-1534487195790/current/finalized/subdir0/subdir0
檢視檔案內容
[[email protected] subdir0]$ cat blk_1073741825
hello
(3)拼接
[[email protected] subdir0]$ cat blk_1073741826 >> tmp.file
[[email protected] subdir0]$ cat blk_1073741827 >> tmp.file
[[email protected] subdir0]$ tar -zxvf tmp.file
(4)下載
hadoop fs -get /user/zhihua/input/hadoop-2.7.4-with-centos-6.7.tar.gz
3)叢集效能測試
寫海量資料
讀海量資料
1.10 Hadoop啟動停止方式
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
3)全部啟動(不建議使用)
start-all.sh
stop-all.sh
1.11 叢集時間同步
時間同步的方式:找一個機器,作為時間伺服器,所有的機器與這臺叢集時間進行定時的同步,比如,每隔十分鐘,同步一次時間。
配置時間同步實操:
1)時間伺服器配置(必須root使用者)
(1)檢查ntp是否安裝
rpm -qa | grep ntp
(2)修改ntp配置檔案
vi /etc/ntp.conf
a)修改1
#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 檔案
vim /etc/sysconfig/ntpd
增加內容如下
SYNC_HWCLOCK=yes
(4)重新啟動ntpd
service ntpd status
service ntpd start
(5)執行:
chkconfig ntpd on
2)其他機器配置(必須root使用者)
(1)在其他機器配置10分鐘與時間伺服器同步一次
crontab -e
編寫指令碼
*/10 * * * * /usr/sbin/ntpdate hadoop102
(2)修改任意機器時間
date -s "2017-11-11 11:11:11"
(3)十分鐘後檢視機器是否與時間伺服器同步
date
1.12 配置叢集常見問題
1)防火牆沒關閉、或者沒有啟動yarn
2)主機名稱配置錯誤
/etc/hosts
3)ip地址配置錯誤
4)ssh沒有配置好
root
為了使用xsync指令碼
atguigu
為了叢集啟動
5)root使用者和atguigu兩個使用者啟動叢集不統一
6)配置檔案修改不細心
7)未編譯原始碼
8)datanode不被namenode識別問題
9)不識別主機名稱
解決辦法:
(1)在/etc/hosts檔案中新增192.168.25.102 hadoop102
(2)主機名稱不要起hadoop hadoop000等特殊名稱
10)datanode和namenode程序同時只能工作一個。
datanode和namenode程序同時只能有一個工作問題分析.pptx
11)執行命令不生效,貼上word中命令時,遇到-和長–沒區分開。導致命令失效
解決辦法:儘量不要貼上word中程式碼。
12)jps發現程序已經沒有,但是重新啟動叢集,提示程序已經開啟。原因是在linux的根目錄下/tmp目錄中存在啟動的程序臨時檔案,將叢集相關程序刪除掉,再重新啟動叢集。