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

相关推荐
阿甘正赚.4 分钟前
Linux初学
linux·运维·服务器
物随心转6 分钟前
线程阻塞调用与同步调用的区别
linux
CLOUD ACE21 分钟前
谷歌云服务商 | 借助 BigQuery 完全托管的远程 MCP 服务器,更快地构建数据分析代理
运维·服务器
虚神界熊孩儿22 分钟前
Linux下修改docker和harbor默认网段的方法
linux·docker·harbor
Jay Chou why did22 分钟前
ARM寄存器
linux
以太浮标25 分钟前
华为eNSP模拟器综合实验之- VLAN-QinQ技术解析
运维·网络·华为·信息与通信
乌日尼乐27 分钟前
【Linux】iptables使用详解(RT)
linux
木叶子---39 分钟前
Docker
运维·docker·容器
wdfk_prog39 分钟前
[Linux]学习笔记系列 -- bits
linux·笔记·学习
Xの哲學40 分钟前
Linux epoll 深度剖析: 从设计哲学到底层实现
linux·服务器·网络·算法·边缘计算