centos 7.5 + Hadoop 3.2.4 集群搭建

CentOS 7.5 部署 Hadoop 3.2.4 集群(三节点)

集群规划

节点角色 主机名 IP 地址 运行服务
Master hadoop1 192.168.16.219 NameNode, ResourceManager
Slave1 hadoop2 192.168.16.67 DataNode, NodeManager
Slave2 hadoop3 192.168.16.249 DataNode, NodeManager
Secondary hadoop1 192.168.16.219 SecondaryNameNode, HistoryServer

环境准备(所有节点)

1. 系统设置

bash 复制代码
# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 禁用 SELinux
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 配置主机名解析
sudo tee -a /etc/hosts << EOF
192.168.16.219 hadoop1
192.168.16.67 hadoop2
192.168.16.249 hadoop3
EOF

# 设置主机名(分别在各节点执行)
# hadoop1
sudo hostnamectl set-hostname hadoop1
# hadoop2
sudo hostnamectl set-hostname hadoop2
# hadoop3
sudo hostnamectl set-hostname hadoop3

2. 安装依赖

bash 复制代码
sudo yum install -y epel-release
sudo yum install -y wget vim net-tools openssl openssh-server openssh-clients

3. 配置SSH免密登录(在 master 节点执行)

bash 复制代码
# 生成密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 分发公钥到所有节点
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3

# 测试免密登录
ssh hadoop2 date
ssh hadoop3 date

4. 安装Java环境(所有节点)

bash 复制代码
# 下载JDK
wget https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz

# 安装JDK
sudo tar -zxvf openjdk-11.0.1_linux-x64_bin.tar.gz -C /usr/local/
sudo ln -s /usr/local/jdk-11.0.1 /usr/local/java

# 配置环境变量
sudo tee /etc/profile.d/java.sh << 'EOF'
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
EOF

source /etc/profile

Hadoop 安装与配置(在 master 节点操作)

1. 下载并解压 Hadoop

bash 复制代码
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.2.4/hadoop-3.2.4.tar.gz
tar -zxvf hadoop-3.2.4.tar.gz -C /usr/local/
sudo ln -s /usr/local/hadoop-3.2.4 /usr/local/hadoop

2. 配置环境变量

bash 复制代码
sudo tee /etc/profile.d/hadoop.sh << 'EOF'
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
EOF

source /etc/profile

3. 配置 Hadoop 核心文件

hadoop-env.sh
bash 复制代码
sudo tee $HADOOP_CONF_DIR/hadoop-env.sh << 'EOF'
export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
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"
EOF
core-site.xml
bash 复制代码
sudo tee $HADOOP_CONF_DIR/core-site.xml << 'EOF'
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop/tmp</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
</configuration>
EOF
hdfs-site.xml
bash 复制代码
sudo tee $HADOOP_CONF_DIR/hdfs-site.xml << 'EOF'
<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///data/hadoop/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///data/hadoop/datanode</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop1:9868</value>
    </property>
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
</configuration>
EOF
mapred-site.xml
bash 复制代码
sudo tee $HADOOP_CONF_DIR/mapred-site.xml << 'EOF'
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
    <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>
EOF
yarn-site.xml
bash 复制代码
sudo tee $HADOOP_CONF_DIR/yarn-site.xml << 'EOF'
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop1</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>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log.server.url</name>
        <value>http://hadoop1:19888/jobhistory/logs</value>
    </property>
</configuration>
EOF
workers
bash 复制代码
sudo tee $HADOOP_CONF_DIR/workers << 'EOF'
hadoop2
hadoop3
EOF

4. 创建数据目录(所有节点)

bash 复制代码
sudo mkdir -p /data/hadoop/{tmp,namenode,datanode}
sudo chown -R root:root /data/hadoop
sudo chmod -R 755 /data/hadoop

分发 Hadoop 到所有节点

bash 复制代码
# 从 master 节点分发到其他节点
scp -r /usr/local/hadoop-3.2.4 root@hadoop2:/usr/local/
scp -r /usr/local/hadoop-3.2.4 root@hadoop3:/usr/local/

# 在所有节点创建符号链接
ssh hadoop2 "ln -s /usr/local/hadoop-3.2.4 /usr/local/hadoop"
ssh hadoop3 "ln -s /usr/local/hadoop-3.2.4 /usr/local/hadoop"

# 分发环境变量配置
scp /etc/profile.d/hadoop.sh root@hadoop2:/etc/profile.d/
scp /etc/profile.d/hadoop.sh root@hadoop3:/etc/profile.d/

# 在所有节点应用环境变量
source /etc/profile

启动 Hadoop 集群(在 master 节点操作)

1. 格式化 HDFS

bash 复制代码
hdfs namenode -format

2. 启动 HDFS

bash 复制代码
start-dfs.sh

3. 启动 YARN

bash 复制代码
start-yarn.sh

4. 启动历史服务器

bash 复制代码
mapred --daemon start historyserver

验证集群状态

1. 检查进程

bash 复制代码
# master 节点
jps
# 应包含:NameNode, ResourceManager, SecondaryNameNode, JobHistoryServer

# slave 节点
jps
# 应包含:DataNode, NodeManager

2. 检查 HDFS 状态

bash 复制代码
hdfs dfsadmin -report

3. 检查 YARN 状态

bash 复制代码
yarn node -list

4. Web UI 访问

服务 URL
HDFS NameNode http://192.168.16.219:9870
YARN ResourceManager http://192.168.16.219:8088
JobHistory http://192.168.16.219:19888

运行测试作业

bash 复制代码
# 创建测试目录
hdfs dfs -mkdir /input

# 上传测试文件
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /input

# 运行 WordCount 示例
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount /input /output

# 查看结果
hdfs dfs -cat /output/*

集群管理命令

常用命令

bash 复制代码
# 启动集群
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver

# 停止集群
mapred --daemon stop historyserver
stop-yarn.sh
stop-dfs.sh

# 安全模式操作
hdfs dfsadmin -safemode enter  # 进入安全模式
hdfs dfsadmin -safemode leave   # 退出安全模式
hdfs dfsadmin -safemode get     # 查看安全模式状态

节点管理

bash 复制代码
# 添加新节点
# 1. 在新节点完成环境准备
# 2. 添加新节点到 workers 文件
# 3. 刷新节点列表
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes

# 退役节点
# 1. 创建退役文件
echo "hadoop3" > $HADOOP_CONF_DIR/excludes
# 2. 刷新节点
hdfs dfsadmin -refreshNodes
# 3. 等待数据迁移完成
# 4. 停止该节点服务

故障排查

常见问题解决

  1. 端口冲突

    bash 复制代码
    netstat -tunlp | grep <端口号>
    kill -9 <PID>
  2. 权限问题

    bash 复制代码
    sudo chown -R root:root /data/hadoop
    sudo chmod -R 755 /data/hadoop
  3. 日志分析

    bash 复制代码
    # NameNode 日志
    tail -f $HADOOP_HOME/logs/hadoop-root-namenode-hadoop1.log
    
    # DataNode 日志
    tail -f $HADOOP_HOME/logs/hadoop-root-datanode-hadoop2.log
    
    # ResourceManager 日志
    tail -f $HADOOP_HOME/logs/hadoop-root-resourcemanager-hadoop1.log
  4. 重新格式化

    bash 复制代码
    # 停止所有服务
    stop-yarn.sh
    stop-dfs.sh
    
    # 删除数据目录
    rm -rf /data/hadoop/*
    
    # 重新格式化
    hdfs namenode -format

安全加固建议

  1. 启用 Kerberos 认证
  2. 配置 HDFS 权限
  3. 使用专用 Hadoop 用户
  4. 配置防火墙规则
  5. 启用 HTTPS 访问

提示:生产环境建议使用 Ambari 或 Cloudera Manager 进行集群管理,简化部署和维护流程。

相关推荐
甲鱼92912 小时前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
Johny_Zhao1 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
YuMiao2 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1233 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑3 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件3 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒3 天前
OpenClaw 多 Agent 配置实战指南
运维
xy123063 天前
OpenStack Train 部署实战(三)控制节点--keystone服务
centos·openstack
深紫色的三北六号3 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash3 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)