Hadoop分佈式運行環境搭建手記

1.準備虛擬機(關閉防火牆、靜態ip、主機名稱)

1.1首先使用VMware安裝CentOS7.4虛擬機

安裝好虛擬機後設置好靜態IP(192.168.126.120,設置DNS),hostname,執行yum update更新軟件html

這裏因爲進行了規劃,因此提早設置了hosts,防止ping hostname的時候不一樣node

1.2安裝軟件

安裝vim,在/usr/lib/jvm目錄安裝好jdk1.8.0_212,並配置/etc/profile文件vim

1.3關閉防火牆

1.4建立hadoop用戶

建立hadoop用戶並配置hadoop用戶具備root權限centos

在根目錄"/"建立/data/hadoop/tmp用於存儲hadoop的數據瀏覽器

mkdir -P /data/hadoop/tmp

2.克隆虛擬機

2.1克隆兩臺虛擬機

2.2更改克隆虛擬機的靜態IP、hostname

虛擬機2的IP:192.168.126.122,hostname:hadoop-node2bash

虛擬機3的IP:192.168.126.123,hostname:hadoop-node3服務器

3.編寫集羣分發腳本xsync

在/home/hadoop目錄下建立bin目錄,並在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=2; host<4; host++)); do
        echo ------------------- hadoop-node$host --------------
        rsync -rvl $pdir/$fname $user@hadoop-node$host:$pdir
done

修改腳本xsync具備執行權限chmod 777 xsyncssh

注意:若是將xsync放到/home/hadoop/bin目錄下仍然不能實現全局使用,能夠將xsync移動到/usr/local/bin目錄下。jvm

4.集羣配置

1.集羣規劃

2.安裝hadoop

在/opt/module下建立hadoop目錄,使用ftp同步下載的hadoop2.7.2並解壓,而且將/opt/module/hadoop所屬用戶和所屬組更改成hadoop

chown hadoop:hadoop -R /opt/module/hadoop

並配置/etc/profile文件,而且執行source /etc/profile當即生效

3.修改hadoop配置文件

hadoop的配置文件都在/opt/module/hadoop/hadoop2.7.2/etc下面

3.1核心配置文件core-site.xml

[hadoop@hadoop-node1 hadoop]$ vim core-site.xml

在該文件中編寫以下配置

<!-- 指定HDFS中NameNode的地址 -->
<property>
	<name>fs.defaultFS</name>
    <value>hdfs://hadoop-node1:9000</value>
</property>

<!-- 指定Hadoop運行時產生文件的存儲目錄 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/data/hadoop/tmp</value>
</property>

3.2HDFS配置文件

配置hadoop-env.sh

[hadoop@hadoop-node1 hadoop]$ vim hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_212

配置hdfs-site.xml

[hadoop@hadoop-node1 hadoop]$ vim hdfs-site.xml

在該文件中編寫以下配置

<property>
	<name>dfs.replication</name>
	<value>3</value>
</property>

<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>hadoop-node3:50090</value>
</property>

3.3YARN配置文件

配置yarn-env.sh

[hadoop@hadoop-node1 hadoop]$ vim yarn-env.sh

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_212

配置yarn-site.xml

[hadoop@hadoop-node1 hadoop]$ vim 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>hadoop-node3</value>
</property>

3.4MapReduce配置文件

配置mapred-env.sh

[hadoop@hadoop-node1 hadoop]$ vim mapred-env.sh

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_212

配置mapred-site.xml

[hadoop@hadoop-node1 hadoop]$ cp mapred-site.xml.template mapred-site.xml

[hadoop@hadoop-node1 hadoop]$ vim mapred-site.xml

在該文件中增長以下配置

<!-- 指定MR運行在Yarn上 -->
<property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
</property>

至此,hadoop集羣所須要修改的配置文件都修改完成了

4.在集羣上分發配置好的hadoop配置文件

[hadoop@hadoop-node1 hadoop]$ xsync /opt/module/hadoop/hadoop-2.7.2/

5.集羣單點啓動

這樣啓動方式仍是比較麻煩的,在下一節會使用羣起集羣的功能

若是集羣是第一次啓動,須要格式化****NameNode

[hadoop@hadoop-node1 tmp]$ hdfs namenode -format

在hadoop-node1上啓動NameNode

[hadoop@hadoop-node1 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[hadoop@hadoop-node1 hadoop-2.7.2]$ jps
3461 NameNode

在hadoop-node一、hadoop-node2以及hadoop-node3上分別啓動DataNode

[hadoop@hadoop-node1 tmp]$ hadoop-daemon.sh start datanode
[hadoop@hadoop-node1 tmp]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[hadoop@hadoop-node2 tmp]$ hadoop-daemon.sh start datanode
[hadoop@hadoop-node2 tmp]$ jps
3190 DataNode
3279 Jps
[hadoop@hadoop-node3 tmp]$ hadoop-daemon.sh start datanode
[hadoop@hadoop-node3 tmp]$ jps
3237 Jps
3163 DataNode

啓動報錯:若是啓動DataNode時報錯:Initialization failed for Block pool (Datanode Uuid unassigned)

是由於namenode和datanode的clusterID不一致致使datanode沒法啓動。刪除data、tmp、namenode 數據後,從新格式化便可。

[hadoop@hadoop-node3 hadoop]$rm -rf tmp
[hadoop@hadoop-node3 hadoop]$mkdir tmp

6.配置集羣羣起功能

6.1SSH無密登陸配置

在hadoop-node1生成公鑰是密鑰

[hadoop@hadoop-node1 hadoop]$ ssh-keygen -t rsa

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

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

[hadoop@hadoop-node1 .ssh]$ ssh-copy-id hadoop-node1
[hadoop@hadoop-node1 .ssh]$ ssh-copy-id hadoop-node2
[hadoop@hadoop-node1 .ssh]$ ssh-copy-id hadoop-node3

一樣的操做,須要在hadoop-node二、hadoop-node3機器上執行ssh免密設置。

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

6.2羣起集羣配置

配置slaves

[hadoop@hadoop-node1 hadoop]$ vim /opt/module/hadoop/hadoop-2.7.2/etc/hadoop/slaves

在該文件中增長以下內容:

hadoop-node1
hadoop-node2
hadoop-node3

注意:該文件中添加的內容結尾不容許有空格,文件中不容許有空行。

同步全部節點配置文件

[hadoop@hadoop-node1 hadoop]$ xsync slaves

6.3啓動集羣

若是集羣是第一次啓動,須要格式化NameNode(注意格式化以前,必定要先中止上次啓動的全部namenode和datanode進程,而後再刪除data和log數據)

[hadoop@hadoop-node1 hadoop-2.7.2]$ bin/hdfs namenode -format

啓動HDFS

[hadoop@hadoop-node1 hadoop-2.7.2]$ sbin/start-dfs.sh
[hadoop@hadoop-node1 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode

[hadoop@hadoop-node2 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps

[hadoop@hadoop-node3 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps

啓動YARN

[hadoop@hadoop-node2 hadoop-2.7.2]$ sbin/start-yarn.sh

注意:NameNode和ResourceManger若是不是同一臺機器,不能在NameNode上啓動 YARN,應該在ResouceManager所在的機器上啓動YARN。

Web端查看SecondaryNameNode
(a)瀏覽器中輸入:http://hadoop-node3:50090/status.html

7.集羣測試

7.1上傳文件到集羣

[hadoop@hadoop-node1 data]$ hdfs dfs -mkdir -p /user/lyt/input
[hadoop@hadoop-node1 data]$ hdfs dfs -put wcinput/wc.input /user/lyt/input

7.2查看文件上傳

8.集羣啓動/中止方式總結

8.1各個服務組件逐一啓動/中止

(1)分別啓動/中止HDFS組件
        hadoop-daemon.sh  start / stop  namenode / datanode / secondarynamenode
    (2)啓動/中止YARN
        yarn-daemon.sh  start / stop  resourcemanager / nodemanager

8.2各個模塊分開啓動/中止(配置ssh是前提)經常使用

(1)總體啓動/中止HDFS
        start-dfs.sh   /  stop-dfs.sh
    (2)總體啓動/中止YARN
        start-yarn.sh  /  stop-yarn.sh

9.集羣時間同步

9.1時間服務器配置(必須root用戶)

(1)檢查ntp是否安裝

[root@hadoop-node1 hadoop]# 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

若是沒有安裝,執行yum安裝便可

[root@hadoop-node1 hadoop]#yum -y install ntp
[root@hadoop-node1 hadoop]#systemctl enable ntpd
[root@hadoop-node1 hadoop]#systemctl start ntpd

(2)修改ntp配置文件

[root@hadoop-node1 hadoop]# vim /etc/ntp.conf

修改內容以下
a)修改1

取消註釋,大約在17行(受權192.168.126.0-192.168.126.255網段上的全部機器能夠從這臺機器上查詢和同步時間)

#restrict 192.168.126.0 mask 255.255.255.0 nomodify notrap爲
restrict 192.168.126.0 mask 255.255.255.0 nomodify notrap

b)修改2

註釋掉配置,大約在21-24行(集羣在局域網中,不使用其餘互聯網上的時間)

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@hadoop-node1 hadoop]# vim /etc/sysconfig/ntpd

增長內容以下(讓硬件時間與系統時間一塊兒同步)

SYNC_HWCLOCK=yes

(4)從新啓動ntpd服務

[root@hadoop-node1 hadoop]# service ntpd status
ntpd 已停
[root@hadoop-node1 hadoop]# service ntpd start
正在啓動 ntpd:                                            [肯定]

(5)設置ntpd服務開機啓動

[root@hadoop-node1 hadoop]# chkconfig ntpd on

9.2其餘機器配置(必須root用戶)

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

[root@hadoop-node2 hadoop]# crontab -e

編寫定時任務以下:

*/10 * * * * /usr/sbin/ntpdate hadoop-node1

(2)修改任意機器時間

[root@hadoop-node2 hadoop]# date -s "2019-9-17 11:11:11"

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

[root@hadoop-node2 hadoop]# date

說明:測試的時候能夠將10分鐘調整爲1分鐘,節省時間。

相關文章
相關標籤/搜索