20190627-hadoop完全分布式環(huán)境搭建

本文搭建了一個由三節(jié)點(diǎn)(master、slave1、slave2)構(gòu)成的Hadoop完全分布式集群(區(qū)別單節(jié)點(diǎn)偽分布式集群),并通過Hadoop分布式計(jì)算的一個示例測試集群的正確性。

本文集群三個節(jié)點(diǎn)基于三臺虛擬機(jī)進(jìn)行搭建,節(jié)點(diǎn)安裝的操作系統(tǒng)為Centos7(yum源),Hadoop版本選取為2.5.2。

1、基礎(chǔ)集群的搭建

2、集群網(wǎng)絡(luò)配置

????開啟虛擬機(jī),修改配置文件 輸入如下命令

ls ?-l ?/etc/sysconfig/network-scripts/ifcfg-ens33

vi /etc/sysconfig/network-scripts/ifcfg-ens33


TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=static

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=ens33

UUID=2fd4e3fc-509d-47b2-a833-e55f360a4661

DEVICE=ens33

ONBOOT=yes

IPADDR=192.168.4.110

NETMASK=255.255.255.0

GATEWAY=192.168.4.100

DNS1=8.8.8.8

DNS2=8.8.8.4


需要修改的地方有:

BOOTPROTO=static#dhcp改為static(修改)

ONBOOT=yes#開機(jī)啟用本配置,一般在最后一行(修改)

IPADDR=192.168.4.110 #靜態(tài)IP(增加)

GATEWAY=192.168.4.100 #默認(rèn)網(wǎng)關(guān),虛擬機(jī)安裝的話,通常是2,也就是VMnet8的網(wǎng)關(guān)設(shè)置(增加)

NETMASK=255.255.255.0#子網(wǎng)掩碼(增加)

#DNS1=8.8.8.8?

重啟網(wǎng)卡

service network restart

3、集群SSH免密登陸設(shè)置

3.1  創(chuàng)建hadoop用戶

為三個節(jié)點(diǎn)分別創(chuàng)建相同的用戶hadoop,并在以后的操作均在此用戶下操作,操作如下:

#useradd -m hadoop

#passwd hadoop

為hadoop添加sudo權(quán)限,切換到root用戶

#visudo

在該行root ALL=(ALL) ALL下添加hadoop ALL=(ALL) ALL保存后退出,并切換回hadoop用戶

#su hadoop

注意事項(xiàng):三個節(jié)點(diǎn)的用戶名必須相同,不然以后會對后面ssh及hadoop集群搭建產(chǎn)生巨大影響

3.2  hosts文件設(shè)置

為了不直接使用IP,可以通過設(shè)置hosts文件達(dá)到ssh? slave1這樣的的效果(三個節(jié)點(diǎn)設(shè)置相同)

$sudo vim /etc/hosts

在文件尾部添加如下行,保存后退出:

192.168.4.110  master

192.168.4.120  slave1

192.168.4.130  slave2


#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1? ? ? ? localhost localhost.localdomain localhost6 localhost6.localdomain6

注意事項(xiàng):不要在127.0.0.1后面添加主機(jī)名,如果加了master,會造成后面hadoop的一個很坑的問題,在slave節(jié)點(diǎn)應(yīng)該解析出masterIP的時候解析出127.0.0.1,造成hadoop搭建完全正確,但是系統(tǒng)顯示可用節(jié)點(diǎn)一直為0。

3.3  hostname修改

centos7默認(rèn)的hostname是localhost,為了方便將每個節(jié)點(diǎn)hostname分別修改為master、slave1、slave2(以下以master節(jié)點(diǎn)為例)。

$sudo hostnamectl set-hostname master

重啟terminal,然后查看:$hostname

3.3  ssh設(shè)置

設(shè)置master節(jié)點(diǎn)和兩個slave節(jié)點(diǎn)之間的雙向ssh免密通信,下面以master節(jié)點(diǎn)ssh免密登陸slave節(jié)點(diǎn)設(shè)置為例,進(jìn)行ssh設(shè)置介紹(以下操作均在master機(jī)器上操作):

[在master節(jié)點(diǎn)設(shè)置完后,登錄slave1、slave2到節(jié)點(diǎn)分別進(jìn)行設(shè)置]

首先生成master的rsa密鑰:$ssh-keygen -t rsa

設(shè)置全部采用默認(rèn)值進(jìn)行回車

將生成的rsa追加寫入授權(quán)文件:$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

給授權(quán)文件權(quán)限:$chmod 600? ~/.ssh/authorized_keys

進(jìn)行本機(jī)ssh測試:$ssh master正常免密登陸后所有的ssh第一次都需要密碼,此后都不需要密碼

將master上的authorized_keys傳到slave1

sudo scp ~/.ssh/id_rsa.pub hadoop@slave1:~/?

登陸到slave1操作:$ssh slave1輸入密碼登陸?

$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

修改authorized_keys權(quán)限:$chmod 600? ~/.ssh/authorized_keys

退出slave1:$exit

進(jìn)行免密ssh登陸測試:$ssh slave1

4、java安裝

目的:hadoop是基于Java的,所以要安裝配置Java環(huán)境(三個節(jié)點(diǎn)均需要操作,以下以master節(jié)點(diǎn)為例)

下載并安裝:$sudo yum install java-1.8.0-openjdk? java-1.8.0-openjdk-devel

驗(yàn)證是否安裝完成:$java -version

配置環(huán)境變量,修改~/.bashrc文件,添加行: export JAVA_HOME=/usr/lib/jvm/java-1.8.0

使環(huán)境變量生效:$source ~/.bashrc

5、Hadoop安裝配置

目的:獲得正確配置的完全分布式Hadoop集群(以下操作均在master主機(jī)下操作)

安裝前三臺節(jié)點(diǎn)都需要需要關(guān)閉防火墻和selinux

$sudo systemctl stop firewalld.service

$sudo systemctl disable firewalld.service

5.1  Hadoop安裝

首先在master節(jié)點(diǎn)進(jìn)行hadoop安裝配置,之后使用scp傳到slave1和slave2。

下載Hadoop二進(jìn)制源碼至master,下載地址,并將其解壓在~/ 主目錄下

$tar -xvf ~/hadoop-2.5.2.tar -C ~/

$mv ~/hadoop-2.5.2/* ~/hadoop/

5.2  Hadoop的master節(jié)點(diǎn)配置

配置hadoop的配置文件core-site.xml  hdfs-site.xml  mapred-site.xml  yarn-site.xml  slaves(都在~/hadoop/etc/hadoop文件夾下)

$cd ~/hadoop/etc/hadoop

$vim core-site.xml其他文件相同,以下為配置文件內(nèi)容:

1.core-site.xml

<configuration>

  <property>

    <name>fs.default.name</name>

    <value>hdfs://master:9000</value>

  </property>

  <property>

    <name>hadoop.tmp.dir</name>

    <value>file:/home/hadoop/hadoop/tmp</value>

  </property>

</configuration>

2.hdfs-site.xml

<configuration>

  <property>

    <name>dfs.replication</name>

    <value>2</value>

  </property>

  <property>

    <name>dfs.namenode.name.dir</name>

    <value>file:/home/hadoop/hadoop/tmp/dfs/name</value>

  </property>

  <property>

    <name>dfs.datanode.data.dir</name>

    <value>file:/home/hadoop/hadoop/tmp/dfs/data</value>

  </property>

  <property>

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

    <value>master:9001</value>

  </property>

</configuration>

3.mapred-site.xml

<configuration>

  <property>

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

    <value>yarn</value>

  </property>

</configuration>

4.yarn-site.xml

<configuration>

  <property>

    <name>yarn.resourcemanager.hostname</name>

    <value>master</value>

  </property>

  <property>

    <name>yarn.nodemanager.aux-services</name>

    <value>mapreduce_shuffle</value>

  </property>

  <property>

    <name>yarn.log-aggregation-enable</name>

    <value>true</value>

  </property>

  <property>

    <name>yarn.log-aggregation.retain-seconds</name>

    <value>604800</value>

  </property>

</configuration>

5.slaves

slave1

slave2

5.3  Hadoop的其他節(jié)點(diǎn)配置

此步驟的所有操作仍然是在master節(jié)點(diǎn)上操作,以master節(jié)點(diǎn)在slave1節(jié)點(diǎn)上配置為例

復(fù)制hadoop文件至slave1:$scp -r ~/hadoop hadoop@slave1:~/

5.4  Hadoop環(huán)境變量配置

配置環(huán)境變量,修改~/.bashrc文件,添加行(每個節(jié)點(diǎn)都需要此步操作,以master節(jié)點(diǎn)為例):

#hadoop environment vars

export HADOOP_HOME=/home/hadoop/hadoop

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

使環(huán)境變量生效:$source ~/.bashrc

6、Hadoop啟動

格式化namenode:$hadoop namenode -format

啟動hadoop:$start-all.sh

master節(jié)點(diǎn)查看啟動情況:$jps

19218 NameNode

21476 Jps

19563 ResourceManager

19420 SecondaryNameNode

slave1節(jié)點(diǎn)查看啟動情況:$jps

16949 Jps

15213 DataNode

15343 NodeManager

slave2節(jié)點(diǎn)查看啟動情況:$jps

16949 Jps

15213 DataNode

15343 NodeManager

Web瀏覽器輸入127.0.0.1:50070,查看管理界面


7、Hadoop集群測試

目的:驗(yàn)證當(dāng)前hadoop集群正確安裝配置

本次測試用例為利用MapReduce實(shí)現(xiàn)wordcount程序

生成文件testWordCount:$echo "My name is Xie PengCheng. This is a example program called WordCount, run by Xie PengCheng " >> testWordCount

創(chuàng)建hadoop文件夾wordCountInput:$hadoop fs -mkdir /wordCountInput

將文件testWordCount上傳至wordCountInput文件夾:$hadoop fs -put testWordCount /wordCountInput

執(zhí)行wordcount程序,并將結(jié)果放入wordCountOutput文件夾:$hadoop jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /wordCountInput /wordCountOutput

注意事項(xiàng):/wordCountOutput文件夾必須是沒有創(chuàng)建過的文件夾

查看生成文件夾下的文件:$hadoop fs -ls /wordCountOutput

在output/part-r-00000可以看到程序執(zhí)行結(jié)果:hadoop fs -cat /wordCountOutput/part-r-00000


My 1

PengCheng 1

PengCheng. 1

This 1

WordCount, 1

Xie 2

a 1

by 1

called 1

example 1

is 2

name 1

program 1

run 1



問題紀(jì)錄:

Centos7 開機(jī)黑屏-啟動命令行模式

1、在圖形界面下單擊鼠標(biāo)右鍵,選擇“Konsole”;

2、 獲取當(dāng)前系統(tǒng)啟動模式,輸入:systemctl get-default

3、查看配置文件, cat /etc/inittab

4、通過以上顯示,目前系統(tǒng)為命令行模式

更改模式命令:systemctl set-default graphical.target 由命令行模式更改為圖形界面模式

? ? ? ? ? ? ? ? ? ? ? ? systemctl set-default multi-user.target 由圖形界面模式更改為命令行模式

5、更改后驗(yàn)證是否正確 shutdown -r now

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容