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 进行集群管理,简化部署和维护流程。

相关推荐
不做无法实现的梦~18 小时前
PX4 机载电脑 Linux 环境安装、串口、网络、ROS 完整配置
linux·运维·网络
嵌入式×边缘AI:打怪升级日志18 小时前
嵌入式Linux开发(了解交叉编译工具链的组成)
java·linux·运维
IT界的老黄牛18 小时前
停电后 Redis 集群两节点起不来:fix 完还报 Bad file format?多部分 AOF 修复的正确姿势
运维·redis·缓存
接着奏乐接着舞18 小时前
3D Tiles tileset.jso 数据格式
运维·服务器·3d
李小白2020020218 小时前
RK3568 linux6.1 死机
linux·运维·服务器
FreeGo~18 小时前
Linux 系统编程 进程篇 (五)
java·linux·服务器
nbwenren18 小时前
办公AI实测:Gemini3、GPT-4o、Claude3.5谁更强?
服务器·数据库·php
杨云龙UP18 小时前
Oracle数据库启动失败:ORA-29701、ORA-01565、ORA-17503故障处理记录_20260429
linux·运维·数据库·oracle·centos
Agent产品评测局18 小时前
离散制造业生产流程优化,AI落地实操步骤详解:从传统自动化到企业级智能体的技术范式跃迁
运维·人工智能·ai·自动化
handler0119 小时前
Git 核心指令速查
linux·c语言·c++·笔记·git·学习