Linux与Hadoop伪分布式实验:搭建、配置与避坑指南

发布时间:2026/10/7 3:50:34
Linux与Hadoop伪分布式实验:搭建、配置与避坑指南 简介分布式计算是大数据领域的基础技术而Linux系统作为其底层支撑提供了稳定的运行环境。Hadoop作为一个开源分布式框架通过HDFS存储和MapReduce计算模型实现了海量数据的可靠处理。伪分布式模式能够在单台机器上模拟集群环境是理解分布式原理与快速上手的有效途径。本文围绕Linux常用命令、Hadoop环境搭建、配置文件调整、格式化与启停流程以及MapReduce作业提交等核心环节梳理了实验中最常见的报错案例与排查逻辑。同时结合Shell脚本自动化的实践帮助读者建立从环境准备到任务运行的系统化操作思路为后续学习真实集群部署和分布式计算提供扎实基础。1. 为什么实验一永远是 Linux 和 Hadoop先把“能用”变成“会查”几乎所有大数据学习路线第一站都指向同一个动作在 Linux 上把 Hadoop 跑起来。这不是课程设计偷懒而是后续所有实验的地基——你后面写 MapReduce、跑 Hive、调 HDFS 权限本质都是在 Linux 进程和文件系统之上操作。实验一的目的不是让你背命令而是建立“环境出问题知道去哪查”的肌肉记忆。这个实验通常覆盖两块常用 Linux 操作文件管理、权限、进程、网络、Shell 脚本和 Hadoop 伪分布式操作安装、配置、格式化、启停、HDFS 文件上传下载、提交一个词频 Job。伪分布式是单机模拟集群适合第一次接触分布式的人理解“角色”和“通信”的概念。如果你能在一台虚拟机上把这两个流程完整走通后面接触真实集群、HA 部署、Zookeeper 整合时至少不会因为“连不上节点”“进程起不来”这种基础问题卡住。下面按我实际的实验教学顺序展开先快速过一遍 Linux 必须掌握的命令边界再完整走 Hadoop 伪分布式搭建到跑通词频统计最后是一份可以直接抄的避坑清单。2. 实验一 Linux 部分高频命令与面试考点对照2.1 文件与目录你 90% 的时间都在和路径打交道Linux 命令量大但实验一真正需要你“肌肉记忆”的其实不超过 30 条。最重要的不是背全而是知道哪些命令解决哪类问题。我一般按场景分四组要求学生先掌握文件操作组cd、ls、pwd、mkdir -p、cp -r、mv、rm -rf、find、tar。其中tar -zxvf解压 Hadoop 安装包是第一个高频动作rm -rf则是第一个高危动作——我见过不止一个学生把/usr/local/hadoop打成/usr/local/后果自行想象。文本处理组cat、tail -f、grep、awk、sed。Hadoop 的日志排查几乎全靠tail -f和grep组合。grep ERROR logs/hadoop-*.log比打开日志文件慢慢翻效率高一个量级。权限与用户组useradd、passwd、chown、chmod。伪分布式不强制建新用户但真实集群必须用普通用户运行Root 启动 DataNode 会被拒绝这是 Hadoop 的一个安全限制。网络与进程ifconfig、ping、ss -lntp、ps -ef、free -h、df -h、top。这几个是后续所有“起不来”问题的第一现场端口被占看ss内存不够看free磁盘写满看df。提示ps -ef | grep java是检查 Hadoop 进程是否存活最直接的方式。别只看终端输出“started”进程可能秒退。2.2 三组必须能默写的命令组合第一组合是管道和重定向。实验一里最常用的场景把 NameNode 的启动日志写到文件同时后台继续跑其他命令。写法是# 启动 NameNode 并把输出写到日志文件错误输出也一起重定向 $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode $HADOOP_HOME/logs/namenode.log 21 # 查看刚才启动的 Java 进程过滤出 NameNode ps -ef | grep NameNode | grep -v grep # 统计日志里出现了多少次 ERROR grep -c ERROR $HADOOP_HOME/logs/hadoop-hadoop-namenode.log第一行里的21不是可选项而是必选项——Hadoop 的启动脚本经常把关键报错打到 stderr如果你只重定向 stdout错误信息会直接刷在屏幕上然后丢失排查时少一半线索。21是把标准错误合并进标准输出统一进日志文件。第二行grep -v grep是为了排除grep进程本身这是 Linux 面试题里几乎必考的一个细节。第三行的-c是统计匹配行数不打印具体内容。第二组是ssh localhost免密登录配置。Hadoop 伪分布式启动时脚本会通过 SSH 连接本机来拉起进程如果免密没配好会卡在输入密码。配置过程是标准三步# 生成 RSA 密钥对一路回车不要设置 passphrase ssh-keygen -t rsa -P -f ~/.ssh/id_rsa # 把公钥追加到 authorized_keys cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys # 收紧权限否则 SSH 出于安全策略会拒绝使用该密钥 chmod 600 ~/.ssh/authorized_keys # 验证这条命令如果不再提示输入密码说明配好了 ssh localhost这里有个新手极易翻车的点~/.ssh目录的权限必须是 700authorized_keys必须是 600权限过宽 SSH 会静默忽略密钥文件现象是“每次启动 Hadoop 都要输入密码”。ssh-keygen的-P 参数是设置空口令如果手动交互输入口令启动脚本会卡在密码提示处表现是终端没有任何输出像死机一样。第三组是环境变量。很多学生 Hadoop 装好了一敲hdfs命令提示command not found就是环境变量没写进~/.bashrc# 编辑用户级环境变量文件 vim ~/.bashrc # 在文件末尾追加以下内容 export JAVA_HOME/usr/local/jdk1.8 export HADOOP_HOME/usr/local/hadoop export PATH$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # 让配置立即生效 source ~/.bashrc # 验证三个关键命令 java -version hadoop version echo $HADOOP_HOME注意source只对当前终端生效新开的终端会自动读取~/.bashrc。我见过学生配完环境变量后不source直接敲hadoop version报错然后重新打开一个终端反而好了——这不是玄学就是终端会话没有重新加载配置。另外$PATH里的顺序有讲究把$HADOOP_HOME/bin放在$PATH前面可以避免系统里其他目录下存在同名旧版命令时优先被找到。2.3 Shell 脚本实验一真正拉开差距的地方实验一通常要求写一个简单的 Shell 脚本常见题目是“批量创建目录并检查结果”。这个环节我建议至少掌握以下三种能力变量赋值与引用、for循环遍历、if条件判断。一个能直接交作业的参考写法如下#!/bin/bash # 批量创建实验数据目录并校验创建结果 BASE_DIR/user/hadoop/experiment DIRS(input output tmp logs) for dir in ${DIRS[]}; do # -p 允许目录已存在时不报错 hdfs dfs -mkdir -p $BASE_DIR/$dir # 每次创建后都校验存在性用退出码判断 if hdfs dfs -test -d $BASE_DIR/$dir; then echo [OK] $BASE_DIR/$dir else echo [FAIL] $BASE_DIR/$dir exit 1 fi done这段脚本的关键不在循环本身而在hdfs dfs -test -d这个校验动作——很多学生只创建不校验脚本执行完也不知道有没有成功。-test -d是 HDFS 提供的存在性检查命令返回退出码 0 表示目录存在。exit 1是让脚本带错误码退出这样你可以在 CI 或后续脚本里通过$?拿到失败信号。参数说明${DIRS[]}取数组全部元素${dir}加引号是防止目录名带空格时被拆成多个参数。这个习惯在 Linux 脚本里是硬性要求不引号包裹变量早晚遇到一次诡异报错。3. 建立 Hadoop 伪分布式从选型到三个核心配置文件的取舍3.1 版本选型与前置条件决定你的排查成本实验一最常翻车的环节其实不在操作而在开始之前——版本选错后面每一步都是在还债。我在实验课上的建议非常固定Hadoop 3.3.x 配 JDK 8。这个组合的可靠程度远超 Hadoop 2.x而且网上可查到的报错案例几乎全覆盖。一个更现实的原因是绝大多数教材和实验指导书还在用 Hadoop 2.7.x 的写法端口是 50070配置文件里还是slaves文件。到了 3.xWeb 端口变成了 9870slaves改名为workersyarn.resourcemanager.webapp.address默认端口从 8088 变成 8088 没变但mapred-site.xml需要手动指定调度器才能跑作业。如果你照着老教程配 3.x第一关就会卡在网页打不开。前置条件里有一个非 Hadoop 本身但决定成败的点免密 SSH。伪分布式虽然只在本机但启动脚本仍要通过 SSH 拉起进程前面 2.2 节已经给了配置命令这里不再重复。另外建议关闭防火墙如果你用的是虚拟机Hadoop伪分布式搭建常见做法里也是虚拟机上做systemctl stop firewalld一条命令能省掉后续无数网络不通的排查时间。有些人担心关防火墙有风险在实验环境这是合理的——你连外网都不需要。注意JDK 版本不建议选 11 或 17。Hadoop 3.3 官方支持 Java 8 和 11但很多第三方工具链比如后续实验要用的 Hive 早期版本对 11 兼容性一般。实验室统一用 8遇到问题你搜到的解决方案最多。3.2 安装目录规划与解压一次到位不要边装边改伪分布式不需要像集群那样规划三台机器但目录规划仍然重要。常见的目录约定如下# 创建统一的软件安装目录 sudo mkdir -p /usr/local/bigdata # 把 Hadoop 安装包解压到该目录 sudo tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local/bigdata # 建立无版本号的软链接方便升级和脚本引用 sudo ln -s /usr/local/bigdata/hadoop-3.3.4 /usr/local/bigdata/hadoop # 给当前用户授权避免每次操作都加 sudo sudo chown -R $USER:$USER /usr/local/bigdata软链接这个动作值得养成习惯你的脚本里写死/usr/local/bigdata/hadoop以后换版本只要改链接不需要改脚本。chown -R授权后你就不需要以 root 身份运行 Hadoop——Hadoop 官方明确不推荐用 root 运行 DataNode部分版本会直接拒绝启动。然后是环境变量。你可能会想“前面已经写过一遍了”但 Hadoop 安装完写的是HADOOP_HOME指向解压根目录同时还需要确认JAVA_HOME在 Hadoop 自己的脚本里能被读到。Hadoop 的hadoop-env.sh里有默认的JAVA_HOME设置但如果你系统里装了多个 JDK必须在hadoop-env.sh里显式指定# 编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.sh export JAVA_HOME/usr/local/jdk1.8漏掉这一步的典型报错是启动时提示JAVA_HOME is not set and could not be found但你的java -version明明正常——因为 Hadoop 脚本默认不读~/.bashrc里的变量它读的是自己的hadoop-env.sh。这是 Hadoop 安装与配置里最经典的坑之一。3.3 核心配置文件的参数选择三份文件决定一切伪分布式只需要改三份文件core-site.xml、hdfs-site.xml、yarn-site.xml以及复制一份mapred-site.xml。修改前先备份是基本操作我一般执行cp core-site.xml core-site.xml.bak改坏了随时后悔药。core-site.xml指定 NameNode 的地址和 HDFS 临时目录示例配置如下configuration !-- NameNode 的 RPC 通信地址端口 9000 是 Hadoop 默认 -- property namefs.defaultFS/name valuehdfs://localhost:9000/value /property !-- 临时目录必须显式指定默认值在 /tmp 下系统重启会被清空导致元数据丢失 -- property namehadoop.tmp.dir/name value/usr/local/bigdata/hadoop/tmp/value /property /configuration这里有个血泪经验hadoop.tmp.dir如果留默认值/tmp/hadoop-hadoopLinux 重启后/tmp被清空你的 NameNode 会找不到 fsimage启动直接失败表现是格式化过也起不来。很多“昨天还能跑今天全挂了”的案例都是这个原因。hdfs-site.xml伪分布式只需关心副本数和 NameNode 元数据目录configuration !-- 伪分布式只有一台机器副本数必须设为 1默认 3 会一直报缺副本 -- property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name valuefile:///usr/local/bigdata/hadoop/namenode/value /property property namedfs.datanode.data.dir/name valuefile:///usr/local/bigdata/hadoop/datanode/value /property /configurationdfs.replication设为 1 是伪分布式能正常运行的必要条件不设的话 DataNode 会一直尝试复制副本到其他节点永远处于Under-Replicated状态。元数据目录单独指定到非临时目录同样是为了避免系统重启丢数据。file://前缀表示使用本地文件系统路径如果你不写这个前缀Hadoop 会当成 HDFS 路径处理然后报路径不存在。yarn-site.xml里有一个伪分布式特有的坑如果你不设置资源管理器调度器跑 MapReduce 作业时会报“无法初始化调度器”或者卡在 ACCEPTED 状态。标准配置如下configuration !-- 伪分布式必须走单机模式否则 NodeManager 无法注册 -- property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.nodemanager.aux-services.mapreduce_shuffle.class/name valueorg.apache.hadoop.mapred.ShuffleHandler/value /property !-- 缺少这一项MapReduce 作业会一直处于 ACCEPTED 不执行 -- property nameyarn.resourcemanager.scheduler.class/name valueorg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler/value /property /configurationaux-services是 NodeManager 辅助服务的注册口MapReduce 的 Shuffle 阶段必须通过它传递中间结果漏配的表现是作业提交后卡在INFO mapreduce.Job: Running job但进度永远不动。最后一份mapred-site.xml在此版本已不再默认生成需要手动复制一份模板然后指定框架为 yarncp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml4. 格式化与启停最容易“做对了一遍但运行全错”的环节4.1 格式化 NameNode 的时机与不可逆性格式化 NameNode 生成的是 HDFS 的元数据镜像只在第一次启动前需要执行。命令很简单hdfs namenode -format输出最后几行能看到successfully formatted就算成功。真正重要的是理解三个边界第一格式化会清空当前dfs.namenode.name.dir下所有元数据。如果你之前已经往 HDFS 里放过文件格式化后会丢失数据层面的后悔药只能靠恢复 fsimage 备份普通实验没有备份就是不可逆的。第二格式化不能解决启动失败问题。我遇到太多学生一看到 NameNode 起不来第一反应就是重新格式化。如果失败原因是端口被占、内存不足、配置路径错误格式化一万次也没用。格式化只应在两种情况下执行全新安装后的首次启动或者明确要丢弃全部 HDFS 元数据。第三格式化后必须检查 name 和 data 目录是否生成。执行完hdfs namenode -format之后去$HADOOP_HOME/namenode/current下看是否有fsimage_*文件没有就说明格式化没有真正成功。常见原因是dfs.namenode.name.dir路径权限不对当前用户写不进去。4.2 一键启停组合与分步排查逻辑伪分布式启动有两种路径一键启动和分批启动。实验教学阶段我不建议直接用start-all.sh因为一旦某个进程起不来排错范围太大。正确路径是先start-dfs.sh启 HDFS再start-yarn.sh启 YARN分开看日志# 启动分布式文件系统NameNode、DataNode、SecondaryNameNode start-dfs.sh # 启动资源管理框架ResourceManager、NodeManager start-yarn.sh # 验证启动结果必须看到 4 个 Java 进程 jpsjps是 JDK 自带的进程查看命令伪分布式正常情况下应输出NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager共 5 个进程。少一个问题就在少的那一个上不要嫌麻烦逐个排查。进程的日志都在$HADOOP_HOME/logs目录下命名规律是hadoop-用户名-进程名-主机名.log。比如用户是 hadoop进程是 namenode文件就是hadoop-hadoop-namenode-localhost.log。排查顺序我一般固定为# 看进程是否存在 jps # 看对应日志末尾 30 行 tail -30 $HADOOP_HOME/logs/hadoop-hadoop-namenode-localhost.log # 看端口监听状态NameNode RPC 9000Web 9870 ss -lntp | grep -E 9000|9870这三个命令能过滤掉 80% 的启动问题。注意jps输出里看到进程名称只是表象端口打开才说明服务真的可用。4.3 HDFS 目录初始化与 Web UI 验证Hadoop 启动成功后HDFS 根目录默认存在但你需要为当前用户创建 home 目录否则后续上传文件会报权限错误# 创建用户目录 hdfs dfs -mkdir -p /user/hadoop # 给当前用户授权 hdfs dfs -chown -R hadoop:hadoop /user/hadoop # 验证根目录 hdfs dfs -ls /Web UI 验证在 3.x 版本是http://localhost:9870注意不是 2.x 的 50070。打开页面后先看两件事Datanodes一栏数字是否为 1Live Nodes是否显示 1 个节点。如果这里显示 0说明 DataNode 没注册上去日志看hadoop-hadoop-datanode-localhost.log里的报错——最常见的是dfs.datanode.data.dir目录权限或者磁盘空间不足。YARN 的资源管理页面在http://localhost:8088打开后看Active Nodes是否为 1。如果显示 0大概率是yarn.nodemanager.aux-services配置缺失返回 3.3 节检查配置。5. 跑通第一个 HDFS 与 MapReduce 作业从命令到提交任务的完整闭环5.1 HDFS 常用命令与 Linux 命令对照记忆实验一的目标之一是对比 HDFS 与 Linux 文件操作。HDFS 命令通过hdfs dfs调用大部分语义与 Linux 对应命令一致但也有差异。核心命令清单如下# 创建目录-p 表示递归创建 hdfs dfs -mkdir -p /user/hadoop/input # 从本地上传文件到 HDFS hdfs dfs -put /local/path/wordcount.txt /user/hadoop/input/ # 列出 HDFS 目录内容按人类可读格式显示大小 hdfs dfs -ls -h /user/hadoop/input # 查看文件内容适合小文件大文件别用 hdfs dfs -cat /user/hadoop/input/wordcount.txt # 下载 HDFS 文件到本地 hdfs dfs -get /user/hadoop/output/part-r-00000 /local/path/ # 删除目录-rm -r 递归删除和 Linux 行为一致 hdfs dfs -rm -r /user/hadoop/output一个必须强调的差异hdfs dfs -put是单向上传传完本地文件可以删而hdfs dfs -get是单向下载不会影响 HDFS 上的原文件。另外-cat对大文件要谨慎它会把文件内容全部输出到终端十几个 GB 的文件会让你的终端卡死排查时用-tail只看末尾更安全。5.2 提交第一个 MapReduce 词频统计 Job跑通示例 Jar 是实验一的最终验收点。Hadoop 安装包自带了一个含示例程序的 Jar路径在$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar。先用 HDFS 准备数据# 准备本地测试数据格式为每行一个单词或一句话 echo hello hadoop hello world /tmp/wc.txt echo hadoop is useful hello world /tmp/wc.txt # 上传到 HDFS hdfs dfs -mkdir -p /user/hadoop/input hdfs dfs -put /tmp/wc.txt /user/hadoop/input/ # 提交词频统计作业 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \ wordcount /user/hadoop/input/wc.txt /user/hadoop/output/wc # 查看输出目录part-r-00000 是结果文件 hdfs dfs -ls /user/hadoop/output/wc # 查看结果内容 hdfs dfs -cat /user/hadoop/output/wc/part-r-00000提交命令里的wordcount是示例程序的主类名后面依次是输入路径、输出路径。有三个需要特别注意的参数输出路径必须是不存在的目录Hadoop 不会覆盖旧输出第二次跑同样的路径会直接报FileAlreadyExistsExceptionhadoop jar命令必须在 Hadoop 安装目录下有可写权限时执行否则会报权限错如果 YARN 起不来作业会在提交阶段卡住表现为终端长时间无输出。运行过程中终端会滚动输出进度信息。关键看两行map 100% reduce 100%表示完成Job complete后出现Finished in xx seconds就算成功。如果 map 比例一直不动去 YARN 页面看容器日志常见原因是内存设置不足需要调yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb。5.3 扩展把 WordCount 改成统计 HDFS 文件大小分布如果你学有余力推荐做一个简单变体训练把输入换成 HDFS 上所有文件的路径列表统计不同大小区间的数量。做法是先hdfs dfs -ls -R /user/hadoop重定向到本地文件再把这个文件作为 WordCount 的输入。这个练习的价值在于让你观察 HDFS 对文本输入的分片逻辑——每行一个文件路径每个分片会被一个 Map 任务处理这个机制后面学数据倾斜时非常关键。6. 避坑伪分布式搭建和高频作业提交的 5 条典型踩坑记录这个实验从搭建到提交作业各版本 Hadoop 的报错表现不同但底层原因高度趋同。我整理了 5 个最典型的案例每个都是“现象 → 原因 → 解决”的结构对照你自己的报错信息排查即可。第一条格式化后 NameNode 启动失败日志提示NameNode is not formatted。原因非常迷惑——你明明格式化过但格式化过程没有把元数据写入dfs.namenode.name.dir配置的路径。常见原因是配置里路径写的是相对路径如./namenodeHadoop 解析后落在启动目录下而目录在格式化时不存在。解决方法是先把hdfs-site.xml里两个目录改为绝对路径删掉旧目录重新格式化再启动。任何时候配置变更后格式化前先rm -rf掉旧的 name 和 data 目录内容避免元数据版本不一致。第二条启动正常Web UI 能打开但 Datanode 数为 0。日志里报Block pool ID needed或Incompatible namespaceID。原因是 DataNode 的数据目录里保留了旧集群的 namespace 标识与新格式化的 NameNode 不匹配。解决方法是在dfs.datanode.data.dir指定的路径下删掉current目录然后重启 DataNode 让它重新注册。注意这个操作会让该 DataNode 上已有的数据块全部失效但伪分布式场景下数据本来就是一式一份删了没损失。第三条跑 WordCount 时卡在INFO mapreduce.Job: Running job不动进度一直 0%。第一个要查的是 ResourceManager 是否活着日志在hadoop-hadoop-resourcemanager-localhost.log里面如果有Scheduler相关的异常基本就是yarn-site.xml缺少yarn.resourcemanager.scheduler.class这一项。加上后重启 YARN问题通常会消失。如果日志里没有异常查看当前用户是否有 HDFS 的写权限——hdfs dfs -ls /user/hadoop能列出内容说明正常不能就先执行 4.3 节的chown。第四条hdfs dfs -put上传文件时提示No such file or directory但你明明创建了目标目录。排查这个问题的顺序是先hdfs dfs -ls /看根目录下有哪些路径很多学生创建目录时用了-p递归创建但给的路径是多级嵌套比如/user/hadoop/input/2024而/user/hadoop不存在-p虽然会递归创建但创建完检查时容易看错层级。更隐蔽的原因是当前用户对/user/root路径无写权限需要先hdfs dfs -chown -R或改用sudo -u hdfs hdfs dfs -put。第五条系统重启后发现 Hadoop 起不来报各种元数据找不到。原因就是 3.3 节说的hadoop.tmp.dir默认落在/tmpLinux 重启清空。解决方法是确认core-site.xml里已显式配置非临时目录路径然后把 name 和 data 目录也一起改到独立位置重新格式化。这条是集群部署策略里最基本的一条——重要数据永远不放在/tmp下放到专门的数据目录。提示排查任何报错第一动作永远是看日志不是重新执行命令。日志文件名带主机名同一个进程的日志可能有两个文件一个以.log结尾是常规日志一个以.out结尾是脚本输出两个都要看报错往往在.log里更详细。7. 最后的实用技巧写两个一键脚本让启停和验证变成一件事实验一做完后你会发现每天的启动流程是固定的先start-dfs.sh再start-yarn.sh然后jps看进程还要确认端口和 Web 页面。这些动作值得固化成一个脚本也正好是实验一 Linux Shell 部分的进阶练习。下面是我常用的两个脚本可以直接参考。第一个脚本负责完整启动并等待服务就绪#!/bin/bash # hadoop-start.sh一键启动 Hadoop 伪分布式并验证 # 错误时立即退出避免带着错误状态继续执行 set -e echo [1/4] 启动 HDFS... start-dfs.sh echo [2/4] 启动 YARN... start-yarn.sh echo [3/4] 等待 10 秒让进程完全注册... sleep 10 echo [4/4] 验证进程状态... # 定义需要检查的进程列表 PROCS(NameNode DataNode SecondaryNameNode ResourceManager NodeManager) for proc in ${PROCS[]}; do # 查询进程数量-c 计数 count$(ps -ef | grep $proc | grep -v grep | wc -l) if [ $count -ge 1 ]; then echo [OK] $proc 运行中 else echo [FAIL] $proc 未启动请查看 $HADOOP_HOME/logs/ 下对应日志 fi done第二个脚本用于安全停止并检查进程残留。停止时注意顺序先停 YARN 再停 HDFS停止的日志同样输出到独立文件#!/bin/bash # hadoop-stop.sh一键停止 Hadoop 伪分布式 echo 停止 YARN... stop-yarn.sh $HADOOP_HOME/logs/yarn-stop.log 21 echo 停止 HDFS... stop-dfs.sh $HADOOP_HOME/logs/hdfs-stop.log 21 sleep 5 # 检查是否还有残留的 Java 进程 echo 残留进程检查... ps -ef | grep java | grep -v grep || echo 无残留 Java 进程停止完成两个脚本都建议放到/usr/local/bin并加执行权限这样任何目录下都能直接敲命令chmod x hadoop-start.sh hadoop-stop.sh sudo mv hadoop-start.sh hadoop-stop.sh /usr/local/bin/写完脚本后建议你做一次完整的“冷启动”验证关机重启虚拟机然后只用这两个脚本完成整个环境的拉起和关闭中途不执行任何手工命令。这个演练能一次性暴露所有你没配好的环境变量、没写对的路径、以及哪些配置只对当前终端有效。说一个我自己的教训最初我写启动脚本时没有加set -e有一次 DataNode 启动失败脚本继续往后执行jps显示少一个进程但我因为看到[STARTED]的绿色输出就以为成功了直接跑作业卡了半小时。后来所有脚本一律加set -e启动失败立刻中断问题暴露在第一时间。这个习惯从实验一养成后面你写任何自动化脚本都用得上。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询