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

相关推荐
东方佑2 分钟前
多路由隔离:构建模块化Agent工具服务器
运维·服务器
想学全栈的菜鸟阿董2 分钟前
通过 Stdio(标准输入/输出)传输机制,实现 CrewAI 与本地 MCP 服务器的连接
运维·服务器·github
K_i13417 分钟前
Tomcat核心原理与运维实战指南
java·运维·tomcat
彬彬醤40 分钟前
如何正确选择住宅IP?解析适配跨境、流媒体的网络工具
服务器·开发语言·网络·网络协议·tcp/ip
帅得不敢出门2 小时前
Linux服务器编译android报no space left on device导致失败的定位解决
android·linux·服务器
用户31187945592182 小时前
申威服务器安装Java11(swjdk-11u-9.ky10.sw_64.rpm)详细操作步骤(附安装包)
linux
ajassi20002 小时前
开源 Linux 服务器与中间件(十一)Emqx服务器消息的订阅和发送(mqtt测试)
linux·服务器·开源
平生不喜凡桃李3 小时前
Linux网络层:IP
linux·运维·tcp/ip
塔能物联运维3 小时前
物联网设备运维中的自动化合规性检查与策略执行机制
java·运维·物联网·struts·自动化
阿方索3 小时前
虚拟化技术实践指南:KVM 与 VMware ESXi 部署全流程
linux·运维·服务器