hadoop入門補充知識
Hadoop實操演練
什麼是快照
給虛擬機器儲存當下的狀態 之後可以回退到儲存的狀態
什麼時候用快照
在對虛擬機器執行一些比較危險的操作之前可以先使用快照之後還可以返回
如何快速生成多臺虛擬機器
先將需要克隆的機器關機
連結克隆與完整克隆
連結克隆的速度很快但是需要保證原機器執行正常(不能壞)
完整克隆速度較慢但是克隆完畢之後克隆機與原機器之間再無關係
克隆完機器一般需要兩步操作
1.網絡卡資訊的修改
vim /etc/sysconfi/network-scripts/ifcfg-ens33
systemctl restart network
2.主機名稱的修改(可以不做)
hostnamectl set-hostname 新的名稱
bash
3.關閉防火牆
systemctl stop firewalld 臨時關閉
systemctl disable firewalld 然後reboot
永久關閉
systemctl status firewalld 檢視防火牆狀態
systemctl restart network 重啟
4.配置對映關係(可以不做)
虛擬機器:vim /etc/hosts(10.0.0.201 hadoop101)
本機:C:\Windows\System32\drivers\etc\hosts
如何利用xshell通過主機名稱的防暑連結虛擬機器
修改宿主機hosts檔案對映關係即可
完全分散式(開發重點)
1)準備 3臺客戶機
2)安裝 JDK
3)配置環境變數
4)安裝 Hadoop
5)配置環境變數
6)配置叢集
7)單點啟動
8)配置 ssh
9)群起並測試叢集
詳細:
1)準備 3臺客戶機(關閉防火牆、靜態 ip、主機名稱)
克隆機器修改主機名和主機IP地址
2)安裝 JDK
利用scp命令拷貝資料檔案至三個客戶機
scp -r /opt/module root@hadoop102:/opt/module
scp -r /opt/module root@hadoop103:/opt/module
scp -r /opt/module root@hadoop104:/opt/module
也可以在A機器將B機器檔案拷貝給C機器
scp -r root@hadoop101:/opt/module root@hadoop103:/opt/module
擴充套件:拷貝檔案的命令有scp(全量拷貝)、rsync(增量拷貝)
scp(全量拷貝)
scp -r $pdir/$fname
$user@hadoop$host:$pdir/$fname
命令 遞迴 要拷貝的檔案路徑/名稱
目的使用者@主機:目的路徑/名稱
rsync(增量拷貝)
rsync -rvl $pdir/$fname
$user@hadoop$host:$pdir/$fname
命令 選項引數 要拷貝的檔案路徑/名稱
目的使用者@主機:目的路徑/名稱
引數詳解
r 遞迴
v 顯示覆制過程
l 拷貝符號連線
3)配置環境變數
1.利用scp命令拷貝環境變數檔案至三個客戶機
scp /etc/profile
root@hadoop102:/etc/profile
scp /etc/profile
root@hadoop103:/etc/profile
scp /etc/profile
root@hadoop104:/etc/profile
2.source檔案配置
source /etc/profile
3.驗證是否成功
java
4)擴充套件:叢集分發指令碼
複製檔案到所有節點的相同目錄下
1.在/usr/local/bin下建立sync檔案並填寫以下內容
[jason@hadoop102 ~]$ cd /usr/local/bin
[jason@hadoop102 bin]$ touch xsync
[jason@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
2.修改許可權
chmod 777 xsync
3.測試
在當前機器隨便找一個其他機器沒有的目錄
xsync test/
5)叢集配置
叢集部署規劃
hadoop102 hadoop103 hadoop104
HDFS NameNode/DataNode DataNode SecondaryNameNode/DataNode
YARN NodeManager ResourceManager/NodeManager NodeManager
'''在102上修改,然後用xsync指令碼直接同步'''
1.配置 core-site.xml(修改主機名即可)
[jason@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 配置檔案
1.配置 hadoop-env.sh
[jason@hadoop102 hadoop]$ vi hadoop-env.s
"""內容(有就不用改了)
export JAVA_HOME=/opt/module/jdk1.8.0_14
"""
2.配置 hdfs-site.xml(將偽分散式配置刪除新增下列配置)
[jason@hadoop102 hadoop]$ vi hdfs-site.xml
"""內容
<!-- 指定 Hadoop 輔助名稱節點主機配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
"""
3.YARN 配置檔案
1.配置 yarn-env.sh
[jason@hadoop102 hadoop]$ vi yarn-env.sh
"""內容(有就不用改了)
export JAVA_HOME=/opt/module/jdk1.8.0_144
"""
2.配置 yarn-site.xml(修改主機名即可)
[jason@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 配置檔案
1.配置 mapred-env.sh
[jason@hadoop102 hadoop]$ vi mapred-env.sh
"""內容(偽分散式配了就不用改了)
export JAVA_HOME=/opt/module/jdk1.8.0_144
"""
2.配置 mapred-site.xml(偽分散式配了就不用改了)
[jason@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[jason@hadoop102 hadoop]$ vi mapred-site.xml
"""內容
<!-- 指定 MR 執行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
"""
3.在叢集上分發配置好的 Hadoop 配置檔案
[jason@hadoop102 etc]$ xsync hadoop/
4.檢視檔案分發情況
[jason@hadoop103 hadoop]$ cat /opt/module/hadoop-
2.7.2/etc/hadoop/core-site.xml
1.如果叢集是第一次啟動,需要格式化 NameNode(我們不是 因為前面弄了偽分散式)
[jason@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
如果叢集不是第一次啟動,需要刪除data和logs目錄
[jason@hadoop102 hadoop-2.7.2]$ rm -rf data/ logs/
[jason@hadoop103 hadoop-2.7.2]$ rm -rf data/ logs/
[jason@hadoop104 hadoop-2.7.2]$ rm -rf data/ logs/
2.在 hadoop102 上啟動 NameNode和DataNode
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
3.去103和104啟動datanode(namenode就一個)
[jason@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[jason@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
4.瀏覽器驗證
hadoop102:50070
上述單點啟動的方式每次都一個一個節點啟動
如果節點數量很多該如何解決
公鑰私鑰工作原理
知識補充:檢視know_hosts檔案(訪問過的主機地址)
[jason@hadoop102 ~]$ ll # 無法檢視
[jason@hadoop102 ~]$ ls -al # 可以檢視
[jason@hadoop102 ~]$ cd .ssh
[jason@hadoop102 .ssh]$ ll
[jason@hadoop102 .shh]$ cat known_hosts
生成公鑰私鑰
[jason@hadoop102 .ssh]$ ssh-keygen -t rsa # 連續回車即可
將102公鑰拷貝到103和104
[jason@hadoop102 .shh]$ ssh-copy-id hadoop103
[jason@hadoop102 .shh]$ ssh-copy-id hadoop104
"""
hadoop103中的.ssh在拷貝前後文件是有變化的
hadoop104中的.ssh在拷貝前後文件是有變化的
"""
免密直接訪問103和104
ssh hadoop103/hadoop104
自己用ssh訪問自己也需要輸入密碼,可以採用相同措施解決
[jason@hadoop102 .shh]$ ssh-copy-id hadoop102
由於hadoop103上有一個resurcemanage所以也需要配置ssh
[jason@hadoop103 .ssh]$ ssh-keygen -t rsa
[jason@hadoop103 .shh]$ ssh-copy-id hadoop102
[jason@hadoop103 .shh]$ ssh-copy-id hadoop103
[jason@hadoop103 .shh]$ ssh-copy-id hadoop104
1.配置
檔案位置:/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[jason@hadoop102 hadoop]$ vi slaves
內容(內容清空再新增)
hadoop102
hadoop103
hadoop104
注意:該檔案中新增的內容結尾不允許有空格,檔案中不允許有空行
2.同步所有節點配置檔案
[jason@hadoop102 hadoop]$ xsync slaves
3.將之前單節點啟動的datanode、namenode全部退出
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop namenode
[jason@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
[jason@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
4.啟動HDFS
[jason@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
5.驗證每個節點對於啟動的服務
jps檢視照著之前的表格比較不能出錯
6.啟動yarn(一定要在hadoop103上啟動 因為rm在這裡)
這裡需要將hadoop03的公鑰分別傳送給hadoop102、hadoop103、hadoop104
[jason@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
7.驗證每個節點對於啟動的服務
jps檢視照著之前的表格比較不能出錯
叢集測試
上傳檔案到叢集
1.小檔案
[jason@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -put wcinput/wc.input /
2.大檔案
[jason@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -put /opt/software/hadoop-2.7.2.tar.gz /
3.瀏覽器介面測試
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 hadoop-2.7.2]# rpm -qa | grep ntp
(2)修改 ntp 配置檔案
[root@hadoop102 hadoop-2.7.2]# 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
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
c)新增3(當該節點丟失網路連線,依然可以採用本地時間作為時間伺服器為叢集 中的其他節點提供時間同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改/etc/sysconfig/ntpd 檔案
[root@hadoop102 hadoop-2.7.2]$ vim /etc/sysconfig/ntpd
增加內容如下(讓硬體時間與系統時間一起同步)
SYNC_HWCLOCK=yes
(4)重新啟動 ntpd 服務
[root@hadoop102 桌面]$ service ntpd start
[root@hadoop102 桌面]$ service ntpd status
(5)設定 ntpd 服務開機啟動
[root@hadoop102 桌面]$ chkconfig ntpd on
2. 其他機器配置(必須 root 使用者)
分 時 日 月 周
(1)在其他機器配置 1 分鐘與時間伺服器同步一次
root@hadoop103 hadoop2-7.2]$ crontab -e
編寫定時任務如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
(2)修改任意機器時間
[root@hadoop103 ~]$ date -s "2020-11-11 11:11:11"
(3)一分鐘後檢視機器是否與時間伺服器同步
[root@hadoop103 ~]$ date
# 測試的時候可以將 10 分鐘調整為 1 分鐘,節省時間。
(4)主動同步時間
[root@hadoop103 root]$ /usr/sbin/ntpdate hadoop102