未记录事实核验 · 状态:维护中

记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。

warning 适用范围与待维护事项

本文面向具备Linux、Java、SSH和多机网络配置能力的读者,仅用于隔离、可重建且无真实业务数据的Hadoop 3.3.6教学环境,不是生产部署或高可用方案。Java路径、发行版软件包、远端环境变量及YARN容器配置需逐节点确认;完全分布式部分还需调整继承的JobHistory地址。禁止对已有集群直接执行清空目录或NameNode格式化。示例中的root代理通配授权、关闭HDFS权限检查及全网监听不应直接用于共享或公网环境;本文未完成实机端到端验证。

🛠️ Hadoop环境搭建 - 从单机到集群的完整部署指南

abstract 📋 本节概览

  • 🎯 学习目标:掌握Hadoop不同模式的安装配置,搭建完整的开发和测试环境
  • 📚 前置知识:Hadoop概念与生态 | 基础Linux命令 | Java环境配置
  • ⏱️ 预计用时:120分钟
  • 🔧 技术重点:三种部署模式、核心配置文件、集群规划、常见问题排查

🎯 Hadoop部署模式概览

note 💡 Hadoop的三种部署模式就像学开车

  • 单机模式(Standalone):就像在空地上练车,没有交通规则,简单直接
  • 伪分布式(Pseudo-Distributed):就像在驾校练车场,有模拟的真实环境
  • 完全分布式(Fully Distributed):就像在真实道路上开车,多车协作,复杂但实用

三种模式对比

| 部署模式 | 进程数量 | 适用场景 | 数据存储 | 复杂度 | |---|---|---|---|---|---| | 单机模式 | 单个JVM进程 | 开发调试、算法验证 | 本地文件系统 | ⭐ | | 伪分布式 | 多个JVM进程,单机运行 | 学习测试、功能验证 | HDFS | ⭐⭐⭐ | | 完全分布式 | 多机多进程 | 生产环境、大规模数据处理 | HDFS | ⭐⭐⭐⭐⭐ |


🔧 环境准备

系统要求

# 最小配置要求
CPU: 2核心
内存: 4GB (推荐8GB+)
磁盘: 50GB可用空间
网络: 千兆网卡

# 推荐配置
CPU: 4核心+
内存: 16GB+
磁盘: 500GB+ SSD
网络: 千兆网卡,低延迟

# 操作系统支持
- Ubuntu 18.04+ / CentOS 7+ / RHEL 7+
- macOS 10.14+ (仅用于开发)
- Windows 10 (通过WSL2)

基础软件安装

# Ubuntu/Debian系统
sudo apt update
sudo apt install -y openjdk-8-jdk openssh-server rsync

# CentOS/RHEL系统  
sudo yum update
sudo yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel openssh-server rsync

# 验证Java安装
java -version
javac -version

# 设置JAVA_HOME环境变量
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc
source ~/.bashrc

# 验证JAVA_HOME
echo $JAVA_HOME

SSH免密登录配置

note 💡 为什么需要SSH免密登录?

本文的Hadoop启停脚本通过SSH在目标节点执行命令,SSH免密登录就像给脚本发了一张"通行证",避免每次远程执行都要输入密码;HDFS和YARN服务间通信本身并不依赖SSH。

# 1. 生成SSH密钥对
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 2. 将公钥添加到授权文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

# 3. 测试SSH免密登录
ssh localhost
# 第一次连接需要确认,输入 yes

# 4. 验证免密登录成功
ssh localhost date
# 应该直接显示日期,无需密码

🎯 单机模式部署

note 💡 单机模式的特点

就像一个人的乐队,所有乐器都由一个人演奏。适合:

  • 算法开发和调试
  • 学习MapReduce编程
  • 快速原型验证

下载和安装Hadoop

# 1. 下载Hadoop(选择稳定版本)
cd ~
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

# 2. 解压安装
tar -xzf hadoop-3.3.6.tar.gz
sudo mv hadoop-3.3.6 /opt/hadoop
sudo chown -R $USER:$USER /opt/hadoop

# 3. 设置环境变量
echo 'export HADOOP_HOME=/opt/hadoop' >> ~/.bashrc
echo 'export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop' >> ~/.bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
source ~/.bashrc

# 4. 验证安装
hadoop version

单机模式配置

# 配置hadoop-env.sh(JAVA_HOME路径需与本机Java安装位置一致)
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh

# 单机模式无需修改其他配置文件,使用默认配置即可

运行WordCount示例

# 1. 创建测试数据
mkdir ~/input
echo "Hello World Bye World" > ~/input/file01.txt
echo "Hello Hadoop Goodbye Hadoop" > ~/input/file02.txt

# 2. 运行WordCount程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount ~/input ~/output

# 3. 查看结果
cat ~/output/part-r-00000

# 应该看到类似输出:
# Bye     1
# Goodbye 1
# Hadoop  2
# Hello   2
# World   2

🏗️ 伪分布式模式部署

note 💡 伪分布式模式的特点

就像一个人分饰多角,模拟真实的分布式环境。特点:

  • 所有进程在同一台机器上运行
  • 使用HDFS存储数据
  • 具备完整的Hadoop功能
  • 适合学习和开发测试

核心配置文件

Hadoop的配置主要涉及4个核心XML文件及hadoop-env.sh环境变量文件:

%%{init: {"theme":"base","themeVariables":{"fontFamily":"PingFang SC, -apple-system, Source Han Serif SC, serif","fontSize":"16px","background":"#FDFBF5","primaryColor":"#FDFBF5","primaryTextColor":"#2D2A26","primaryBorderColor":"#6E6A60","secondaryColor":"#E8EFE8","secondaryBorderColor":"#8FA890","secondaryTextColor":"#2D2A26","tertiaryColor":"#FDFBF5","tertiaryBorderColor":"#9A9488","tertiaryTextColor":"#6E6A60","lineColor":"#6E6A60","textColor":"#2D2A26","mainBkg":"#FDFBF5","nodeBorder":"#2D5A3D","clusterBkg":"#F3EEDF","clusterBorder":"#9A9488","edgeLabelBackground":"#FDFBF5"},"flowchart":{"htmlLabels":true,"curve":"basis","padding":20,"nodeSpacing":60,"rankSpacing":70,"useMaxWidth":false},"themeCSS":".node rect, .node polygon, .node circle { stroke-width: 1.5px; } .edgePath .path { stroke-width: 1.5px; } .cluster-label .nodeLabel, .cluster-label foreignObject { color: #2D2A26 !important; } .edgeLabel, .edgeLabel foreignObject { color: #2D2A26 !important; background-color: #FDFBF5; } .edgeLabel rect { fill: #FDFBF5; }"}}%%
flowchart TB
    classDef default fill:#FDFBF5,stroke:#6E6A60,color:#2D2A26,stroke-width:1.5px
    classDef startend fill:#2D2A26,stroke:#2D2A26,color:#FDFBF5,font-weight:bold
    classDef decision fill:#F6EAD8,stroke:#C08A1A,color:#2D2A26,font-weight:bold
    classDef hub fill:#3B5A80,stroke:#3B5A80,color:#FDFBF5,font-weight:bold
    classDef io fill:#E5EAF0,stroke:#3B5A80,color:#2D2A26
    classDef accent fill:#A6432C,stroke:#A6432C,color:#FDFBF5,font-weight:bold
    classDef storage fill:#F3EEDF,stroke:#9A9488,color:#2D2A26
    A[hadoop-env.sh<br/>环境变量配置]
    B[core-site.xml<br/>核心配置]
    C[hdfs-site.xml<br/>HDFS配置]
    D[mapred-site.xml<br/>MapReduce配置]
    E[yarn-site.xml<br/>YARN配置]
    
    A --> B
    B --> C
    C --> D
    D --> E
    class A,B,C,D,E default

配置core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 指定HDFS的默认文件系统地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
        <description>HDFS的默认URI,所有HDFS操作的入口</description>
    </property>
    
    <!-- 指定Hadoop临时目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/tmp</value>
        <description>Hadoop的临时目录,存储临时文件</description>
    </property>
    
    <!-- 配置代理用户(可选) -->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
</configuration>

配置hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 设置数据副本数量 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
        <description>伪分布式模式设置为1,完全分布式通常设置为3</description>
    </property>
    
    <!-- 指定NameNode数据存储目录 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///opt/hadoop/data/namenode</value>
        <description>NameNode存储元数据的目录</description>
    </property>
    
    <!-- 指定DataNode数据存储目录 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///opt/hadoop/data/datanode</value>
        <description>DataNode存储数据块的目录</description>
    </property>
    
    <!-- 关闭权限检查(开发环境可选) -->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
        <description>关闭HDFS权限检查,简化开发</description>
    </property>
    
    <!-- NameNode Web UI端口 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>0.0.0.0:9870</value>
        <description>NameNode Web界面地址</description>
    </property>
</configuration>

配置mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 指定MapReduce作业运行框架 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>使用YARN作为MapReduce的资源管理器</description>
    </property>
    
    <!-- MapReduce JobHistory Server地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>localhost:10020</value>
        <description>JobHistory服务器地址</description>
    </property>
    
    <!-- MapReduce JobHistory Web UI地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>localhost:19888</value>
        <description>JobHistory Web界面地址</description>
    </property>
    
    <!-- 配置MapReduce应用程序类路径 -->
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>

配置yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 指定ResourceManager地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>localhost</value>
        <description>ResourceManager所在主机名</description>
    </property>
    
    <!-- NodeManager的附属服务 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description>启用MapReduce的shuffle服务</description>
    </property>
    
    <!-- 配置NodeManager的资源检测 -->
    <property>
        <name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
        <value>true</value>
        <description>自动检测硬件资源</description>
    </property>
    
    <!-- 配置虚拟内存比率 -->
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>3</value>
        <description>虚拟内存与物理内存的比率</description>
    </property>
    
    <!-- ResourceManager Web UI地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>0.0.0.0:8088</value>
        <description>ResourceManager Web界面地址</description>
    </property>
</configuration>

启动Hadoop集群

# 1. 创建必要的目录
sudo mkdir -p /opt/hadoop/data/namenode
sudo mkdir -p /opt/hadoop/data/datanode  
sudo mkdir -p /opt/hadoop/tmp
sudo chown -R $USER:$USER /opt/hadoop/data
sudo chown -R $USER:$USER /opt/hadoop/tmp

# 2. 格式化NameNode(仅在首次初始化全新、无业务数据的集群时执行;已有集群不得重新格式化)
hdfs namenode -format

# 出现 "Storage directory ... has been successfully formatted." 表示格式化成功

# 3. 启动HDFS
start-dfs.sh

# 4. 启动YARN
start-yarn.sh

# 5. 检查进程是否启动成功
jps

# 应该看到以下进程:
# - NameNode
# - DataNode  
# - SecondaryNameNode
# - ResourceManager
# - NodeManager

验证集群状态

# 1. 检查HDFS状态
hdfs dfsadmin -report

# 2. 访问Web界面
# NameNode Web UI: http://localhost:9870
# ResourceManager Web UI: http://localhost:8088

# 3. 测试HDFS操作
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/$USER
hdfs dfs -ls /

# 4. 上传测试文件
echo "Hello Hadoop 和 HDFS" > test.txt
hdfs dfs -put test.txt /user/$USER/
hdfs dfs -ls /user/$USER/
hdfs dfs -cat /user/$USER/test.txt

# 5. 运行MapReduce测试
hdfs dfs -mkdir /input
hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /input
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep /input /output 'dfs[a-z.]+'
hdfs dfs -cat /output/part-r-00000

🏢 完全分布式模式部署

note 💡 完全分布式模式的特点

就像一个真正的管弦乐团,每个乐手专注于自己的乐器。特点:

  • 多台机器协同工作
  • 真实的分布式环境
  • 可通过HDFS副本提供数据块容错;本例的单NameNode和单ResourceManager不具备高可用能力,SecondaryNameNode也不是备用NameNode
  • 用于多节点教学和测试;生产部署还需另行设计高可用、安全与运维配置

集群规划

节点 IP地址 运行角色
hadoop-master 192.168.1.100 NameNode、SecondaryNameNode、ResourceManager、DataNode、NodeManager
hadoop-slave1 192.168.1.101 DataNode、NodeManager
hadoop-slave2 192.168.1.102 DataNode、NodeManager

主机配置

# 在所有节点执行
# 1. 设置主机名(每台机器只执行下面与其角色对应的一条命令,不要连续执行三条)
sudo hostnamectl set-hostname hadoop-master  # 在master节点
sudo hostnamectl set-hostname hadoop-slave1  # 在slave1节点
sudo hostnamectl set-hostname hadoop-slave2  # 在slave2节点

# 2. 配置hosts文件(所有节点相同)
sudo tee -a /etc/hosts << EOF
192.168.1.100 hadoop-master
192.168.1.101 hadoop-slave1
192.168.1.102 hadoop-slave2
EOF

# 3. 测试网络连通性
ping hadoop-slave1
ping hadoop-slave2

集群SSH免密配置

# 在master节点执行
# 1. 生成SSH密钥对(如果之前没有生成)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 2. 将公钥复制到所有节点(包括自己)
ssh-copy-id hadoop-master
ssh-copy-id hadoop-slave1
ssh-copy-id hadoop-slave2

# 3. 测试SSH免密登录
ssh hadoop-slave1 date
ssh hadoop-slave2 date

分发Hadoop安装包

# 在master节点执行
# 1. 创建安装目录
for host in hadoop-slave1 hadoop-slave2; do
    ssh $host "sudo mkdir -p /opt/hadoop && sudo chown $USER:$USER /opt/hadoop"
done

# 2. 同步Hadoop安装目录
for host in hadoop-slave1 hadoop-slave2; do
    rsync -avz /opt/hadoop/ $host:/opt/hadoop/
done

# 3. 同步环境变量配置
for host in hadoop-slave1 hadoop-slave2; do
    scp ~/.bashrc $host:~/.bashrc
    ssh $host "source ~/.bashrc"
done

集群配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-master:9000</value>
        <description>指定master为NameNode</description>
    </property>
    
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/tmp</value>
    </property>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description>数据副本数设置为3</description>
    </property>
    
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///opt/hadoop/data/namenode</value>
    </property>
    
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///opt/hadoop/data/datanode</value>
    </property>
    
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop-master:9870</value>
    </property>
    
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop-master:9868</value>
    </property>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-master</value>
    </property>
    
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop-master:8032</value>
    </property>
    
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop-master:8030</value>
    </property>
    
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop-master:8031</value>
    </property>
</configuration>

配置workers文件

# 编辑workers文件(Hadoop 3.x使用workers,之前版本使用slaves)
cat > $HADOOP_HOME/etc/hadoop/workers << EOF
hadoop-slave1
hadoop-slave2
EOF

# 如果master节点也作为DataNode,可以添加
echo "hadoop-master" >> $HADOOP_HOME/etc/hadoop/workers

分发配置文件

# 在master节点执行
for host in hadoop-slave1 hadoop-slave2; do
    rsync -avz $HADOOP_HOME/etc/hadoop/ $host:$HADOOP_HOME/etc/hadoop/
done

启动完全分布式集群

# 在master节点执行
# 1. 创建数据目录(所有节点)
for host in hadoop-master hadoop-slave1 hadoop-slave2; do
    ssh $host "mkdir -p /opt/hadoop/data/namenode /opt/hadoop/data/datanode /opt/hadoop/tmp"
done

# 2. 格式化NameNode(仅在master首次初始化全新集群时执行;若沿用伪分布式数据,须先制定迁移或重建方案,不得直接重格式化)
hdfs namenode -format

# 3. 启动HDFS(在master执行)
start-dfs.sh

# 4. 启动YARN(在master执行)
start-yarn.sh

# 5. 检查集群状态
hdfs dfsadmin -report
yarn node -list

🌐 Web界面和监控

主要Web界面

组件 默认端口 访问地址 功能
NameNode 9870 http://[hadoop]-master:9870 HDFS状态、文件浏览
SecondaryNameNode 9868 http://[hadoop]-master:9868 检查点信息
ResourceManager 8088 http://[hadoop]-master:8088 YARN资源管理
JobHistory 19888 http://[hadoop]-master:19888 作业历史记录

启动JobHistory服务

# 创建JobHistory目录
hdfs dfs -mkdir -p /tmp/hadoop-yarn/staging/history/done_intermediate
hdfs dfs -chmod -R 1777 /tmp/hadoop-yarn/staging

# 启动JobHistory服务
mapred --daemon start historyserver

# 验证启动
jps | grep JobHistoryServer

🚨 常见问题排查

问题1:NameNode启动失败

# 症状:start-dfs.sh后,jps看不到NameNode进程

# 排查步骤:
# 1. 查看NameNode日志
tail -f $HADOOP_HOME/logs/hadoop-*-namenode-*.log

# 2. 常见原因和解决方法:
# - 重复格式化可能导致clusterId不一致
# 有需保留的数据时:停止相关服务、备份数据与元数据,核查VERSION和日志,优先从一致的备份恢复;不要继续格式化。
# 以下仅为可丢弃教学集群的重建示例,不是已有集群的修复方法。
# 确认全部数据可丢弃并停止HDFS后,才可手动执行;多节点重建还须统一处理各DataNode旧数据。
# rm -rf /opt/hadoop/data/namenode/*
# rm -rf /opt/hadoop/data/datanode/*
# hdfs namenode -format

# - JAVA_HOME未设置(路径需与本机Java安装位置一致)
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh

# - 端口被占用
netstat -tulpn | grep :9000
sudo kill -9 <PID>

问题2:DataNode连接不上NameNode

# 症状:DataNode进程存在但不能连接到NameNode

# 排查步骤:
# 1. 检查网络连通性
ping hadoop-master
telnet hadoop-master 9000

# 2. 检查防火墙设置
sudo ufw status
sudo ufw allow 9000
sudo ufw allow 9870

# 3. 检查clusterId是否一致
cat /opt/hadoop/data/namenode/current/VERSION
cat /opt/hadoop/data/datanode/current/VERSION

# 如果clusterId不一致,先核查是否连接了错误的NameNode或曾误格式化;不要再次格式化NameNode。
# 有需保留的数据时,先停止受影响的DataNode并备份,按一致性恢复方案处理。
# 仅当该DataNode全部数据可丢弃、NameNode状态正确且集群有可用副本,或整个教学集群允许重建时,才可清空其旧数据并重新加入:
# hdfs --daemon stop datanode
# rm -rf /opt/hadoop/data/datanode/*
# hdfs --daemon start datanode

问题3:YARN NodeManager启动失败

# 症状:NodeManager无法启动或频繁重启

# 排查步骤:
# 1. 查看NodeManager日志
tail -f $HADOOP_HOME/logs/hadoop-*-nodemanager-*.log

# 2. 常见问题解决:
# - 内存配置问题
# 编辑yarn-site.xml,降低内存要求
<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2048</value>
</property>

# - 虚拟内存检查过严
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

问题4:SSH连接问题

# 症状:start-dfs.sh时提示密码或连接被拒绝

# 排查步骤:
# 1. 检查SSH服务状态
sudo systemctl status ssh
sudo systemctl start ssh
sudo systemctl enable ssh

# 2. 检查SSH密钥权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys

# 3. 测试SSH连接详细信息
ssh -v hadoop-slave1

问题5:端口冲突

# 检查端口占用情况
netstat -tulpn | grep :9000
netstat -tulpn | grep :8088

# 修改配置文件中的端口
# 可以在相应的*-site.xml文件中修改端口配置

🔧 集群管理脚本

集群启停脚本

# 创建启动脚本
cat > ~/start-hadoop.sh << 'EOF'
#!/bin/bash
echo "Starting Hadoop Cluster..."
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
echo "Hadoop Cluster Started!"
echo "Web UIs:"
echo "  NameNode: http://$(hostname):9870"
echo "  ResourceManager: http://$(hostname):8088"
echo "  JobHistory: http://$(hostname):19888"
EOF

# 创建停止脚本
cat > ~/stop-hadoop.sh << 'EOF'
#!/bin/bash
echo "Stopping Hadoop Cluster..."
mapred --daemon stop historyserver
stop-yarn.sh
stop-dfs.sh
echo "Hadoop Cluster Stopped!"
EOF

# 设置执行权限
chmod +x ~/start-hadoop.sh ~/stop-hadoop.sh

集群状态检查脚本

cat > ~/check-hadoop.sh << 'EOF'
#!/bin/bash
echo "=== Hadoop Cluster Status ==="
echo "Java Processes:"
jps
echo "HDFS Status:"
hdfs dfsadmin -report | head -20
echo "YARN Nodes:"
yarn node -list
echo "HDFS Usage:"
hdfs dfs -df -h /
EOF

chmod +x ~/check-hadoop.sh

🔗 下一步学习

完成Hadoop环境搭建后,建议继续学习:


最后更新:2024-06-29