作者:IvanCodes
日期:2025年5月7日
專欄:Hadoop教程
前言:
想玩轉大數據,Hadoop集群是繞不開的一道坎。很多小伙伴一看到集群部署就頭大,各種配置、各種坑。別慌!這篇教程就是你的“救生圈”。
一、磨刀不誤砍柴工:環境準備(虛擬機與網絡)
虛擬機克隆與基礎配置 (以VMware為例)
第一步:準備一臺基礎Linux虛擬機:
你需要一臺安裝好Linux(推薦CentOS 7 或 Ubuntu 24.04.2/20.04)的虛擬機。確保它已安裝常用工具,網絡能通。
- centos 7的詳細安裝教程可以參考《安裝篇–CentOS 7 虛擬機安裝》
- Ubuntu 24.04.2的詳細安裝教程可以參考《安裝篇–Ubuntu24.04.2詳細安裝教程》
第二步:克隆虛擬機:
1.啟動克隆向導: 在VMware Workstation中,右鍵點擊你準備好的虛擬機,選擇 “管理” -> “克隆”。
接著會彈出“歡迎使用克隆虛擬機向導”界面,直接點擊“下一步”。
2.選擇克隆源: 默認選擇“虛擬機中的當前狀態”,直接點擊“下一步”。
3.選擇克隆類型: 選擇“創建完整克隆”。完整克隆會復制整個虛擬硬盤,確保每臺“小雞”都是獨立的,不會相互影響。鏈接克隆雖然省空間,但不適合我們做集群。點擊“下一步”。
4.命名與存放位置:
第三步:Windows宿主機VMnet8網卡IP配置
1.在Windows設置中,進入 “網絡和 Internet”
2.點擊 “高級網絡設置”
3.找到 “VMware Network Adapter VMnet8”,展開它,點擊 “查看其他屬性”
4.點擊“IP 分配”旁邊的“編輯”
5.在“編輯 IP 設置”中,選擇“手動”,打開IPv4,然后填寫IP地址(如 192.168.121.1
)和子網掩碼(255.255.255.0
)。網關和DNS對于這個宿主機的虛擬網卡通常不需要填寫,或者可以填寫VMnet8的網關(192.168.121.2
)和你的常用DNS。
第四步:VMware虛擬網絡配置 (關鍵步驟!)
1.在VMware Workstation主界面,點擊菜單欄的 “編輯” -> “虛擬網絡編輯器”
2.在“虛擬網絡編輯器”中,你會看到一個網絡列表,找到 VMnet8 (通常類型是NAT模式)
3.如果下方的配置選項是灰色的,你需要點擊右下角的 “更改設置” 按鈕,并可能需要提供管理員權限
4.選中VMnet8,然后進行以下配置:
4.1.確保連接類型選擇 “NAT模式(與虛擬機共享主機的IP地址)”。
4.2.取消勾選 “使用本地DHCP服務將IP地址分配給虛擬機”
子網IP: 輸入 192.168.121.0
子網掩碼: 輸入 255.255.255.0
5.配置NAT設置 (網關):
將 “網關 IP(G):” 設置為 192.168.121.2
配置DHCP設置 (定義IP地址范圍,可選但推薦檢查):
起始 IP 地址(S): 192.168.121.130
結束 IP 地址(E): 192.168.121.255
第五步:Linux虛擬機靜態IP配置 (核心!以CentOS 7為例):
在每臺Linux虛擬機上,編輯網絡配置文件,例如 /etc/sysconfig/network-scripts/ifcfg-ens33
(你的網卡名可能不同)。
vim /etc/sysconfig/network-scripts/ifcfg-ens33
hadoop02
的配置:將 IPADDR
改為 192.168.121.132
。
hadoop03
的配置:將 IPADDR
改為 192.168.121.133
。
- 配置源碼 (
ifcfg-ensXX
):
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=ensXX
DEVICE=ensXX
ONBOOT=yes
IPADDR=192.168.121.131
NETMASK=255.255.255.0
GATEWAY=192.168.121.2
DNS1=114.114.114.114
- 配置主機映射
- 在
hadoop01
,hadoop02
,hadoop03
上都執行:
vim /etc/hosts
- 修改
hadoop01
的主機名:
hostnamectl set-hostname hadoop01
- 重啟主機
reboot
- 用
ip a
驗證ip是否改正 - 查看網絡能否正常
ping
通
第六步:使用FinalShell連接虛擬機:
2. 關閉防火墻和selinux
- 關閉防火墻:
systemctl stop firewalld
systemctl disable firewalld
- 關閉SELinux:
vim /etc/selinux/config
# SELINUX=disabled
#需重啟虛擬機
3.配置SSH免密登錄 (核心):
在 hadoop01
中執行:
#驗證ssh協議
ps -e | grep sshd
#生成鑰匙
ssh-keygen -t rsa
#復制密碼發送到其他設備
ssh-copy-id root@hadoop01
ssh-copy-id root@hadoop02
ssh-copy-id root@hadoop03
4.時間同步 (NTP):
yum install -y ntp
systemctl start ntpd
systemctl enable ntpd
5. 安裝Java JDK
# 創建存放軟件和安裝包的目錄
mkdir -p /export/server /export/softwares
5.1.上傳并解壓JDK安裝包:
將你準備好的 jdk-8u361-linux-x64.tar.gz
文件,通過 FinalShell 的上傳功能(或者其他sftp工具),上傳到三臺虛擬機的 /export/softwares/
目錄下。
進入 /export/server/
目錄,并解壓 JDK 安裝包:
cd /export/server/ # 進入我們計劃安裝軟件的目錄
# 解壓 JDK 安裝包
tar -xzf /export/softwares/jdk-8u361-linux-x64.tar.gz
# 解壓后通常會得到一個名為 jdk1.8.0_361 的目錄,用ls確認一下
ls /export/server/
5.2.配置 JAVA_HOME 環境變量:
在每臺機器上,編輯環境變量文件 ~/.bashrc
:
vim ~/.bashrc
export JAVA_HOME=/export/server/jdk1.8.0_361 # 注意這里的路徑和解壓出來的目錄名一致
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bashrc
二、Hadoop 安裝與配置
1. 解壓Hadoop到指定目錄 (/export/server/)
-
上傳Hadoop安裝包:將
hadoop-3.3.4.tar.gz
安裝包,通過 FinalShell 上傳到三臺虛擬機的/export/softwares/
目錄下。 -
解壓Hadoop到
/export/server/
并重命名:
# 解壓 Hadoop 安裝包
tar -xzf /export/softwares/hadoop-3.3.4.tar.gz
# 為了方便,我們把它重命名為簡潔的 hadoop
mv hadoop-3.3.4 hadoop
2. 配置Hadoop環境變量
編輯~/.bashrc
文件,追加 Hadoop 相關的環境變量:
vim ~/.bashrc
在文件末尾添加:
export HADOOP_HOME=/export/server/hadoop # 注意這里的路徑是自定義安裝路徑
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # 將 Hadoop 的命令加入到 PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop # 指定 Hadoop 配置文件的位置
export HADOOP_LOG_DIR=$HADOOP_HOME/logs # 指定 Hadoop 日志文件的位置
讓環境變量生效:
source ~/.bashrc
3. 修改Hadoop核心配置文件 (重點)
主要在 hadoop01
上修改,然后分發給其他節點。
- (A)
hadoop-env.sh
(所有節點一致修改)- 這個文件主要配置 Hadoop 運行的環境,比如指定 Java。
cd /export/server/hadoop/etc/hadoop/
vim hadoop-env.sh
export JAVA_HOME=/export/server/jdk1.8.0_361
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"
- (B)
core-site.xml
(所有節點一致修改)- 這是 Hadoop 的核心配置文件,配置HDFS的地址、臨時文件目錄等。
vim /core-site.xml
<configuration><!-- 指定HDFS中NameNode的地址 --><property><name>fs.defaultFS</name><value>hdfs://hadoop01:9000</value></property><!-- 指定Hadoop運行時產生文件的存儲目錄,比如MapReduce的臨時數據 --><property><name>hadoop.tmp.dir</name><value>/export/data/hadoop</value> <!-- 修改為自定義路徑下的臨時數據目錄 --></property><!-- (可選但推薦) 用于WebHDFS和HTTPFS的用戶模擬配置,讓指定用戶(這里是hadoopuser)可以模擬其他用戶 --><property><name>hadoop.proxyuser.hadoopuser.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.hadoopuser.groups</name><value>*</value></property>
<!-- 整合hive 用戶代理設置 -->
<property><name>hadoop.proxyuser.root.hosts</name><value>*</value>
</property>
<property><name>hadoop.proxyuser.root.groups</name><value>*</value>
</property>
</configuration>
- ?
hdfs-site.xml
(所有節點一致修改)- 這個文件配置 HDFS 的具體參數,比如副本數量、NameNode和DataNode數據存放位置等。
vim hdfs-site.xml
<configuration><!-- NameNode的Web UI訪問地址 (Hadoop 3.x默認端口9870) --><property><name>dfs.namenode.http-address</name><value>hadoop01:9870</value></property><!-- SecondaryNameNode的Web UI訪問地址 (Hadoop 3.x默認端口9868) --><property><name>dfs.secondary.http-address</name><value>hadoop01:9868</value> <!-- 我們也讓它在hadoop01上 --></property><!-- SecondaryNameNode所在的主機和端口,NameNode會向它發送元數據 --><property><name>dfs.namenode.secondary.http-address</name><value>hadoop01:9868</value></property><!-- HDFS副本數量,我們有3個節點,可以設置為2或3。這里先設為2,至少保證有兩個DataNode時數據有冗余 --><property><name>dfs.replication</name><value>2</value></property><!-- NameNode元數據(fsimage和editlog)存放的本地磁盤路徑 --><property><name>dfs.namenode.name.dir</name><value>file:/export/server/hadoop/dfs_data/name</value> <!-- 修改為自定義路徑 --></property><!-- DataNode數據塊存放的本地磁盤路徑 --><property><name>dfs.datanode.data.dir</name><value>file:/export/server/hadoop/dfs_data/data</value> <!-- 修改為自定義路徑 --></property><!-- 開啟WebHDFS功能,可以通過HTTP訪問HDFS文件 --><property><name>dfs.webhdfs.enabled</name><value>true</value></property>
</configuration>
- (D)
yarn-site.xml
(所有節點一致修改)- 這是 YARN (資源管理器) 的配置文件。
vim yarn-site.xml
<configuration><!-- 指定YARN的ResourceManager(RM)的主機名 --><property><name>yarn.resourcemanager.hostname</name><value>hadoop01</value></property><!-- NodeManager上運行的附屬服務,MapReduce Shuffle是必須的 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- ResourceManager的Web UI訪問地址 (默認端口8088) --><property><name>yarn.resourcemanager.webapp.address</name><value>hadoop01:8088</value></property><!-- (可選) 開啟日志聚集功能,方便在Web UI上查看已完成任務的日志 --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><!-- MapReduce JobHistory Server 的日志服務地址 --><property><name>yarn.log.server.url</name><value>http://hadoop01:19888/jobhistory/logs</value> <!-- 指向JobHistoryServer的Web UI --></property><!-- (可選) 日志保留時間 --><property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value> <!-- 日志保留7天 (604800秒) --></property>
</configuration>
- (E)
mapred-site.xml
(所有節點一致修改)- 這個文件配置 MapReduce 的運行時框架和 JobHistory Server。
vim mapred-site.xml
<configuration><!-- 指定MapReduce作業運行在YARN上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property><!-- MapReduce JobHistory Server 地址 --><property><name>mapreduce.jobhistory.address</name><value>hadoop01:10020</value></property><!-- MapReduce JobHistory Server Web UI 地址 (默認端口19888) --><property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop01:19888</value></property><!-- (Hadoop 3.x需要) 使YARN能夠正確找到和分發MapReduce相關的JAR包 --><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property>
</configuration>
- (F)
workers
文件 (僅在hadoop01
上修改,然后分發)- 這個文件告訴
start-dfs.sh
和start-yarn.sh
腳本,需要在哪些機器上啟動 DataNode 和 NodeManager 進程。
- 這個文件告訴
vim workers
hadoop01
hadoop02
hadoop03
4. 分發配置文件 (在 hadoop01
上執行)
好了,配置文件修改完了。把 hadoop01
上的配置文件同步到 hadoop02
和 hadoop03
去。
- 確保你在
hadoopuser
用戶下,且在$HADOOP_HOME/etc/
目錄下(也就是/export/server/hadoop/etc/
)。
cd /export/server
scp ~/.bashrc hadoop02:~/.bashrc
scp ~/.bashrc hadoop03:~/.bashrc
#傳完之后要在hadoop02和hadoop03上分別執行 source /etc/profile 命令,來刷新配置文件
scp -r hadoop hadoop02:$PWD
scp -r jdk1.8.0_361 hadoop02:$PWD
scp -r hadoop hadoop03:$PWD
scp -r jdk1.8.0_361 hadoop03:$PWD
5.驗證是否成功