centOS 7-Hadoop3.3.0完全分散式部署

吳帥氣 發表於 2021-06-07
Hadoop CentOS

本文內容不乏對各大佬的案例借鑑,侵刪。

本次實驗用到的有虛擬機器,Xshell,Hadoop壓縮包和jdk壓縮包

  hadoop111A:192.168.241.111 hadoop222B:192.168.241.112 hadoop333C:192.168.241.113
HDFS

NameNode

DataNode

DataNode

secondaryNameNode

DataNode

YARN NodeManager

ResourceManager

NodeManager

NodeManager

我這邊用的三臺虛擬機器和對應的IP是:

hadoop111A  192.168.241.111

hadoop222B  192.168.241.112

hadoop333C  192.168.241.113

 

先在虛擬機器裡面安裝好一個centOS 7,然後把靜態IP配置好

先進入 /etc/sysconfig/network-scripts 裡面有個名為 ifcfg-ens33 的檔案,修改這個檔案。

cd /etc/sysconfig/network-scripts
vim ifcfg-ens33

修改這些配置的時候 會由於許可權不夠,會報錯已儲存但未修改,我是直接轉換成root使用者進行修改的,這樣一來比較方便。輸入命令:su  轉換成root使用者

把裡面沒用的內容刪掉,保留有用的,我修改的內容是這樣的;複製貼上的時候記得按 i 轉為插入模式

DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.241.111
PREFIX=24
GATEWAY=192.168.241.2
DNS1=192.168.241.2
DNS2=8.8.8.8

centOS 7-Hadoop3.3.0完全分散式部署

然後重啟網路管理

service NetworkManager restart

現在就可以看看你的IP發生的變化,然後ping一下百度,看看是否能建立資料傳輸。

現在可以通過xshell連結linux了,接著就是修改主機名

vim /etc/hostname

hadoop111A 就是我這臺虛擬機器的主機名

centOS 7-Hadoop3.3.0完全分散式部署

這裡我們可以先把對映寫好,預先寫入你另外兩臺虛擬機器的主機名和IP

vim /etc/hosts

centOS 7-Hadoop3.3.0完全分散式部署

然後就是安裝Hadoop和jdk,這兩個軟體包可以去相應的官網下載,值得注意的是,jdk我們要下載1.8版本的,我先前安裝的16.0版本的,出現了問題,可能是不相容吧,我看很多大佬安裝的都是1.8版本的,所以我下載了1.8版本安裝之後,就沒有出現問題了。

我們在Windows上下載好這些軟體包之後,可以通過xshell這一些工具傳進來,我圖方便,就直接拖進虛擬機器,然後找到軟體包在linux裡的位置,進行移動和解壓。

安裝jdk,因為sentos7自帶有jdk,所以我們要將其刪除,先檢視系統中的jdk

rpm -qa | grep java

這裡我們可以看到有1.8和1.7的jdk,我們只需要刪除jdk

rpm -e --nodeps jdk名字

軟體包的名字可以在上面複製貼上,執行 rpm -qa | grep java 檢視是否刪除完畢

現在就是解壓jdk了,路徑可以自己選,我這邊是安裝在 /usr/java 裡面  用命令解壓檔案

tar -zxvf jdk軟體包名

centOS 7-Hadoop3.3.0完全分散式部署

給jdk新增環境變數,新增在最後面

vim /etc/profile
##JAVA_HOME
JAVA_HOME=/usr/java/jdk1.8.0_291
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib.dt.jar:$JAVA_HOME/lib/tools.jar:$JER_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

應用profile配置

source /etc/profile

檢視jkd

java -version

顯示有版本號就說明安裝成功了

centOS 7-Hadoop3.3.0完全分散式部署

按Hadoop和定義配置檔案

和安裝jdk一樣,先把Hadoop壓縮包解壓

centOS 7-Hadoop3.3.0完全分散式部署

新增環境變數

vim /etc/profile
##HADOOP_HOME
export HADOOP_HOME=/opt/soft/hadoop/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

進入hadoop的etc裡面修改相應的配置檔案

centOS 7-Hadoop3.3.0完全分散式部署

配置 core-site.xml

<!--指定namenode的地址-->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop111A:8020</value>
</property>
<!-- 指定 Hadoop 執行時產生檔案的儲存目錄 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/soft/hadoop/hadoop-3.3.0/data</value>
</property>

centOS 7-Hadoop3.3.0完全分散式部署

配置 hadoop-env.sh 如果這個不新增,那麼hadoop執行的時候就會報錯說找不到jdk的位置

export JAVA_HOME=/usr/java/jdk1.8.0_291

centOS 7-Hadoop3.3.0完全分散式部署

配置 hdfs-site.xml

<!--nn web端訪問地址-->
<property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop111A:9870</value>
</property>
<!-- 2nn web端訪問地址 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop333C:9868</value>
</property>

centOS 7-Hadoop3.3.0完全分散式部署

配置 yarn-site.xml

<!-- 指定 MR 走shuffle -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop222B</value>
</property>

centOS 7-Hadoop3.3.0完全分散式部署

配置 mapred-site.xml

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

centOS 7-Hadoop3.3.0完全分散式部署

配置 workers

hadoop111A
hadoop222B
hadoop333C

centOS 7-Hadoop3.3.0完全分散式部署

配置完畢後關機,在虛擬機器裡面完全克隆兩臺虛擬機器,並將其IP和主機名修改好

完事後,進行免密登陸設定,執行指令建立免密登陸金鑰

ssh-keygen -t rsa

一路回車下去後,私鑰和公鑰就在 /root/.ssh 裡面建立了

進入這個資料夾就可以看到了

cd /root/.ssh

建立一個名為 authorized_keys 的檔案

touch authorized_keys

然後將公鑰寫進這個檔案,三臺主機都要進行這樣的操作

cat id_rsa.pub >> authorized_keys

期間如果寫入不了,那多半是許可權不夠,這時候我們可以修改下他們的許可權

chmod 600 authorized_keys
chmod 700 /root/.ssh

然後用vim開啟 authorized_keys 就可以看到金鑰了,我就不傳來傳去了,直接簡單粗暴,直接複製貼上了

centOS 7-Hadoop3.3.0完全分散式部署

然後用ssh連結試試,我這邊連結hadoop222B

centOS 7-Hadoop3.3.0完全分散式部署

這樣就是連結上了,如個報錯說找不到,那就是前面對映沒設定好,如果報錯無法連結,那就修改下面的配置

修改 /etc/ssh/ssh_config 檔案的內容

StrictHostKeyChecking ask開啟註釋修改為StrictHostKeyChecking no即可

vim /etc/ssh/ssh_config

centOS 7-Hadoop3.3.0完全分散式部署

現在就可以格式化hadoop了

期間沒有任何報錯,那就是成功了,如果報錯意外終止,那就是配置檔案裡面的標籤沒打好

centOS 7-Hadoop3.3.0完全分散式部署

在 hadoop/sbin 裡面可以看到這些檔案

這裡我們先啟動start-dfs.sh

centOS 7-Hadoop3.3.0完全分散式部署

jps檢視一下

hadoop111A啟動的是 NameNode 和 DataNode

centOS 7-Hadoop3.3.0完全分散式部署

hadoop222B啟動的是 DataNode

centOS 7-Hadoop3.3.0完全分散式部署

hadoop333C啟動的是 DataNode 和 SecondaryNameNode

centOS 7-Hadoop3.3.0完全分散式部署

 

這時候我們就可以開啟瀏覽器訪問hadoop111A:9870

centOS 7-Hadoop3.3.0完全分散式部署

 

 

 

 centOS 7-Hadoop3.3.0完全分散式部署

 

 

 然後在hadoop222B中啟動

jps檢視

對照上面表格的啟動項,是一樣的就對了,必須要和部署的一摸一樣

然後在瀏覽器裡面輸入hadoop222B:8088

centOS 7-Hadoop3.3.0完全分散式部署

 

 

 這樣就算是部署好了

如果期間 ResourceManager 啟動不了

啟動start-dfs.sh報錯Attempting to operate on hdfs namenode as root
在/hadoop/sbin路徑下:
將start-dfs.sh,stop-dfs.sh兩個檔案頂部新增以下引數

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

還有,start-yarn.sh,stop-yarn.sh頂部也需新增以下:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root