集群規劃
| 主機名 | Hadoop10 | Hadoop11 | Hadoop12 |
|---|---|---|---|
| 網路 | 192.168.10.10 | 192.168.10.11 | 192.168.10.12 |
| 用戶 | hadoop root |
hadoop root |
hadoop root |
| HDFS | NameNode DateNode |
DateNode | Secondary NameNode DataNode |
| YARN | NodeManager | NodeManager ResourceManager |
NodeManager |
1.CentOS 7虛擬機作業系統
安裝虛擬機系統,省略
2.系統的基本配置
1)網路配置
第一步:網卡配置
使用 vi編輯器編輯系統的網卡組態檔,配置以下專案
- 網卡的開機自啟
- 使用靜態IP
- 網關和DNS
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改內容如下:
ONBOOT="yes"
BOOTPROTO="static"
添加以下內容:
IPADDR=192.168.10.10
GATEWAY=192.168.10.2
DNS1=192.168.10.2
我們目前操作的機器是hadoop10,為其配置的IP地址是
192.168.10.10,這需要和VMware軟體的網卡配置保存IP域一樣
Hosts主機映射檔案配置
根據我們的集群規劃,我們得知有3臺主機,所以我們也知道3臺主機的IP,那么可以事先將映射檔案配置好
vi /etc/hosts
添加寫入以下內容
192.168.10.10 hadoop10
192.168.10.11 hadoop11
192.168.10.12 hadoop12
重啟網卡使配置生效
systemctl restart network
重啟完之后可以檢查
ip addr
觀察對應的網卡IP是否正常
配置完網卡之后,就可以使用xshell等ssh工具進行連接操作,之后的操作全部都是遠程完成
Windows對虛擬機SSH遠程連接需要注意
首先網卡配置完成后就可以SSH連接了,使用IP地址即可,但是為保證連接的方便,一般我們在Windows中也是使用一個主機名來連接服務器,但是Windows并不認識我們的主機,所以同樣需要配置Windows的hosts映射檔案
修改檔案C:\Windows\System32\drivers\etc
打開hosts檔案,追加以下內容
192.168.10.10 hadoop10
192.168.10.11 hadoop11
192.168.10.12 hadoop12
VMware網卡配置
我們使用的是nat模式網卡,需要保證該網卡如下圖所示

2)用戶配置
新建用戶
目前我們只有root用戶,必須知道的原則是:root用戶是一個非常敏感的用戶,在對服務器進行操作的時候,非迫不得已,不得使用root用戶
根據集群規劃,創建新的用戶,用戶名為:hadoop
useradd hadoop
為其設定密碼
passwd hadoop
輸入需要的密碼,兩次,可以忽略警告
為新用戶賦予sudo加權
為hadoop用戶配置sudo執行權限,方便使用
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行下面,因為所有用戶都屬于wheel組,你先配置了hadoop具有免密功能,但是程式執行到%wheel行時,該功能又被覆寫回需要密碼.所以hadoop要放到%wheel這行下面.
按ESC鍵,shift+:鍵,輸入wq!強制保存
SSH連接須知
我們一開始使用的是root用戶操作,在此之后,我們連接將只使用hadoop用戶
關閉防火墻
注意:這只是為了我們學習方便,在實際的作業中絕對不可以,只能在防火墻配置需要放行的埠,而不能自接關閉防火墻
1).關閉防火墻的開機自啟(為了以后不用做這一步)
sudo systemctl disable firewalld
2).關閉當前防火墻
sudo systemctl stop firewalld.service
3.配置JDK
1).準備兩個檔案夾
sudo mkdir /opt/software
sudo mkdir /opt/module
software檔案夾用作我們資料的上傳module我們一些軟體將安裝在此目錄
/opt目錄只有root用戶可以操作,所以我們上面創建檔案夾使用了sudo加權
2).將檔案夾的所有者賦予hadoop用戶
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).檢查是否解壓成功
注意,默認此時我們的jdk路徑是:
/opt/module/jdk1.5.0_181,這在配置環境變數是需要用到
6).配置jdk的環境變數
? 新建我們自己的環境變數檔案
sudo vi /etc/profile.d/my_env.sh
? 寫入以下內容
export JAVA_HOME=/opt/module/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
? 重繪環境變數
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)
你可以將環境變數檔案所有權賦予
hadoop用戶,這樣的話以后更方便:
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環境變數
編輯my_env.sh檔案,追加寫入以下內容:
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:HADOOP_HOME/bin
export PATH=$PATH:HADOOP_HOME/sbin
3).重繪環境變數
4).檢查
5.配置Hadoop分布式集群
Hadoop的組態檔分為兩類
默認組態檔
自定義組態檔
默認的組態檔一般情況下是不能動的,里面存在幾千行的配置,絕大多數的配置是默認即可的
一般情況下,用戶對hadoop的配置修改都是對自定義組態檔進行操作,自定義組態檔的優先級更高,也就是說,自定義配置會覆寫默認配置
所以,默認的組態檔是兜底,你只需要在自定義組態檔中覆寫你需要修改的部分
自定義組態檔的作用就是覆寫默認組態檔的配置項
自定義組態檔在hadoop的安裝目錄下的./etc/hadoop中:
core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml
這4個組態檔按照名稱就告知了里面應該寫何種配置,根據默認組態檔的理解,這4個自定義組態檔是空的
4個自定義組態檔一般情況下我們按照組態檔的檔案名對里面需要修改的配置項分類,但是!這4個組態檔沒有區別,也就是說,你把所有的配置內容寫在其中一個組態檔中同樣可以
配置集群
目前我們只有一臺主機hadoop10,其他的兩臺還沒有,但是這并不影響我們操作,我們就配置這一臺,然后克隆出另外兩臺因為對于Hadoop的配置來說,集群所有的機器都是一致的
1).core-site.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://www.cnblogs.com/ruo1101/p/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資料的存盤目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS網頁登錄使用的靜態用戶為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="https://www.cnblogs.com/ruo1101/p/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端訪問地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop10:9870</value>
</property>
<!-- 2nn web端訪問地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop12:9868</value>
</property>
<property>
<!-- namenode 資料存放地址-->
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-3.1.3/name</value>
</property>
<!-- datanode 資料存放地址-->
<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="https://www.cnblogs.com/ruo1101/p/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>
<!-- 環境變數的繼承添加Maperd環境變數的繼承(因為node節點上執行任務會創建容器,所以繼承宿主機的環境變數配置) -->
<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>
<!--運行所需要的服務,如果運行jar包沒有報連接失敗可以不用加-->
<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="https://www.cnblogs.com/ruo1101/p/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程式運行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5).#### works組態檔
存在路徑同樣是在./etc/hadoop中,該組態檔描述了集群要哪些機器
打開此檔案
該檔案內容如下:
hadoop10
hadoop11
hadoop12
該檔案不允許存在任何空格和空行
6).配置Hadoop用戶環境變數
編輯my_env.sh檔案,追加寫入以下內容:
# 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
重繪環境變數
檢查
6.后續集群的檔案分發準備
因為在之后的集群中,多臺機器經常需要保證某些檔案的內容一致,那么就需要我們有一個檔案同步的方案,在這里我們選擇rsync做檔案同步,相比scp更為高效
rsync是一個第三方軟體,需要安裝,我們選擇yum來安裝軟體
配置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
如果你已經克隆了機器,那么所有機器都得做
創建分發腳本
rsync可以做到機器
1).在/home/hadoop/目錄下創建bin目錄
mkdir /home/hadoop/bin
2).在該目錄下創建腳本檔案:
touch /home/hadoop/bin/xsync
3).在該檔案中寫入以下內容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo Error:無效引數
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).為該腳本檔案賦予可執行的權限:
chmod +x /home/hadoop/bin/xsync
如果腳本檔案是你在Windows中編輯的,那么會存在一個問題,Windows的換行是
\r\n,而Linux沒有\r換行的概念,那么該腳本運行時可能報錯,使用以下命令解決
sed 's/\r//' -i /home/hadoop/bin/xsync
7.克隆集群機器
我們目前只有一臺hadoop10機器,而且配置都完成了,那么我們需要以此為母版克隆出hadoop11和hadoop12
1).克隆主機
2).修改克隆出來的機器的ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改內容如下:
hadoop11:
將ifcfg-ens33檔案內容IPADDR=192.168.10.10
修改為:
IPADDR=192.168.10.11
hadoop12:
將ifcfg-ens33檔案內容IPADDR=192.168.10.10
修改為:
IPADDR=192.168.10.12
3).修改克隆出來的機器的主機名
vi /etc/hostname
修改內容如下:
hadoop11:
將hostname檔案內容修改為:
hadoop11
hadoop12:
將hostname檔案內容修改為:
hadoop12
因為克隆可能帶來Mac地址的沖突而導致沒有ip的情況
以下兩種方式解決問題:
1.重新生成Mac地址
2.通過關閉網路管理來實作
? 1).關閉
systemctl stop Network
systemctl disable NetworkManager
? 2).更新網路配置
service network restart
8.集群系統的免密登錄
以hadoop10機器為例:
1).生成密鑰
ssh-keygen -t rsa
直接多次回車即可
2).分發密鑰(簽發)
ssh-copy-id hadoop10
ssh-copy-id hadoop11
ssh-copy-id hadoop12
包括自己本身也要簽發
簽發時需要對方的密碼和用戶名,其實完整的命令是
ssh-copy-id hadoop@hadoop102因為你簽發的時候使用的是
hadoop用戶名,而我們的三臺機器都有相同的hadoop用戶,使用用戶名在上面的筆記中就省略了
以上操作三臺機器都要操作
9.hadoop集群初始化
在hadoop101執行
hdfs namenode -format
如果初始化失敗,或者在后續中jps啟動失敗了,那么如何初始化
1).檢查xml配置
2).洗掉所有生成檔案
rm -rf /tmp/* /opt/module/hadoop-3.1.3/data /opt/module/hadoop-3.1.3/logs
該命令必須在所有機器上執行一遍
3).重新初始化
啟動hdfs命令(hadoop10)
start-dfs.sh
啟動yarn命令(hadoop12)
start-yarn.sh
4).查看行程
jps
hadoop10行程如下:
71600 Jps
71549 NodeManager
70863 DataNode
70782 NameNodehadoop11行程如下:
71600 Jps
71195 ResourceManager
71549 NodeManager
70863 DataNodehadoop12行程如下:
71600 Jps
71019 SecondaryNameNode
71549 NodeManager
70863 DataNode
5).訪問管理頁面
Web端查看HDFS的NameNode
在瀏覽器輸入:
http://第一臺主機名或IP:9870
如:http://hadoop10:9870
Web端查看YARN的ResourceManager
在瀏覽器輸入:
http://第二臺主機名或IP:8088
如:http://hadoop11:8088
10.MapReduce 單詞計數
先將所要計算的檔案上傳到 Hadoop中
hadoop dfs -put /my.txt
計算單詞
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
如果出現org.apache.hadoop.dfs.SafeModeException: Cannot delete/user/hadoop/input. Name node is in safe mode.
則是hadoop開啟了安全模式,需要關閉,用以下陳述句(退出安全模式):
hadoop dfsadmin -safemode leave
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554824.html
標籤:大數據
上一篇:Oracle的PDB資料庫創建DIRECTORY時遇到ORA-65254
下一篇:返回列表
