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

相关推荐
Johny_Zhao2 小时前
基于 Docker 的 LLaMA-Factory 全流程部署指南
linux·网络·网络安全·信息安全·kubernetes·云计算·containerd·yum源·系统运维·llama-factory
Wy_编程3 小时前
Linux文件相关命令
linux·运维
喂完待续3 小时前
【Tech Arch】Spark为何成为大数据引擎之王
大数据·hadoop·python·数据分析·spark·apache·mapreduce
wdxylb4 小时前
云原生俱乐部-RH134知识点总结(1)
linux·云原生
黑客影儿4 小时前
Kali Linux 环境中的系统配置文件与用户配置文件大全
linux·运维·程序人生·安全·网络安全·系统安全·学习方法
岚天start4 小时前
Linux系统网络排查工具总结
linux·运维·网络·监控·扫描·连通性·流量
风静雪冷5 小时前
grep命令要点、详解和示例
linux
我是哈哈hh6 小时前
【MySQL】在UBuntu环境安装以及免密码登录入门
linux·数据库·mysql·ubuntu
Lovyk6 小时前
基于 Ansible 与 Jinja2 模板的 LNMP 环境及 WordPress 自动化部署实践
linux·运维·服务器·自动化·ansible