本文通過4台Linux虛擬機,詳細介紹搭建4個節點的完全分布式Hadoop集群的方法,Linux系統版本是CentOS 7,Hadoop版本是3.2.0,JDK版本是1.8。
一、准備環境
1. 在VMware workstations上創建4個Linux虛擬機,並配置其靜態IP。
有關【創建Linux虛擬機及配置網絡】,請參考這里。
2. 配置DNS(每個節點)
編輯配置文件,添加主節點和從節點的映射關系。
#vim /etc/hosts
192.168.44.3 hadoop01 192.168.44.4 hadoop02 192.168.44.5 hadoop03 192.168.44.6 hadoop04
3. 關閉防火牆(每個節點)
#關閉服務
[root@hadoop01 opt]# systemctl stop firewalld
#關閉開機自啟動
[root@hadoop01 opt]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
4. 配置免密碼登錄
有關【配置免密碼登錄方法】,請參考這里。
5. 配置Java環境(每個節點)
有關【配置java環境方法】,請參考這里。
二、搭建Hadoop完全分布式集群
在各個節點上安裝與配置Hadoop的過程都基本相同,因此可以在每個節點上安裝好Hadoop后,在主節點master上進行統一配置,然后通過scp 命令將修改的配置文件拷貝到各個從節點上即可。
1. 下載Hadoop安裝包,解壓,配置Hadoop環境變量
有關【Hadoop安裝包下載方法】,請參考這里。
本文下載的Hadoop版本是3.2.0,指定一個目錄(比如:/opt),使用rz命令上傳Hadoop安裝包到Linux系統,解壓到指定目錄,配置Hadoop環境變量,並使其生效。實現命令如下:
#解壓到/opt目錄
[root@hadoop01 opt]# tar -zxvf hadoop-3.2.0.tar.gz
#鏈接/opt/hadoop-3.2.0到/opt/hadoop,方便后續配置
[root@hadoop01 opt] #ln -s hadoop-3.2.0 hadoop
#配置Hadoop環境變量
[root@hadoop01 opt]# vim /etc/profile #Hadoop export HADOOP_HOME=/opt/hadoop # 該目錄為解壓安裝目錄 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop #保存后,使profile生效 [root@hadoop01 opt]# source /etc/profile
2. 配置Hadoop環境腳本文件中的JAVA_HOME參數
#進入Hadoop安裝目錄下的etc/hadoop目錄
[root@hadoop01 ~]#cd /opt/hadoop/etc/hadoop #分別在hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中添加或修改如下參數:
[root@hadoop01 hadoop]# vim hadoop-env.sh
[root@hadoop01 hadoop]# vim mapred-env.sh
[root@hadoop01 hadoop]# vim yarn-env.sh
export JAVA_HOME="/opt/jdk" # 路徑為jdk安裝路徑
#驗證Hadoop配置是否生效
[root@hadoop01 hadoop]# hadoop version
Hadoop 3.2.0
Source code repository https://github.com/apache/hadoop.git -r e97acb3bd8f3befd27418996fa5d4b50bf2e17bf
Compiled by sunilg on 2019-01-08T06:08Z
Compiled with protoc 2.5.0
From source with checksum d3f0795ed0d9dc378e2c785d3668f39
This command was run using /opt/hadoop-3.2.0/share/hadoop/common/hadoop-common-3.2.0.jar
3. 修改Hadoop配置文件
Hadoop安裝目錄下的etc/hadoop目錄中,需修改core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、workers文件,根據實際情況修改配置信息。
(1)core-site.xml (配置Common組件屬性)
<configuration> <property> <!-- 配置hdfs地址 --> <name>fs.defaultFS</name> <value>hdfs://hadoop01:9000</value> </property> <property> <!-- 保存臨時文件目錄,需先在/opt/hadoop下創建tmp目錄 --> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/tmp</value> </property> </configuration>
更多配置信息,請參考core-site.xml。
(2)hdfs-site.xml (配置HDFS組件屬性)
<configuration> <property> <!-- 主節點地址 --> <name>dfs.namenode.http-address</name> <value>hadoop01:50070</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/opt/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/opt/hadoop/dfs/data</value> </property> <property> <!-- 備份數為默認值3 --> <name>dfs.replication</name> <value>3</value> </property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>配置為false后,可以允許不要檢查權限就生成dfs上的文件,方便倒是方便了,但是你需要防止誤刪除.</description>
</property>
</configuration>
更多參數配置,請參考hdfs-site.xml。
(3)mapred-site.xml (配置Map-Reduce組件屬性)
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> #設置MapReduce的運行平台為yarn </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop01:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop01:19888</value> </property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
更多配置信息,請參考mapred-site.xml。
(4)yarn-site.xml(配置資源調度屬性)
<configuration> <property> <name>yarn.resourcemanager.hostname</name> #指定yarn的ResourceManager管理界面的地址,不配的話,Active Node始終為0 <value>hadoop01</value> </property> <property> <name>yarn.nodemanager.aux-services</name> #reducer獲取數據的方式 <value>mapreduce_shuffle</value> </property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop01/192.168.44.5:8088</value>
<description>配置外網只需要替換外網ip為真實ip,否則默認為 localhost:8088</description>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
<description>每個節點可用內存,單位MB,默認8182MB</description>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>忽略虛擬內存的檢查,如果你是安裝在虛擬機上,這個配置很有用,配上去之后后續操作不容易出問題。</description>
</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>
</configuration>
更多配置信息,請參考yarn-site.xml。
(5)workers文件
#增加從節點地址(若配置了hosts,可直接使用主機名,亦可用IP地址)
[root@hadoop01 hadoop]# vim workers
hadoop02
hadoop03
hadoop04
4. 將配置好的文件夾拷貝到其他從節點
[root@hadoop01 hadoop]# scp -r /opt/hadoop-3.2.0 root@hadoop02:/opt/
[root@hadoop01 hadoop]# scp -r /opt/hadoop-3.2.0 root@hadoop03:/opt/
[root@hadoop01 hadoop]# scp -r /opt/hadoop-3.2.0 root@hadoop04:/opt/
[root@hadoop01 hadoop]# scp -r /opt/hadoop root@hadoop02:/opt/
[root@hadoop01 hadoop]# scp -r /opt/hadoop root@hadoop03:/opt/
[root@hadoop01 hadoop]# scp -r /opt/hadoop root@hadoop04:/opt/
5. 配置啟動腳本,添加HDFS和Yarn權限
添加HDFS權限:編輯如下腳本,在第二行空白位置添加HDFS權限 [root@hadoop01 sbin]# vim sbin/start-dfs.sh [root@hadoop01 sbin]# vim sbin/stop-dfs.sh HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
添加Yarn權限:編輯如下腳本,在第二行空白位置添加Yarn權限 [root@hadoop01 sbin]# vim sbin/start-yarn.sh [root@hadoop01 sbin]# vim sbin/stop-yarn.sh YARN_RESOURCEMANAGER_USER=root HDFS_DATANODE_SECURE_USER=yarn YARN_NODEMANAGER_USER=root
注意:若不添加上述權限,則會報錯:缺少用戶權限定義所致。
ERROR: Attempting to launch hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting launch. Starting datanodes ERROR: Attempting to launch hdfs datanode as root ERROR: but there is no HDFS_DATANODE_USER defined. Aborting launch. Starting secondary namenodes [localhost.localdomain] ERROR: Attempting to launch hdfs secondarynamenode as root ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting launch.
6. 初始化 & 啟動
#格式化
[root@hadoop01 hadoop-3.2.0]# bin/hdfs namenode -format #啟動(兩種方式均可啟動)
方法一:
[root@hadoop01 hadoop-3.2.0]# sbin/start-all.sh
方法二: [root@hadoop01 hadoop-3.2.0]# sbin/start-dfs.sh [root@hadoop01 hadoop-3.2.0]# sbin/start-yarn.sh
7. 驗證Hadoop啟動成功
#主節點
[root@hadoop01 sbin]# jps
11329 NameNode
11831 ResourceManager
11592 SecondaryNameNode
12186 Jps
#從節點 [root@hadoop02 hadoop]# jps 5152 SecondaryNameNode 5085 DataNode 5245 NodeManager 5357 Jps [root@hadoop03 opt]# jps 5080 DataNode 5178 NodeManager 5278 Jps [root@hadoop04 opt]# jps 5090 NodeManager 5190 Jps 4991 DataNode
8. Web端口訪問
注:先開放端口或直接關閉防火牆。
# 查看防火牆狀態
firewall-cmd --state # 臨時關閉防火牆 systemctl stop firewalld # 禁止開機啟動防火牆 systemctl disable firewalld
在瀏覽器輸入:http://hadoop01:8088打開ResourceManager頁面。
在瀏覽器輸入:http://hadoop01:50070打開Hadoop Namenode頁面。
注意:如果輸入主節點名稱無法打開Web頁面,則需要配置Windows上的hosts,路徑如下:
C:\Windows\System32\drivers\etc\hosts
192.168.44.3 hadooop01 192.168.44.4 hadooop02 192.168.44.5 hadooop03 192.168.44.6 hadooop04