1. 程式人生 > 其它 >hadoop入門補充知識

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

叢集ssh配置

上述單點啟動的方式每次都一個一個節點啟動

如果節點數量很多該如何解決

公鑰私鑰工作原理

知識補充:檢視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