1. 程式人生 > 實用技巧 >Hadoop基礎(五十四):基於centos搭建Hadoop3.x完全分散式執行模式

Hadoop基礎(五十四):基於centos搭建Hadoop3.x完全分散式執行模式

0 簡介

分析:

1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱

2)安裝JDK

3)配置環境變數

4)安裝Hadoop

5)配置環境變數

6)配置叢集

7)單點啟動

8配置ssh

9群起並測試叢集

1 虛擬機器準備

2編寫叢集分發指令碼xsync

1scpsecure copy安全拷貝

1scp定義:

scp可以實現伺服器與伺服器之間的資料拷貝。fromserver1toserver2)

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@hadoop103opt]$sudo scp -r atguigu@hadoop101:/opt/module root@hadoop103:/opt/module

c)在hadoop103上操作將hadoop101/opt/module

目錄下的軟體拷貝到hadoop104上。

[atguigu@hadoop103opt]$ scp -r atguigu@hadoop101:/opt/module root@hadoop104:/opt/module

注意:拷貝過來的/opt/module目錄別忘了在hadoop102、hadoop103、hadoop104上修改所有檔案的,所有者和所有者組。sudo chownatguigu: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

2rsync遠端同步工具

rsync主要用於備份和映象。具有速度快、避免複製相同內容和支援符號連結的優點。

rsyncscp區別:rsync做檔案的複製要比scp的速度快,rsync只對差異檔案做更新。scp是把所有檔案都複製過去。

1)基本語法

rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname

命令 選項引數 要拷貝的檔案路徑/名稱 目的使用者@主機:目的路徑/名稱

選項引數說明

選項

功能

-a

歸檔拷貝

-v

顯示覆制過程

2)案例實操

hadoop101機器上的/opt/software目錄同步到hadoop102伺服器的root使用者下的/opt/目錄

[atguigu@hadoop101 opt]$ rsync -av /opt/software/hadoop102:/opt/software

3xsync叢集分發指令碼

1)需求:迴圈複製檔案到所有節點的相同目錄下

2需求分析:

arsync命令原始拷貝:

rsync -av /opt/module root@hadoop103:/opt/

b)期望指令碼:

xsync要同步的檔名稱

c)說明:在/home/atguigu/bin這個目錄下存放的指令碼,atguigu使用者可以在系統任何地方直接執行。

(3)指令碼實現

a)在/home/atguigu目錄下建立xsync檔案

cd /home/atguigu
vim xsync

該檔案中編寫如程式碼

#!/bin/bash
#1. 判斷引數個數
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍歷叢集所有機器
for host in hadoop102 hadoop103 hadoop104
do
  echo ====================  $host  ====================
  #3. 遍歷所有目錄,挨個傳送
  for file in $@
  do
    #4 判斷檔案是否存在
    if [ -e $file ]
    then
      #5. 獲取父目錄
      pdir=$(cd -P $(dirname $file); pwd)
      #6. 獲取當前檔案的名稱
      fname=$(basename $file)
      ssh $host "mkdir -p $pdir"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done

b)修改指令碼 xsync 具有執行許可權

chmod +xxsync

c將指令碼移動到/bin中,以便全域性呼叫

sudo mv xsync /bin/

d)測試指令碼

sudo xsync /bin/xsync

3SSH無密登入配置

1配置ssh

1)基本語法

ssh另一臺電腦的ip地址

2ssh連線時出現Host key verification failed的解決方法

ssh hadoop103

出現:

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)?

3)解決方案如下:直接輸入yes

2無金鑰配置

1免密登入原理

2)生成公鑰和私鑰:

ssh-keygen -t rsa

然後敲(三個回車),就會生成兩個檔案id_rsa(私鑰)、id_rsa.pub(公鑰)

3)將公鑰拷貝到要免密登入的目標機器上

ssh-copy-id hadoop102

ssh-copy-id hadoop103

ssh-copy-id hadoop104

注意

還需要在hadoop102上採用root賬號,配置一下無密登入到hadoop102、hadoop103、hadoop104;

還需要在hadoop103上採用atguigu賬號配置一下無密登入到hadoop102、hadoop103hadoop104伺服器上。

3.ssh資料夾下~/.ssh的檔案功能解釋

known_hosts

記錄ssh訪問過計算機的公鑰(public key)

id_rsa

生成的私鑰

id_rsa.pub

生成的公鑰

authorized_keys

存放授權過的無密登入伺服器公鑰

4叢集配置

1叢集部署規劃

注意:NameNodeSecondaryNameNode不要安裝在同一臺伺服器

注意:ResourceManager也很消耗記憶體,不要和NameNodeSecondaryNameNode配置在同一臺機器上。

hadoop102

hadoop103

hadoop104

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

2配置叢集

1核心配置檔案

配置core-site.xml

cd $HADOOP_HOME/etc/hadoop

vimcore-site.xml

檔案內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:8020</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>
    <property>
        <name>hadoop.proxyuser.atguigu.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.atguigu.groups</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>atguigu</value>
    </property>
</configuration>

2HDFS配置檔案

配置hdfs-site.xml

vimhdfs-site.xml

檔案內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>
</configuration>

3YARN配置檔案

配置yarn-site.xml

vimyarn-site.xml

檔案內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

4MapReduce配置檔案

配置mapred-site.xml

vimmapred-site.xml

檔案內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

3)在叢集上分發配置好的Hadoop配置檔案

xsync /opt/module/hadoop-3.1.3/etc/hadoop/

4)檢視檔案分發情況

cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

5群起叢集

1)配置workers

vim/opt/module/hadoop-3.1.3/etc/hadoop/workers

該檔案中增加如下內容:

hadoop102
hadoop103
hadoop104

注意:該檔案中新增的內容結尾不允許有空格,檔案中不允許有空行。

同步所有節點配置檔案

xsync /opt/module/hadoop-3.1.3/etc

2啟動叢集

1如果叢集是第一次啟動,需要在hadoop102節點格式化NameNode(注意格式化之前,一定要停止上次啟動的所有namenodedatanode程序,然後再刪除data和log資料

hdfs namenode -format

2)啟動HDFS

sbin/start-dfs.sh

(3)在配置了ResourceManager的節點(hadoop103啟動YARN

sbin/start-yarn.sh

4Web端檢視SecondaryNameNode

a)瀏覽器中輸入http://hadoop104:9868/status.html

b)檢視SecondaryNameNode資訊

3叢集基本測試

(1)上傳檔案到叢集

上傳小檔案

hadoop fs -mkdir -p /user/atguigu/input

hadoop fs -put $HADOOP_HOME/wcinput/wc.input /user/atguigu/input

上傳大檔案

hadoop fs -put /opt/software/hadoop-3.1.3.tar.gz /

(2)上傳檔案後檢視檔案存放在什麼位置

a)檢視HDFS檔案儲存路徑

[atguigu@hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

b)檢視HDFS在磁碟儲存檔案內容

(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.jar
[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.jar
[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.jar

(4)下載

[atguigu@hadoop102 hadoop-3.1.3]$ bin/hadoop fs -get
 /hadoop-3.1.3.tar.gz ./

(5)執行wordcount程式

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/atguigu/input /user/atguigu/output

7配置歷史伺服器

為了檢視程式歷史執行情況,需要配置一下歷史伺服器。具體配置步驟如下:

1配置mapred-site.xml

vi mapred-site.xml

在該檔案裡面增加如下配置。

<!-- 歷史伺服器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>

<!-- 歷史伺服器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>

2)分發配置

xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

3)在hadoop102啟動歷史伺服器

mapred --daemon starthistoryserver

4檢視歷史伺服器是否啟動

jps

5檢視JobHistory

http://hadoop102:19888/jobhistory

4.2.8配置日誌的聚集

日誌聚集概念:應用執行完成以後,將程式執行日誌資訊上傳到HDFS系統上。

日誌聚集功能好處:可以方便的檢視到程式執行詳情,方便開發除錯

注意:開啟日誌聚集功能,需要重新啟動NodeManager ResourceManagerHistoryManager

開啟日誌聚集功能具體步驟如下

1配置yarn-site.xml

vimyarn-site.xml

在該檔案裡面增加如下配置。

<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://${yarn.timeline-service.webapp.address}/applicationhistory/logs</value>
</property>
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
<property>
    <name>yarn.timeline-service.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.timeline-service.hostname</name>
    <value>${yarn.resourcemanager.hostname}</value>
</property>
<property>
    <name>yarn.timeline-service.http-cross-origin.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
    <value>true</value>
</property>

2)分發配置

xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

3關閉NodeManager ResourceManagerHistoryServer

103上執行:stop-yarn.sh

102上執行: mapred --daemonstop historyserver

4啟動NodeManager ResourceManageTimelineserverHistoryServer

103上執行:start-yarn.sh

103上執行:yarn --daemon start timelineserver

102上執行:mapred --daemonstart historyserver

5刪除HDFS上已經存在的輸出檔案

hdfs dfs -rm -R /user/atguigu/output

6執行WordCount程式

hadoop jar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/atguigu/input /user/atguigu/output

7檢視日誌

http://hadoop102:19888/jobhistory

Job History

job執行情況

圖檢視日誌