Hadoop集群环境搭建完整指南:从虚拟机配置到集群部署
前言
本文详细记录了基于CentOS 7系统搭建三节点Hadoop集群的完整过程。从虚拟机创建、系统配置、网络设置到JDK环境、SSH免密登录及Hadoop核心配置,提供了每一步的操作命令和注意事项,适合大数据初学者和运维人员参考。
集群规划
本次搭建采用一个主节点(Master)和两个从节点(Slave)的经典架构,具体规划如下:
| 主机名称 | IP地址 | 功能角色 |
|---|---|---|
| hadoop01-master | 192.168.133.129 | NameNode, DataNode |
| hadoop02-slave1 | 192.168.133.131 | DataNode |
| hadoop03-slave2 | 192.168.133.130 | DataNode |
所有节点均需配置:1. JDK环境 2. SSH免密登录 3. Hadoop集群八大配置文件
1. Linux虚拟机创建与配置
创建虚拟机时选择CentOS 7 64位系统,为三台节点分别命名为hadoop01、hadoop02、hadoop03。
资源配置建议:
- CPU与内存:遵循1/4原则,即分配物理机配置的1/4。
- 网络模式:选择NAT。
- 磁盘类型:选择SCSI。
- 磁盘容量:建议设置为100G,并采用多文件分割以提高可移植性。
- 镜像文件:创建时需关联指定的ISO镜像文件。
2. 基于CentOS 7.2构建Linux系统节点
2.1 修改主机名
登录虚拟机后,使用以下命令修改主机名:
hostnamectl set-hostname hadoop01命令解析:hostnamectl= hostname control(主机名控制器)。
执行后输入bash刷新终端显示。
2.2 修改IP地址
编辑网络配置文件(不同系统网卡名称可能不同):
# 编辑网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-enp3s0 # 或 vi /etc/sysconfig/network-scripts/ifcfg-eno16777736关键配置项:
- 将
ONBOOT改为yes(控制系统启动时自动激活并启用这个网络接口)。 - 设置静态IP地址(如
IPADDR=192.168.133.129)。
修改完成后,重启网络服务使配置生效:
systemctl restart network查看网络配置:使用ip addr命令查看本机所有网卡、IP、MAC及网络状态。
3. SSH连接配置
完成三台节点的基本配置后,配置SSH连接以便远程管理和维护。
操作步骤:
- 在每台节点上使用
ip addr找到其IP地址。 - 在Xshell等SSH客户端中新建连接:
- 名称:与主机名相同。
- 主机:填写对应的IP地址。
- 用户身份验证:输入用户名和密码。
- 终端类型:选择Linux。
- 可调整字体大小以优化显示。
配置顺序:建议先完成第一台虚拟机(hadoop01)的全部配置,然后依次配置第二台(hadoop02)和第三台(hadoop03)。
4. Xshell配置优化
为提升操作效率,可对Xshell进行以下优化:
- 复制粘贴:工具 → 选项 → 鼠标键盘 → 勾选“选择即复制”,右键设置为“粘贴”。
- 同步操作:工具 → 发送键输入到所有会话,可实现多窗口同步输入命令。
- 窗口布局:选项卡 → 排列 → 选择垂直或水平排列,方便同时查看多个会话。
5. 配置hosts文件
5.1 Linux节点配置
编辑所有节点的/etc/hosts文件:
vi /etc/hosts添加以下内容:
192.168.133.129 hadoop01 hadoop01.org 192.168.133.131 hadoop02 hadoop02.org 192.168.133.130 hadoop03 hadoop03.org配置完成后,可使用ping hadoop01等命令测试节点间通信。
5.2 Windows宿主机配置
为方便从宿主机访问集群,需修改Windows的hosts文件:
- 打开文件:
C:\Windows\System32\drivers\etc\hosts - 添加与Linux节点相同的内容。
- 保存后,打开cmd,使用
ping hadoop01测试连通性。
ps:将hosts文件复制到桌面进行操作,在粘贴回去,即可完成更改。
6. 防火墙配置
为简化集群内部通信,建议关闭防火墙。
# 检查防火墙状态 firewall-cmd --state # 输出 running(运行中) 或 not running(未运行) 临时关闭防火墙(重启后失效) systemctl stop firewalld 永久关闭防火墙(开机不启动) systemctl disable firewalld7. JDK 1.8环境配置
7.1 上传与解压
进入/opt目录(通常用于存放第三方软件包):
cd /opt/使用FileZilla等工具将jdk-8u77-linux-x64.tar.gz传输到该目录。
解压方式一(直接解压并重命名):
tar -zxvf jdk-8u77-linux-x64.tar.gz mv jdk1.8.0_77/ jdk1.8解压方式二(指定目录):
mkdir jdk1.8 tar -zxvf jdk-8u77-linux-x64.tar.gz -C jdk1.8/ cd jdk1.8/jdk1.8.0_77 mv ./* ..8. 配置环境变量(重点)
# 进入JDK目录,查看当前绝对路径 cd /opt/jdk1.8/ pwd 编辑系统环境变量配置文件 vi /etc/profile在文件末尾添加以下内容:
export JAVA_HOME=/opt/jdk1.8 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH保存退出后,使配置立即生效:
source /etc/profile验证JDK安装:
javac java -version which java9. 通过Java代码验证JVM可用性
cd /opt/ vi Test.java输入简单的Java代码(例如:public class Test { public static void main(String[] args) { System.out.println("Hello Hadoop!"); } })。
# 编译并运行 javac Test.java java Test可将生成的Test.class文件通过FileZilla传到Windows,在PowerShell中运行java Test进行验证。
10. 配置国内阿里云镜像仓库
背景:默认的国外YUM源可能导致下载缓慢或失败,更换为国内镜像可大幅提升软件安装速度。
操作步骤:
- 进入YUM源配置目录:
cd /etc/yum.repos.d/ - 查看原有源:
cat CentOS-Base.repo - (谨慎操作)清空旧源:
rm -rf * - 将准备好的国内镜像源配置文件(如
Centos-7.repo)上传到该目录。 - 清理并重建缓存:
yum clean all yum makecache
验证方法:
yum list:若能正常列出所有仓库包,说明源更换成功。yum -y install vim:尝试安装vim编辑器,若成功则证明网络和源配置正常。- 安装后使用
vim编辑文件,查看语法高亮效果。
11. 系统管理与服务配置
11.1 Linux系统关机与重启命令
在集群管理过程中,经常需要使用系统关机或重启命令。以下是常用的几种方式:
# 关机命令 init 0 # 系统关机(CentOS 6之前版本常用) shutdown -h now # 立即关机 poweroff # 立即关机(推荐) 重启命令 init 6 # 系统重启(CentOS 6之前版本常用) reboot # 立即重启(推荐) shutdown -r now # 立即重启命令说明:
init 0和init 6是传统的运行级别切换命令,在CentOS 7中仍可使用shutdown命令更灵活,可以指定延迟时间(如shutdown -h +5表示5分钟后关机)poweroff和reboot是最直接、最常用的关机重启命令
11.2 NTP时间同步服务配置
在分布式集群环境中,所有节点的时间必须保持同步,否则可能导致数据不一致、日志时间错乱等问题。
11.2.1 主节点(Master)配置
选择一台服务器作为NTP时间服务器(通常选择主节点hadoop01):
# 1. 安装NTP服务端 yum -y install ntp 2. 手动设置初始时间(确保集群时间基本一致) date -s "2026-07-20 10:29:40" 3. 编辑NTP配置文件 vi /etc/ntp.conf 4. 注释掉默认的公共NTP服务器(第18-21行左右) server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst 5. 添加本地时钟源(使用本地系统时钟作为时间源) server 127.127.1.0 fudge 127.127.1.0 stratum 10 6. 启动NTP服务并设置开机自启 systemctl start ntpd systemctl enable ntpd11.2.2 从节点(Slave)配置
在其他节点上配置NTP客户端,与主节点时间同步:
# 1. 安装NTP客户端工具 yum -y install ntpdate 2. 与主节点进行时间同步 ntpdate hadoop01 或使用域名 ntpdate hadoop01.org 3. 设置定时同步(可选,建议配置) 编辑crontab,添加每小时同步一次 echo "0 * * * * /usr/sbin/ntpdate hadoop01 > /dev/null 2>&1" >> /etc/crontab 4. 验证时间同步 date 查看与主节点的时间差 ntpdate -q hadoop0111.3 Web服务器(Apache HTTPD)搭建与配置
在某些场景下,需要在集群节点上部署Web服务,用于提供Web UI访问或API服务。
11.3.1 检查与卸载旧版本
# 查找httpd安装位置 find / -name httpd which httpd 如果已存在旧版本,可先隔离或卸载 mv /usr/sbin/httpd /opt/httpd_backup # 隔离旧版本 yum -y remove httpd # 卸载旧版本11.3.2 安装与启动Apache HTTPD
# 1. 安装Apache HTTPD yum -y install httpd 2. 启动HTTPD服务 systemctl start httpd 3. 查看服务状态 systemctl status httpd 4. 设置开机自启 systemctl enable httpd 5. 检查端口监听(默认80端口) netstat -tlnp | grep :80 或使用 ss -tlnp | grep :8011.3.3 基本配置
# 1. 进入配置目录 cd /etc/httpd/ cd conf 2. 编辑主配置文件 vi httpd.conf 常用配置项说明: Listen 80 # 监听端口 ServerName localhost:80 # 服务器名称 DocumentRoot "/var/www/html" # 网站根目录 DirectoryIndex index.html # 默认首页文件 3. 创建测试页面 cd /var/www/html/ echo "<h1>Apache HTTPD Test Page</h1>" > index.html echo "<p>Hadoop Cluster Web Server</p>" >> index.html 4. 重启服务使配置生效 systemctl restart httpd11.3.4 防火墙配置(如果防火墙未关闭)
# 开放80端口 firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload 或临时关闭防火墙进行测试 systemctl stop firewalld11.3.5 特殊问题:HTTPD服务启动失败(masked状态)
在安装Apache HTTPD时,有时会遇到systemctl start httpd、systemctl enable httpd等命令执行失败,并显示Failed to start httpd.service: Unit httpd.service is masked的错误。这通常是由于系统中存在残留的httpd服务配置或服务被屏蔽导致的。
问题现象:
# 尝试启动httpd服务失败 systemctl start httpd # 错误信息:Failed to start httpd.service: Unit httpd.service is masked. 查看服务状态 systemctl status httpd 显示:Loaded: masked (Reason: Unit httpd.service is masked.)解决方案:
- 彻底卸载httpd并清理残留配置
# 1. 卸载Apache HTTPD及相关工具 yum erase -y httpd httpd-tools 2. 删除残留的服务屏蔽文件 rm -rf /etc/systemd/system/httpd.service rm -rf /etc/systemd/system/multi-user.target.wants/httpd.service 3. 重新加载systemd配置 systemctl daemon-reload - 重新安装httpd
# 重新安装Apache HTTPD yum install -y httpd - 清理屏蔽并解锁服务
# 再次清理可能存在的屏蔽文件 rm -f /etc/systemd/system/httpd.service 重新加载systemd配置 systemctl daemon-reload 解锁httpd服务(解除masked状态) systemctl unmask httpd - 验证服务状态
# 检查服务状态 systemctl status httpd # 正常应显示: # ● httpd.service - The Apache HTTP Server # Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) # Active: inactive (dead) - 启动并启用服务
# 启动httpd服务 systemctl start httpd 设置开机自启 systemctl enable httpd 再次检查服务状态 systemctl status httpd 正常应显示Active: active (running)
问题原因分析:
- masked状态:表示服务被systemd屏蔽,无法启动或启用。这通常发生在之前安装的httpd未完全卸载,或者系统中有其他软件包修改了服务配置。
- 残留文件:
/etc/systemd/system/httpd.service等文件可能是之前安装留下的,会覆盖系统默认的服务配置。 - 解决方案核心:彻底清理所有残留配置,重新安装,然后使用
systemctl unmask httpd解除屏蔽状态。
预防措施:
- 在安装新版本httpd前,先检查是否有旧版本:
rpm -qa | grep httpd - 如果存在旧版本,先完整卸载:
yum remove -y httpd httpd-tools - 安装前检查服务状态:
systemctl status httpd,确保没有masked状态
11.4 MariaDB数据库安装与配置
MariaDB是MySQL的分支,在CentOS 7.x之后作为默认的数据库管理系统,常用于Hadoop生态中的Hive元数据存储。
11.4.1 安装MariaDB及相关组件
# 安装MariaDB服务器、客户端和Java连接器 yum -y install mariadb mariadb-server mysql-connector-java 启动MariaDB服务 systemctl start mariadb 设置开机自启 systemctl enable mariadb 检查服务状态 systemctl status mariadb 或检查端口监听 netstat -ano | grep 3306 或使用 ss -tlnp | grep :330611.4.2 安全初始化配置
# 运行安全配置脚本 mysql_secure_installation 按以下步骤配置(建议设置): 1. 输入当前root密码(首次安装为空,直接回车) 2. 设置root密码?输入 y 3. 输入新密码并确认 4. 移除匿名用户?输入 y 5. 禁止root远程登录?输入 n(集群环境可能需要远程访问) 6. 移除test数据库?输入 y 7. 重新加载权限表?输入 y11.4.3 数据库基本操作
# 登录MariaDB(使用刚设置的密码) mysql -uroot -p123456 # 或 mysql -uroot -p 创建Hive元数据库 CREATE DATABASE hive; SHOW DATABASES; 使用hive数据库 USE hive; 查看当前数据库 SELECT DATABASE(); 为Hive配置权限(本地访问) GRANT ALL PRIVILEGES ON hive.* TO 'root'@'localhost' IDENTIFIED BY '123456'; 为Hive配置权限(远程访问,集群环境需要) GRANT ALL PRIVILEGES ON hive.* TO 'root'@'%' IDENTIFIED BY '123456'; 刷新权限 FLUSH PRIVILEGES; 退出MariaDB EXIT;11.4.4 验证安装与连接
# 验证MariaDB版本 mysql --version 测试连接 mysql -uroot -p123456 -e "SELECT VERSION();" 查看数据库列表 mysql -uroot -p123456 -e "SHOW DATABASES;" 测试hive数据库权限 mysql -uroot -p123456 -e "USE hive; SHOW TABLES;"11.5 其他常用工具安装
以下工具在集群管理和日常运维中非常有用:
- vim:功能强大的文本编辑器,支持语法高亮
<pre><pre>yum -y install vim - lrzsz:通过Zmodem协议实现文件上传下载(配合Xshell使用)
yum -y install lrzsz # 上传文件:rz # 下载文件:sz 文件名 - tree:以树状结构显示目录内容
yum -y install tree # 使用示例: tree /opt/ # 显示/opt目录结构 tree -L 2 /etc/ # 显示/etc目录,深度为2级 - net-tools:网络工具包(包含ifconfig、netstat等命令)
yum -y install net-tools # 常用命令: ifconfig # 查看网络接口信息 netstat -tlnp # 查看端口监听情况 route -n # 查看路由表
12. 配置SSH免密登录
Hadoop集群节点间需要SSH免密登录以实现无密码访问,配置步骤如下:
- 生成密钥对:在每个节点上执行以下命令生成公钥和私钥
<pre><pre><pre><pre>ssh-keygen - 分发公钥:以hadoop01节点为例,将公钥复制到其他节点
# 从hadoop01复制公钥到hadoop03 ssh-copy-id hadoop03 # 输入hadoop03的密码确认 从hadoop01复制公钥到hadoop02 ssh-copy-id hadoop02 输入hadoop02的密码确认 - 自免密配置:hadoop01既是客户端又是服务器,也需要给自己配置免密登录
ssh-copy-id hadoop01 - 验证配置:在hadoop01上测试到hadoop02的免密登录
ssh hadoop02 # 成功登录后会显示 [root@hadoop02 ~]# 提示符 hostname # 验证主机名 ip addr # 验证IP地址 exit # 返回hadoop01 - 其他节点配置:在hadoop02和hadoop03节点上重复上述步骤,实现所有节点间的双向免密登录。
13. SELinux配置与应用
SELinux(Security-Enhanced Linux)是Linux的安全子系统,但在Hadoop集群环境中,为避免权限问题,通常需要调整其配置。
13.1 查看SELinux状态
getenforce可能返回三种状态:
- Enforcing:强制模式,SELinux策略强制执行
- Permissive:宽容模式,仅记录违规不阻止
- Disabled:禁用模式
13.2 临时修改SELinux模式
# 设置为宽容模式 setenforce 0 设置为强制模式 setenforce 113.3 永久禁用SELinux
对于Hadoop集群环境,建议永久禁用SELinux以避免权限冲突:
- 进入SELinux配置目录
cd /etc/selinux/ ll - 编辑配置文件
vim config - 找到
SELINUX=行,将其值改为disabledSELINUX=disabled - 保存退出后重启系统使配置生效
init 0
注意:修改SELinux配置后需要重启系统才能生效。在生产环境中,请根据实际安全需求谨慎选择SELinux模式。
后续步骤
至此,我们已经完成了Hadoop集群环境搭建的所有基础配置工作,包括:
- 虚拟机创建与系统配置
- 网络与主机名设置
- SSH连接与Xshell优化
- hosts文件配置(Linux和Windows)
- 防火墙关闭
- JDK 1.8环境安装与配置
- Java环境验证
- 阿里云镜像仓库配置
- 常用插件安装(vim、lrzsz、tree、net-tools、MariaDB)
- SSH免密登录配置
- SELinux配置与禁用
接下来,您可以继续进行以下步骤来搭建完整的Hadoop集群:
- Hadoop软件包下载与分发:下载Hadoop安装包,并将其分发到所有集群节点。
- Hadoop核心配置文件修改:配置八大核心文件,包括:
- hadoop-env.sh
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
- slaves
- masters
- hadoop-metrics2.properties
- Hadoop环境变量配置:在所有节点上配置Hadoop环境变量。
- Hadoop集群格式化与启动:格式化NameNode,启动HDFS和YARN服务。
- 集群验证与测试:通过Web UI和命令行验证集群运行状态。
这些内容将在后续文章中详细展开,敬请关注。