本教程是基於CentOS-7-x86_64的Hadoop完全分布式搭建
1、搭建前的准備
1)CentOS-7虛擬機3台(hadoop1、hadoop2、hadoop3)
2)hadoop-3.3.0包
3)jdk-8u144-linux-x64包
2、整體部署
hadoop1 | hadoop2 | hadoop3 | |
HDFS | NameNode DataNode |
DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager |
NodeManager |
3、基本步驟
1)修改3台虛擬機的名稱
2)關閉、禁止開機自啟防火牆
3)配置靜態ip
4)修改/etc/hosts文件(hadoop1、hadoop2、hadoop3)
5)配置免密登錄(hadoop1、hadoop2、hadoop3)
6)安裝JDK及配置相應環境變量(hadoop1)
7)安裝Hadoop及配置相應環境變量(hadoop1)
8)修改配置文件(hadoop1)
9)拷貝(hadoop1-->hadoop2,hadoop1-->hadoop3)
10)遠程同步/etc/profile文件(hadoop1)
11)格式化NameNode
12)啟動和關閉Hadoop集群
13)通過瀏覽器訪問Hadoop集群
14)測試集群,上傳文件
4、詳細步驟操作
1)修改3台虛擬機的名稱
#hostname #查看主機名稱
hostnamectl set-hostname 主機名 #修改主機名稱
#reboot #重啟虛擬機
【注】:修改主機名稱后需重啟才能生效
2)關閉、禁止開機自啟防火牆
#systemctl status firewalld #查看防火牆狀態 #systemctl stop firewalld #關閉防火牆 #systemctl disable firewalld #關閉防火牆開機自啟 #vim /etc/selinux/config #修改selinux配置文件
SELINUX=enforcing 修改為 SELINUX=disabled
3)配置靜態ip
#cd /etc/sysconfig/network-scripts/ #vim ifcfg-ens33
BOOTPROTO=none 改為 BOOTPROTO=static
IPADDR也進行修改
【注】:因為3台虛擬機都是克隆完成的,ip地址一致,故在此對ip進行修改
4)修改/etc/hosts文件(hadoop1、hadoop2、hadoop3)
#vim /etc/hosts
192.168.150.14 hadoop1
192.168.150.15 hadoop2
192.168.150.16 hadoop3
#reboot
5)配置免密登錄(hadoop1、hadoop2、hadoop3)
#ssh-keygen -t rsa #生成ssh密鑰,不提示輸入密碼
三次回車鍵
#ssh-copy-id hadoop1 #ssh-copy-id hadoop2 #ssh-copy-id hadoop3 #將密鑰拷貝到各節點 #ssh hadoop1 #ssh hadoop2 #ssh hadoop3 #測試免密登錄
6)安裝JDK及配置相應環境變量(hadoop1)
#cd /opt/ #mkdir modules #創建modules文件夾 #mkdir tar_packages #創建tar_packages文件夾
#cd tar_packages/ #進入tar_packages文件夾
將hadoop-3.3.0.tar.gz和jdk-8u144-linux-x64.tar.gz包導入tar_packages文件夾中
導入方法較多,可用Xshell,可用命令wget xxxxx下載,亦可命令rz導入
#tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/modules/ #將壓縮包解壓到/opt/modules/文件夾下
#cd /opt/modules/jdk1.8.0_144/
#pwd
/opt/modules/jdk1.8.0_144 #復制此路徑
#vim /etc/profile/ #修改配置文件,加入環境變量
在文件末尾加入
#JAVA_HOME
export JAVA_HOME=/opt/modules/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#source /etc/profile #立即生效
#java
#javac
#javadoc #測試java環境
7)安裝Hadoop及配置相應環境變量(hadoop1)
#cd /opt/tar_packages/ #tar -zxvf hadoop-3.3.0.tar.gz -C /opt/modules #將壓縮包解壓到/opt/modules/文件夾下 #cd /opt/modules/hadoop-3.3.0 #pwd
/opt/modules/hadoop-3.3.0 #復制此路徑
#vim /etc/profile #修改配置文件,加入環境變量
在文件末尾加入
#HADOOP_HOME
export HADOOP_HOME=/opt/modules/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
#source /etc/profile #立即生效 #hadoop #測試hadoop
8)修改配置文件(hadoop1)
1、修改hadoop-env.sh文件
#cd /opt/modules/hadoop-3.3.0/etc/hadoop #vim hadoop-env.sh
在文件中加入export JAVA_HOME=/opt/modules/jdk1.8.0_144
2、修改yarn-env.sh文件
#vim yarn-env.sh
在文件中加入export JAVA_HOME=/opt/modules/jdk1.8.0_144
3、修改mapred-env.sh文件
#vim mapred-env.sh
在文件中加入export JAVA_HOME=/opt/modules/jdk1.8.0_144
4、修改core-site.xml
#vim core-site.xml
在<configuration>
</configuration>間加入
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<!-- 指定Hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-3.3.0/data/tmp</value>
</property>
5、修改hdfs-site.xml文件
# vim hdfs-site.xml
在<configuration>
</configuration>間加入
<!-- 指定Hadoop副本個數 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 指定Hadoop輔助名稱節點主機配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop3:50090</value>
</property>
6、修改yarn-site.xml文件
#vim yarn-site.xml
在<configuration>
</configuration>間加入
<!-- Reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop2</value>
</property>
7、修改mapred-site.xml文件
#vim mapred-site.xml
在<configuration>
</configuration>間加入
<!-- 指定MR運行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
8、修改workers文件
#vim workers
修改為3個主機名稱
hadoop1
hadoop2
hadoop3
【注】:我這里的hadoop-3.3.0版本文件名為workers,hadoop-2.x.x版本文件名為slaves
9)拷貝(hadoop1-->hadoop2,hadoop1-->hadoop3)
#scp -r /opt/modules/ root@hadoop2:/opt/ #scp -r /opt/modules/ root@hadoop3:/opt/ #將hadoop1主節點下opt目錄下的modules文件夾分別拷貝到hadoop2和hadoop3節點的opt目錄下
10)遠程同步/etc/profile文件(hadoop1)
#rsync -rvl /etc/profile root@hadoop2:/etc/profile #rsync -rvl /etc/profile root@hadoop3:/etc/profile #遠程同步,將hadoop1主節點上的配置文件分別拷貝到hadoop2和hadoop3節點
#tail /etc/profile #顯示已修改的配置文件(/etc/profile)內容,查看是否同步成功
#source /etc/profile #立即生效
#javadoc #測試
#hadoop #測試
#cat /opt/modules/hadoop-3.3.0/etc/hadoop/workers #查看workers文件內容是否一致
11)格式化NameNode
cd /opt/modules/hdoop-3.3.0#hadoop namenode -format #格式化NameNode
12)啟動和關閉Hadoop集群
#啟動集群
#cd /opt/modules/hadoop-3.3.0/sbin/ #start-dfs.sh
先在hadoop1節點下執行上述命令start-dfs.sh
#cd /opt/modules/hadoop-3.3.0/sbin/ #start-yarn.sh
等hadoop1主節點下start-dfs.sh命令執行結束后,在hadoop2節點下執行命令start-yarn.sh
#jps #hadoop1、hadoop2、hadoop3一起查看啟動的進程
#關閉集群
#stop-yarn.sh
先在hadoop2節點下執行命令stop-yarn.sh
#stop-dfs.sh
等hadoop2節點下stop-yarn.sh命令執行結束后,在hadoop1主節點下執行命令stop-dfs.sh
【注】:啟動集群和關閉集群順序是相反的,啟動時先hadoop1,關閉時后hadoop1
【注】:因hadoop版本不同,hadoop-2.x.x下啟動正常,hadoop-3.x.x下可能出現如下錯誤:
[root@hadoop1 sbin]# start-dfs.sh Starting namenodes on [hadoop1] ERROR: Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes ERROR: Attempting to operate on hdfs datanode as root ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation. Starting secondary namenodes [hadoop3] ERROR: Attempting to operate on hdfs secondarynamenode as root ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation. [root@hadoop1 sbin]# start-dfs.sh WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
解決辦法為:在start-dfs.sh和stop-dfs.sh文件首部加入如下部分
1 HDFS_DATANODE_USER=root 2 HDFS_DATANODE_SECURE_USER=hdfs 3 HDFS_NAMENODE_USER=root 4 HDFS_SECONDARYNAMENODE_USER=root
在start-yarn.sh和stop-yarn.sh文件首部加入如下部分
1 YARN_RESOURCEMANAGER_USER=root 2 HADOOP_SECURE_DN_USER=yarn 3 YARN_NODEMANAGER_USER=root
這樣這個問題就解決了,記得看清楚自己hadoop的版本號
13)通過瀏覽器訪問Hadoop集群
在瀏覽器輸入:192.168.150.14(主節點ip):9870訪問Hadoop文件系統
【注】:hadoop-3.x.x,服務器端口改為了9870,並不是原來的50070,看清自己的Hadoop版本
可在Windows下配置主機節點映射,配置完成后即可在瀏覽器輸入:hadoop1(主節點名稱):9870訪問Hadoop文件系統
具體映射配置:在C:\Windows\System32\drivers\etc\hosts文件后,加入與在虛擬機/etc/hosts配置一致的內容,即:
#192.168.150.14 hadoop1 #192.168.150.15 hadoop2 #192.168.150.16 hadoop3
14)測試集群,上傳文件
#hadoop fs -mkdir -p /root/ #創建root目錄 #hadoop fs -put /opt/tar_packages/jdk-8u144-linux-x64.tar.gz /root/ #將/opt/tar_packages/目錄下的jdk-8u144-linux-x64.tar.gz壓縮包上傳到剛才創建的root目錄下
至此,分布式集群搭建完成!
PS:搭建過程中需要的工具我整理了一下,需要的請自取哦!點這里(提取碼:u240)
如果搭建過程遇到了什么難以解決的問題,歡迎留言,畢竟多一個人一起百度可能會快一點!