Hadoop3.x完全分散式搭建(詳細)
環境準備
- vm虛擬機(自行安裝Centos7系統)
- hadoop3.x安裝包(linux版本)
- java1.8安裝包(linux版本)
為了能夠按照教程順利操作,需要注意幾點細節
- 不要不看文字直接複製粘貼
- 操作命令的用戶很重要,否則後續會引發關於許可權的問題
- ftp 與 終端工具需要自己操作使用本教程不涵蓋操作,如有需要,自行百度,本教程均使用終端shell工具截圖,其性質與linux系統右鍵打開終端相同。
開始啦!
- 使用root用戶登錄,用一個單獨的用戶管理hadoop集群,所以要用管理員(root)用戶創建一個名字為hadoop的用戶。
[root@hadoop102 ~]# useradd hadoop
- 設置 hadoop 用戶的密碼
[root@hadoop102 ~]# passwd hadoop
- 給 hadoop 用戶提權,編輯如下路徑文件
[root@hadoop102 ~]# vim /etc/sudoers
將文件此處修改為這樣(在100行左右)

- 修改靜態IP
[root@hadoop102 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
靜態ip文件修改如下
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="385ea190-1b85-42cf-9df4-916f2dd86bc7"
DEVICE="ens33"
ONBOOT="yes"
#ip 寫自己設置的
IPADDR=192.168.127.112
#子網掩碼 固定的
NETMASK=255.255.255.0
#網關 就是將你ip最後一段改成1
GATEWAY=192.168.127.1
- 修改主機名
[root@hadoop102 ~]# vim /etc/hostname
文件內寫入自己的主機名字即可
- 修改主機域名映射
[root@hadoop102 ~]# vim /etc/hosts
hosts文件內容如下

-
關閉防火牆(運行b即可永久關閉)
-
一次性關閉 -- 重啟之後系統會默認打開防火牆
[root@hadoop102 ~]# systemctl stop firewalld -
永久關閉防火牆
[root@hadoop102 ~]# systemctl disable firewalld -
查看當前防火牆狀態
[root@hadoop102 ~]# systemctl status firewalld狀態截圖

-
-
重啟機器,生效所有配置,注意 下次登錄直接使用 hadoop 賬戶資訊登錄系統,這樣子直接創建目錄許可權就是屬於hadoop的
- 如果想要終端連接虛擬機,待重啟之後即可輸入ip與用戶資訊即可登錄終端。
[root@hadoop102 ~]# reboot -
創建javajdk 和 hadoop 安裝所需目錄
-
創建軟體安裝包存放目錄
- software目錄用於存放安裝包
- module目錄用於軟體的安裝目錄(或者叫解壓目錄)
[hadoop@hadoop102 /]$ sudo mkdir /opt/software [hadoop@hadoop102 /]$ sudo mkdir /opt/module -
賦予software目錄上傳許可權,可以看到下面的許可權已經允許外部讀取寫入
[root@hadoop102 opt]# chmod +777 /opt/software /opt/module [root@hadoop102 opt]# ll 總用量 12 drwxrwxrwx. 2 root root 4096 3月 9 21:56 module drwxr-xr-x. 2 root root 4096 10月 31 2018 rh drwxrwxrwx. 2 root root 4096 3月 9 21:56 software -
上傳hadoop和java安裝包(本操作不涵蓋,注意:使用任意的ftp工具登錄連接時候請使用 hadoop 用戶登錄操作)
-
解壓至module目錄
[hadoop@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C ../module/ [hadoop@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C ../module/
-
-
配置java 和 hadoop的環境變數
-
切換至root用戶作業系統文件,操作完成之後切換成hadoop用戶
[hadoop@hadoop102 software]$ su root -
使用root用戶修改環境變數文件,在文件末尾追加如下資訊,如果你的安裝路徑跟我不同這裡需要寫你自己的,跟著教程走且是同一個版本安裝包或者同一個安裝文件夾名字的不需要任何修改
#java export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin #hadoop3.1.3 export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin -
切換至hadoop用戶,並生效配置文件,查看效果
[hadoop@hadoop102 software]$ source /etc/profile -
自行運行如下命令進行環境測試,足夠自行不測試也可以的。
[hadoop@hadoop102 software]$ java [hadoop@hadoop102 software]$ javac [hadoop@hadoop102 software]$ java -version [hadoop@hadoop102 software]$ hadoop version
-
-
配置hadoop
-
編輯core-site.xml文件
[hadoop@hadoop102 /]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml<!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <!-- 指定hadoop數據的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> -
編輯hdfs-site.xml文件
[hadoop@hadoop102 /]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml<!-- nn web端訪問地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web端訪問地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property> -
編輯yarn-site.xml文件
[hadoop@hadoop102 /]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml<!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 環境變數的繼承 --> <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> -
編輯mapred-site.xml文件
[hadoop@hadoop102 /]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml<!-- 指定MapReduce程式運行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> -
編輯hadoop-env.sh文件
[hadoop@hadoop102 /]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/hadoop-env.sh- 文件末尾追加一行
export JAVA_HOME=/opt/module/jdk1.8.0_212 -
編輯workers文件
[hadoop@hadoop102 hadoop]$ vim workers- 寫入如下內容
hadoop102 hadoop103 hadoop104
-
-
到此步驟,關閉虛擬機,克隆兩台,請自行百度,待克隆完成之後,開啟兩個克隆的機器,不要通過終端連接,然後做下面操作,在vm中進行。
-
三台主機都使用root用戶登錄
-
修改克隆1機器的主機名
[root@hadoop102 hadoop]# vim /etc/hostname內容如下
hadoop103 -
修改克隆1的ip
[root@hadoop102 ~]# vim /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="385ea190-1b85-42cf-9df4-916f2dd86bc7" DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.127.113 NETMASK=255.255.255.0 GATEWAY=192.168.127.1 -
修改克隆2機器的主機名
[root@hadoop102 hadoop]# vim /etc/hostname內容如下
hadoop104 -
修改克隆2機器的ip
[root@hadoop102 ~]# vim /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="385ea190-1b85-42cf-9df4-916f2dd86bc7" DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.127.114 NETMASK=255.255.255.0 GATEWAY=192.168.127.1 -
重啟兩台克隆機器,使配置重新載入生效。
[root@hadoop102 ~]#reboot
-
-
-
配置免密登錄
-
hadoop102生成免密並發送給其餘兩個節點(hadoop102,hadoop103,hadoop104)
[hadoop@hadoop102 .ssh]$ ssh-keygen -t rsa [hadoop@hadoop104 .ssh]$ ssh-copy-id hadoop102 [hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop103 [hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop104 -
hadoop103生成免密並發送給其餘兩個節點(hadoop102,hadoop103,hadoop104)
[hadoop@hadoop103 .ssh]$ ssh-keygen -t rsa [hadoop@hadoop103 .ssh]$ ssh-copy-id hadoop102 [hadoop@hadoop104 .ssh]$ ssh-copy-id hadoop103 [hadoop@hadoop103 .ssh]$ ssh-copy-id hadoop104 -
hadoop104生成免密並發送給其餘兩個節點(hadoop102,hadoop104,hadoop103)
[hadoop@hadoop104 .ssh]$ ssh-keygen -t rsa [hadoop@hadoop104 .ssh]$ ssh-copy-id hadoop102 [hadoop@hadoop104 .ssh]$ ssh-copy-id hadoop103 [hadoop@hadoop104 .ssh]$ ssh-copy-id hadoop104
-
-
格式化(必須主節點操作,既hadoop102這個節點)
[hadoop@hadoop102 sbin]$ hdfs namenode -format -
然後可以通過如下文本查看對應的資訊
192.168.127.112:9870 --訪問hadoop集群前台頁面 192.168.127.113:8088 --訪問hadoop的所有應用頁面 還可以通過各個節點jps命令查看啟動的任務節點狀態。

