集群規(guī)劃
主機(jī)名 | Hadoop10 | Hadoop11 | Hadoop12 |
---|---|---|---|
網(wǎng)絡(luò) | 192.168.10.10 | 192.168.10.11 | 192.168.10.12 |
用戶(hù) | hadoop root |
hadoop root |
hadoop root |
HDFS | NameNode DateNode |
DateNode | Secondary NameNode DataNode |
YARN | NodeManager | NodeManager ResourceManager |
NodeManager |
1.CentOS 7虛擬機(jī)操作系統(tǒng)
安裝虛擬機(jī)系統(tǒng),省略
2.系統(tǒng)的基本配置
1)網(wǎng)絡(luò)配置
第一步:網(wǎng)卡配置
使用 vi
編輯器編輯系統(tǒng)的網(wǎng)卡配置文件,配置以下項(xiàng)目
- 網(wǎng)卡的開(kāi)機(jī)自啟
- 使用靜態(tài)IP
- 網(wǎng)關(guān)和DNS
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改內(nèi)容如下:
ONBOOT="yes"
BOOTPROTO="static"
添加以下內(nèi)容:
IPADDR=192.168.10.10
GATEWAY=192.168.10.2
DNS1=192.168.10.2
我們目前操作的機(jī)器是hadoop10,為其配置的IP地址是
192.168.10.10
,這需要和VMware軟件的網(wǎng)卡配置保存IP域一樣
Hosts
主機(jī)映射文件配置
根據(jù)我們的集群規(guī)劃,我們得知有3臺(tái)主機(jī),所以我們也知道3臺(tái)主機(jī)的IP,那么可以事先將映射文件配置好
vi /etc/hosts
添加寫(xiě)入以下內(nèi)容
192.168.10.10 hadoop10
192.168.10.11 hadoop11
192.168.10.12 hadoop12
重啟網(wǎng)卡使配置生效
systemctl restart network
重啟完之后可以檢查
ip addr
觀察對(duì)應(yīng)的網(wǎng)卡IP是否正常
配置完網(wǎng)卡之后,就可以使用xshell等ssh工具進(jìn)行連接操作,之后的操作全部都是遠(yuǎn)程完成
Windows對(duì)虛擬機(jī)SSH遠(yuǎn)程連接需要注意
首先網(wǎng)卡配置完成后就可以SSH連接了,使用IP地址即可,但是為保證連接的方便,一般我們?cè)赪indows中也是使用一個(gè)主機(jī)名來(lái)連接服務(wù)器,但是Windows并不認(rèn)識(shí)我們的主機(jī),所以同樣需要配置Windows的hosts
映射文件
修改文件C:\Windows\System32\drivers\etc
打開(kāi)hosts
文件,追加以下內(nèi)容
192.168.10.10 hadoop10
192.168.10.11 hadoop11
192.168.10.12 hadoop12
VMware網(wǎng)卡配置
我們使用的是nat模式網(wǎng)卡,需要保證該網(wǎng)卡如下圖所示
2)用戶(hù)配置
新建用戶(hù)
目前我們只有root用戶(hù),必須知道的原則是:root用戶(hù)是一個(gè)非常敏感的用戶(hù),在對(duì)服務(wù)器進(jìn)行操作的時(shí)候,非迫不得已,不得使用root用戶(hù)
根據(jù)集群規(guī)劃,創(chuàng)建新的用戶(hù),用戶(hù)名為:hadoop
useradd hadoop
為其設(shè)置密碼
passwd hadoop
輸入需要的密碼,兩次,可以忽略警告
為新用戶(hù)賦予sudo
加權(quán)
為hadoop
用戶(hù)配置sudo
執(zhí)行權(quán)限,方便使用
vi /etc/sudoers
修改/etc/sudoers文件,在%wheel
這行下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
hadoop ALL=(ALL) NOPASSWD:ALL
追加的是這一行:
hadoop ALL=(ALL) NOPASSWD:ALL
注意:hadoop這一行不要直接放到root行下面,因?yàn)樗杏脩?hù)都屬于wheel組,你先配置了hadoop具有免密功能,但是程序執(zhí)行到%wheel行時(shí),該功能又被覆蓋回需要密碼.所以hadoop要放到%wheel這行下面.
按ESC鍵,shift+:鍵,輸入wq!強(qiáng)制保存
SSH連接須知
我們一開(kāi)始使用的是root用戶(hù)操作,在此之后,我們連接將只使用hadoop用戶(hù)
關(guān)閉防火墻
注意:這只是為了我們學(xué)習(xí)方便,在實(shí)際的工作中絕對(duì)不可以,只能在防火墻配置需要放行的端口,而不能自接關(guān)閉防火墻
1).關(guān)閉防火墻的開(kāi)機(jī)自啟(為了以后不用做這一步)
sudo systemctl disable firewalld
2).關(guān)閉當(dāng)前防火墻
sudo systemctl stop firewalld.service
3.配置JDK
1).準(zhǔn)備兩個(gè)文件夾
sudo mkdir /opt/software
sudo mkdir /opt/module
-
software
文件夾用作我們資料的上傳 -
module
我們一些軟件將安裝在此目錄
/opt
目錄只有root用戶(hù)可以操作,所以我們上面創(chuàng)建文件夾使用了sudo
加權(quán)
2).將文件夾的所有者賦予hadoop
用戶(hù)
sudo chown hadoop -R 777 /opt/software
sudo chown hadoop -R 777 /opt/module
3).上傳JDK安裝文件至/opt/module
目錄
4).解壓JDK至/opt/module
目錄
tar -zxvf /opt/software/jdk-8u181-linux-x64.tar.gz -C /opt/module/
5).檢查是否解壓成功
注意,默認(rèn)此時(shí)我們的jdk路徑是:
/opt/module/jdk1.5.0_181
,這在配置環(huán)境變量是需要用到
6).配置jdk的環(huán)境變量
? 新建我們自己的環(huán)境變量文件
sudo vi /etc/profile.d/my_env.sh
? 寫(xiě)入以下內(nèi)容
export JAVA_HOME=/opt/module/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
? 刷新環(huán)境變量
source /etc/profile
7).檢查
[hadoop@hadoop101 opt]$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
你可以將環(huán)境變量文件所有權(quán)賦予
hadoop
用戶(hù),這樣的話以后更方便:
sudo chown hadoop -R /etc/profile.d/my_env.sh
4.安裝配置Hadoop
1).解壓hadoop壓縮包至/opt/module
tar -zxvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module
2).配置Hadoop環(huán)境變量
編輯my_env.sh
文件,追加寫(xiě)入以下內(nèi)容:
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:HADOOP_HOME/bin
export PATH=$PATH:HADOOP_HOME/sbin
3).刷新環(huán)境變量
4).檢查
5.配置Hadoop分布式集群
Hadoop的配置文件分為兩類(lèi)
默認(rèn)配置文件
自定義配置文件
默認(rèn)的配置文件一般情況下是不能動(dòng)的,里面存在幾千行的配置,絕大多數(shù)的配置是默認(rèn)即可的
一般情況下,用戶(hù)對(duì)hadoop的配置修改都是對(duì)自定義配置文件進(jìn)行操作,自定義配置文件的優(yōu)先級(jí)更高,也就是說(shuō),自定義配置會(huì)覆蓋默認(rèn)配置
所以,默認(rèn)的配置文件是兜底,你只需要在自定義配置文件中覆蓋你需要修改的部分
自定義配置文件的作用就是覆蓋默認(rèn)配置文件的配置項(xiàng)
自定義配置文件在hadoop的安裝目錄下的./etc/hadoop
中:
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
這4個(gè)配置文件按照名稱(chēng)就告知了里面應(yīng)該寫(xiě)何種配置,根據(jù)默認(rèn)配置文件的理解,這4個(gè)自定義配置文件是空的
4個(gè)自定義配置文件一般情況下我們按照配置文件的文件名對(duì)里面需要修改的配置項(xiàng)分類(lèi),但是!這4個(gè)配置文件沒(méi)有區(qū)別,也就是說(shuō),你把所有的配置內(nèi)容寫(xiě)在其中一個(gè)配置文件中同樣可以
配置集群
目前我們只有一臺(tái)主機(jī)hadoop10
,其他的兩臺(tái)還沒(méi)有,但是這并不影響我們操作,我們就配置這一臺(tái),然后克隆出另外兩臺(tái)因?yàn)閷?duì)于Hadoop的配置來(lái)說(shuō),集群所有的機(jī)器都是一致的
1).core-site.xml
配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop10:8020</value>
</property>
<!-- 指定hadoop數(shù)據(jù)的存儲(chǔ)目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS網(wǎng)頁(yè)登錄使用的靜態(tài)用戶(hù)為atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>jose</value>
</property>
</configuration>
2).hdfs-site.xml
配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- nn web端訪問(wèn)地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop10:9870</value>
</property>
<!-- 2nn web端訪問(wèn)地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop12:9868</value>
</property>
<property>
<!-- namenode 數(shù)據(jù)存放地址-->
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-3.1.3/name</value>
</property>
<!-- datanode 數(shù)據(jù)存放地址-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
</configuration>
3).yarn-site.xml
配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop11</value>
</property>
<!-- 環(huán)境變量的繼承添加Maperd環(huán)境變量的繼承(因?yàn)閚ode節(jié)點(diǎn)上執(zhí)行任務(wù)會(huì)創(chuàng)建容器,所以繼承宿主機(jī)的環(huán)境變量配置) -->
<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>
<!--運(yùn)行所需要的服務(wù),如果運(yùn)行jar包沒(méi)有報(bào)連接失敗可以不用加-->
<property>
<name>yarn.application.classpath</name>
<value>/opt/module/hadoop/etc/hadoop:/opt/module/hadoop/share/hadoop/common/lib/*:/opt/module/hadoop/share/hadoop/common/*:/opt/module/hadoop/share/hadoop/hdfs:/opt/module/hadoop/share/hadoop/hdfs/lib/*:/opt/module/hadoop/share/hadoop/hdfs/*:/opt/module/hadoop/share/hadoop/mapreduce/lib/*:/opt/module/hadoop/share/hadoop/mapreduce/*:/opt/module/hadoop/share/hadoop/yarn:/opt/module/hadoop/share/hadoop/yarn/lib/*:/opt/module/hadoop/share/hadoop/yarn/*</value>
</property>
<!-- Site specific YARN configuration properties -->
</configuration>
4).mapred-site.xml
配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 指定MapReduce程序運(yùn)行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5).#### works
配置文件
存在路徑同樣是在./etc/hadoop
中,該配置文件描述了集群要哪些機(jī)器
打開(kāi)此文件
該文件內(nèi)容如下:
hadoop10
hadoop11
hadoop12
該文件不允許存在任何空格和空行
6).配置Hadoop用戶(hù)
環(huán)境變量
編輯my_env.sh
文件,追加寫(xiě)入以下內(nèi)容:
# USER_PRO
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop
刷新環(huán)境變量
檢查
6.后續(xù)集群的文件分發(fā)準(zhǔn)備
因?yàn)樵谥蟮募褐?多臺(tái)機(jī)器經(jīng)常需要保證某些文件的內(nèi)容一致,那么就需要我們有一個(gè)文件同步的方案,在這里我們選擇rsync
做文件同步,相比scp
更為高效
rsync
是一個(gè)第三方軟件,需要安裝,我們選擇yum
來(lái)安裝軟件
配置yum
配置yum的鏡像為清華源
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo
生成新的緩存
yum makecache
安裝rsync
安裝命令:
sudo yum install rsync -y
如果你已經(jīng)克隆了機(jī)器,那么所有機(jī)器都得做
創(chuàng)建分發(fā)腳本
rsync
可以做到機(jī)器
1).在/home/hadoop/目錄下創(chuàng)建bin
目錄
mkdir /home/hadoop/bin
2).在該目錄下創(chuàng)建腳本文件:
touch /home/hadoop/bin/xsync
3).在該文件中寫(xiě)入以下內(nèi)容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo Error:無(wú)效參數(shù)
exit;
fi
for host in hadoop10 hadoop11 hadoop12
do
echo ===========正在傳輸:$host=============
for file in $@
do
if [ -e $file ]
then
pdir=$(cd -P $(dirname $file);pwd)
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo Error:$file 不存在!
fi
done
done
4).為該腳本文件賦予可執(zhí)行的權(quán)限:
chmod +x /home/hadoop/bin/xsync
如果腳本文件是你在Windows中編輯的,那么會(huì)存在一個(gè)問(wèn)題,Windows的換行是
\r\n
,而Linux沒(méi)有\r
換行的概念,那么該腳本運(yùn)行時(shí)可能報(bào)錯(cuò),使用以下命令解決
sed 's/\r//' -i /home/hadoop/bin/xsync
7.克隆集群機(jī)器
我們目前只有一臺(tái)hadoop10
機(jī)器,而且配置都完成了,那么我們需要以此為母版克隆出hadoop11
和hadoop12
1).克隆主機(jī)
2).修改克隆出來(lái)的機(jī)器的ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改內(nèi)容如下:
hadoop11:
將ifcfg-ens33文件內(nèi)容IPADDR=192.168.10.10
修改為:
IPADDR=192.168.10.11
hadoop12:
將ifcfg-ens33文件內(nèi)容IPADDR=192.168.10.10
修改為:
IPADDR=192.168.10.12
3).修改克隆出來(lái)的機(jī)器的主機(jī)名
vi /etc/hostname
修改內(nèi)容如下:
hadoop11:
將hostname文件內(nèi)容修改為:
hadoop11
hadoop12:
將hostname文件內(nèi)容修改為:
hadoop12
因?yàn)榭寺】赡軒?lái)Mac地址的沖突而導(dǎo)致沒(méi)有ip的情況
以下兩種方式解決問(wèn)題:
1.重新生成Mac地址
2.通過(guò)關(guān)閉網(wǎng)絡(luò)管理來(lái)實(shí)現(xiàn)
? 1).關(guān)閉
systemctl stop Network
systemctl disable NetworkManager
? 2).更新網(wǎng)絡(luò)配置
service network restart
8.集群系統(tǒng)的免密登錄
以hadoop10
機(jī)器為例:
1).生成密鑰
ssh-keygen -t rsa
直接多次回車(chē)即可
2).分發(fā)密鑰(簽發(fā))
ssh-copy-id hadoop10
ssh-copy-id hadoop11
ssh-copy-id hadoop12
包括自己本身也要簽發(fā)
簽發(fā)時(shí)需要對(duì)方的密碼和用戶(hù)名,其實(shí)完整的命令是
ssh-copy-id hadoop@hadoop102
因?yàn)槟愫灠l(fā)的時(shí)候使用的是
hadoop
用戶(hù)名,而我們的三臺(tái)機(jī)器都有相同的hadoop用戶(hù),使用用戶(hù)名在上面的筆記中就省略了
以上操作三臺(tái)機(jī)器都要操作
9.hadoop集群初始化
在hadoop101
執(zhí)行
hdfs namenode -format
如果初始化失敗,或者在后續(xù)中jps啟動(dòng)失敗了,那么如何初始化
1).檢查xml
配置
2).刪除所有生成文件
rm -rf /tmp/* /opt/module/hadoop-3.1.3/data /opt/module/hadoop-3.1.3/logs
該命令必須在所有機(jī)器上執(zhí)行一遍
3).重新初始化
啟動(dòng)hdfs命令(hadoop10)
start-dfs.sh
啟動(dòng)yarn命令(hadoop12)
start-yarn.sh
4).查看進(jìn)程
jps
hadoop10進(jìn)程如下:
71600 Jps
71549 NodeManager
70863 DataNode
70782 NameNode
hadoop11進(jìn)程如下:
71600 Jps
71195 ResourceManager
71549 NodeManager
70863 DataNode
hadoop12進(jìn)程如下:
71600 Jps
71019 SecondaryNameNode
71549 NodeManager
70863 DataNode
5).訪問(wèn)管理頁(yè)面
Web端查看HDFS的NameNode
在瀏覽器輸入:
http://第一臺(tái)主機(jī)名或IP:9870
如:http://hadoop10:9870
Web端查看YARN的ResourceManager
在瀏覽器輸入:
http://第二臺(tái)主機(jī)名或IP:8088
如:http://hadoop11:8088
10.MapReduce 單詞計(jì)數(shù)
先將所要計(jì)算的文件上傳到 Hadoop
中
hadoop dfs -put /my.txt
計(jì)算單詞
hadoop jar /opt/module/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /opt/my.txt /out
查看文件
hdfs dfs -cat /out/part-r-00000
如果出現(xiàn)org.apache.hadoop.dfs.SafeModeException: Cannot delete/user/hadoop/input. Name node is in safe mode.
則是hadoop開(kāi)啟了安全模式,需要關(guān)閉,用以下語(yǔ)句(退出安全模式):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-477362.html
hadoop dfsadmin -safemode leave
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-477362.html
到了這里,關(guān)于Hadoop的完全分布式搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!