第七章:完全分散式部署Hadoop

第七章:完全分散式部署Hadoop

(作者:Memories)

分析:

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

2)安裝jdk

3)配置環境變數

4)安裝hadoop

5)配置環境變數

6)配置集群

7)單點啟動

8)配置ssh

9)群起並測試集群

一、虛擬機準備

前面文章以介紹過。

二、編寫集群分髮腳本xsync

1)scp:secure copy 安全拷貝

(1)scp定義:

scp可以實現伺服器與伺服器之間的數據拷貝。

(2)案例實操

(a)將hadoop101中/opt/module目錄下的軟體拷貝到hadoop102上。

[memories@hadoop101~]$scp -r /opt/module/* root@hadoop102:/opt/module

(b)將hadoop101伺服器上的/opt/module目錄下的軟體拷貝到hadoop103上。

[atguigu@hadoop103 opt]$ scp -r root@hadoop101:/opt/module/* hadoop103:/opt/module

(c)在hadoop103上操作將hadoop101中/opt/module目錄下的軟體拷貝到hadoop104上。

[atguigu@hadoop103 opt]$ scp -r hadoop101:/opt/module/* hadoop104:/opt/module

2) rsync

rsync遠程同步工具,主要用於備份和鏡像。具有速度快、避免複製相同內容和支持符號鏈接的優點。

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

(1)查看rsync使用說明

man rsync | more

(2)基本語法

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

命令 命令參數 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑

(3)選項說明

選項

功能

-r

遞歸

-v

顯示複製過程

-l

拷貝符號連接

(4)案例實操

把本機/opt/software目錄同步到hadoop102伺服器的root用戶下的/opt/目錄

[memories@hadoop101 opt]$ rsync -rvl /opt/software/* hadoop102:/opt/software/

3)腳本需求分析:循環複製文件到所有節點的相同目錄下。

(1)原始拷貝:

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

(2)期望腳本:

xsync要同步的文件名稱

(3)在/home/memories/bin這個目錄下存放的腳本,memories用戶可以在系統任何地方直接執行。

4)腳本實現:

(1)在/home/memories目錄下創建bin目錄,並在bin目錄下xsync創建文件,文件內容如下:

[memories@hadoop102 ~]$ mkdir bin

[memories@hadoop102 ~]$ cd bin/

[memories@hadoop102 bin]$ touch xsync

[memories@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=102; host<104; host++)); do

echo --------------------- hadoop$host ----------------

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

done

(2)修改腳本 xsync 具有執行許可權

[memories@hadoop102 bin]$ chmod 777 xsync

(3)調用腳本形式:xsync 文件名稱

[memories@hadoop102 bin]$ xsync /home/memories/bin

三、集群配置

1)集群部署規劃

hadoop101

hadoop102

hadoop103

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

2)配置集群

(1)核心配置文件

core-site.xml(目錄:/opt/module/hadoop-2.7.2/etc/hadoop)

[memories@hadoop101 hadoop]$ vi core-site.xml

<!-- 指定HDFS中NameNode的地址 -->

<property>

<name>fs.defaultFS</name>

<value>hdfs://hadoop101: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

[memories@hadoop101 hadoop]$ vi hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

hdfs-site.xml

[memories@hadoop101 hadoop]$ vi hdfs-site.xml

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>hadoop103:50090</value>

</property>

(3)yarn配置文件

yarn-env.sh

[memories@hadoop101 hadoop]$ vi yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

yarn-site.xml

[memories@hadoop101 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>hadoop102</value>

</property>

(4)mapreduce配置文件

mapred-env.sh

[memories@hadoop101 hadoop]$ vi mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

mapred-site.xml

[memories@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml

[memories@hadoop101 hadoop]$ vi mapred-site.xml

<!-- 指定mr運行在yarn上 -->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

3)在集群上分發配置好的Hadoop配置文件

[memories@hadoop101 hadoop]$ xsync /opt/module/

4)查看文件分發情況

[memories@hadoop102 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

  1. 在hadoop102、hadoop103上的/etc/profile文件中配置jdk以及hadoop信息,配置的信息與hadoop101一致。

四、集群單點啟動

0)如果集群是第一次啟動,需要格式化NameNode

[memories@hadoop101 hadoop-2.7.2]$ hadoop namenode -format

1)在hadoop101上啟動NameNode

[memories@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start namenode

[memories@hadoop101 hadoop-2.7.2]$ jps

3461 NameNode

3531 Jps

也可在網頁中打開查看,在瀏覽器中輸入hadoop101:50070

  1. 在hadoop101、hadoop102以及hadoop103上分別啟動DataNode

[memories@hadoop101 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

[memories@hadoop101 hadoop-2.7.2]$ jps

3461 NameNode

3608 Jps

3561 DataNode

[memories@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

[memories@hadoop102 hadoop-2.7.2]$ jps

3190 DataNode

3279 Jps

[memories@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode

[memories@hadoop103 hadoop-2.7.2]$ jps

3237 Jps

3163 DataNode

啟動完datanode進程後,網頁上之前為0的選項才會有一些值

當啟動完hadoop102和103主機的datanode之後,我們再刷新網頁就可以看到磁碟空間變成了3倍,活節點是3個。

五、SSH無密登錄配置

1)配置ssh

(1)基本語法

ssh 另一台電腦的ip地址

(2)ssh連接時出現Host key verification failed的解決方法

[memories@hadoop101 opt] $ ssh 192.168.1.102

The authenticity of host 192.168.1.102 (192.168.1.102) cant 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)?

Host key verification failed.

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

2)無密鑰配置

(1)生成公鑰和私鑰:

[memories@hadoop102 .ssh]$ ssh-keygen -t rsa

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

(2)將公鑰拷貝到要免密登錄的目標機器上

[memories@hadoop101 .ssh]$ ssh-copy-id hadoop102

[memories@hadoop101 .ssh]$ ssh-copy-id hadoop103

3).ssh文件夾下(~/.ssh)的文件功能解釋

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

(2)id_rsa :生成的私鑰

(3)id_rsa.pub :生成的公鑰

(4)authorized_keys :存放授權過的無密登錄伺服器公鑰

六、集群測試

1)配置slaves

/opt/module/hadoop-2.7.2/etc/hadoop/slaves

[memories@hadoop101 hadoop]$ vi slaves

hadoop101

hadoop102

hadoop103

2)啟動集群

(0)如果集群是第一次啟動,需要格式化NameNode

[memories@hadoop101 hadoop-2.7.2]$ hdfs namenode -format

(1)啟動HDFS:

[memories@hadoop101 hadoop-2.7.2]$ start-dfs.sh

[memories@hadoop102 hadoop-2.7.2]$ jps

4166 NameNode

4482 Jps

4263 DataNode

[memories@hadoop102 hadoop-2.7.2]$ jps

3218 DataNode

3288 Jps

[memories@hadoop103 hadoop-2.7.2]$ jps

3221 DataNode

3283 SecondaryNameNode

3364 Jps

(2)啟動yarn

[memories@hadoop102 hadoop-2.7.2]$ start-yarn.sh

注意:NameNode和ResourceManger如果不是同一台機器,不能在NameNode上啟動 yarn,應該在ResouceManager所在的機器上啟動yarn。

(3)web端查看SecondaryNameNode

(a)瀏覽器中輸入:http://hadoop103:50090/status.html

(b)查看SecondaryNameNode信息。

3)集群基本測試

(1)上傳文件到集群

上傳小文件

[memories@hadoop101 hadoop-2.7.2]$ hadoop fs -mkdir -p /user/memories/input

[memories@hadoop101 hadoop-2.7.2]$ hadoop fs -put wcinput/wc.input /user/memories/input

上傳大文件

[memories@hadoop101 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/memories/input

(2)上傳文件後查看文件存放在什麼位置

查看HDFS文件存儲路徑

[memories@hadoop101 subdir0]$ pwd

/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

查看HDFS在磁碟存儲文件內容

[memories@hadoop101 subdir0]$ cat blk_1073741825

hadoop yarn

hadoop mapreduce

atguigu

atguigu

(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

[memories@hadoop101 subdir0]$ cat blk_1073741836>>tmp.file

[memories@hadoop101 subdir0]$ cat blk_1073741837>>tmp.file

[memories@hadoop101 subdir0]$ tar -zxvf tmp.file

(4)下載

[memories@hadoop101 hadoop-2.7.2]$ bin/hadoop fs -get /user/memories/input/hadoop-2.7.2.tar.gz ./

4)性能測試集群

(1)寫海量數據

(2)讀海量數據

七、集群啟動/停止方式

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)時間伺服器配置(必須root用戶)

(1)檢查ntp是否安裝

[root@hadoop101 桌面]# rpm -qa|grep ntp

ntp-4.2.6p5-10.el6.centos.x86_64

fontpackages-filesystem-1.41-1.1.el6.noarch

ntpdate-4.2.6p5-10.el6.centos.x86_64

(2)修改ntp配置文件

[root@hadoop101 桌面]# 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 文件

[root@hadoop101 桌面]# vim /etc/sysconfig/ntpd

增加內容如下(讓硬體時間與系統時間一起同步)

SYNC_HWCLOCK=yes

(4)重新啟動ntpd

[root@hadoop101 桌面]# service ntpd status

ntpd 已停

[root@hadoop101 桌面]# service ntpd start

正在啟動 ntpd: [確定]

(5)執行:

[root@hadoop101 桌面]# chkconfig ntpd on

2)其他機器配置(必須root用戶)

(1)在其他機器配置10分鐘與時間伺服器同步一次

[root@hadoop102 hadoop-2.7.2]# crontab -e

編寫腳本

*/10 * * * * /usr/sbin/ntpdate hadoop101

(2)修改任意機器時間

[root@hadoop102 hadoop]# date -s "2017-9-11 11:11:11"

(3)十分鐘後查看機器是否與時間伺服器同步

[root@hadoop102 hadoop]# date


推薦閱讀:

如何用spark做矩陣計算?
手工搭建 Spark 數據分析平台
【Spark大數據】1.Spark2.0環境搭建
Spark性能優化指南——基礎篇
Scala簡明語法

TAG:Hadoop | 大數據 | Spark |