大数据开发(Hadoop/Spark 生态)在 Ubuntu 环境下:5 个高频率使用的功能性 Shell 脚本 本文提供了5个高频使用的Shell脚本适用于Ubuntu/WSL环境下的大数据开发Hadoop/Spark生态。包括Hadoop集群健康检查脚本HDFS过期数据清理脚本Spark任务提交脚本Hadoop日志错误分析脚本多节点批量执行命令脚本。每个脚本都包含用途说明、代码实现和关键点解释可直接在WSL环境中运行测试。此外还特别定制了一个WSL学习环境健康检查脚本可全面检测系统资源、目录结构、进程状态等帮助开发者快速掌握环境状况。这些脚本可组合成大数据工具箱提升日常开发效率。5 个高频率使用的功能性 Shell 脚本围绕大数据开发尤其是 Hadoop/Spark 生态在Ubuntu环境下的实际场景给出5 个高频率使用的功能性 Shell 脚本每个都带用途 代码 关键点解释。适合你当前的WSL Ubuntu环境边学边改。脚本 1HDFS / Hadoop 集群健康检查最常用用途一键检查 Hadoop 关键进程是否存活、HDFS 空间、是否进入安全模式。bash#!/bin/bash # check_hadoop.sh - Hadoop 集群健康检查 echo Hadoop 进程状态 for service in NameNode DataNode ResourceManager NodeManager do if ps -ef | grep -v grep | grep -q $service; then echo ✅ $service is running else echo ❌ $service is NOT running fi done echo echo HDFS 整体空间 hdfs dfsadmin -report | grep -E Configured Capacity|DFS Used|DFS Remaining|DFS Used% echo echo 安全模式状态 hdfs dfsadmin -safemode get使用方式bashchmod x check_hadoop.sh ./check_hadoop.sh脚本 2批量清理 HDFS 过期数据运维必用用途删除 HDFS 中超过 N 天的特定目录数据避免小文件堆积。bash#!/bin/bash # clean_old_hdfs_data.sh DAYS_AGO7 HDFS_PATH/user/hadoop/temp_logs echo 删除 ${HDFS_PATH} 中修改时间超过 ${DAYS_AGO} 天的数据... hdfs dfs -ls -R ${HDFS_PATH} | \ awk {print $6 $8} | \ while read mtime path do # 将 HDFS 时间戳转成秒需 date -d 支持WSL 需注意 file_sec$(date -d $mtime %s 2/dev/null) now_sec$(date %s) diff_days$(( (now_sec - file_sec) / 86400 )) if [ $diff_days -gt $DAYS_AGO ]; then echo 删除 $path已有 ${diff_days} 天 hdfs dfs -rm -r -skipTrash $path fi done⚠️ WSL 中date -d可能兼容性不如纯 Linux建议先在测试目录验证。脚本 3Spark 任务一键提交带环境变量用途封装spark-submit自动加载环境变量、JAR 路径、资源参数。bash#!/bin/bash # run_spark_job.sh export HADOOP_CONF_DIR/etc/hadoop/conf export SPARK_HOME/opt/spark export PATH$SPARK_HOME/bin:$PATH APP_JAR/home/mumu/bigdata/spark_jobs/etl_demo.jar MAIN_CLASScom.bigdata.ETLRunner INPUT_PATH/user/hadoop/input/data.parquet OUTPUT_PATH/user/hadoop/output/result_$(date %Y%m%d_%H%M%S) spark-submit \ --master yarn \ --deploy-mode client \ --driver-memory 2g \ --executor-memory 4g \ --num-executors 4 \ --class ${MAIN_CLASS} \ ${APP_JAR} \ --input ${INPUT_PATH} \ --output ${OUTPUT_PATH} if [ $? -eq 0 ]; then echo ✅ Spark 任务成功结果目录${OUTPUT_PATH} else echo ❌ Spark 任务失败请检查日志 exit 1 fi脚本 4分析 Hadoop 日志中 ERROR 频率awk 实战用途统计 YARN / HDFS 日志中各种 ERROR 的出现次数快速定位异常类型。bash#!/bin/bash # analyze_logs.sh LOG_DIR/var/log/hadoop/hdfs echo 统计最近 7 天修改的 .log 文件中的错误类型 find ${LOG_DIR} -name *.log -mtime -7 -exec cat {} \; | \ grep -E ERROR|FATAL | \ awk -F : {print $2} | \ sort | uniq -c | sort -rn | head -20脚本 5多节点批量执行命令跳板机常用用途在多个大数据节点上批量执行同一命令无密码 SSH 为前提。bash#!/bin/bash # batch_cmd.sh NODES(node01 node02 node03) CMD$1 if [ -z $CMD ]; then echo 用法: $0 命令 exit 1 fi for node in ${NODES[]}; do echo ${node} ssh hadoop${node} $CMD echo done使用示例bash./batch_cmd.sh df -h ./batch_cmd.sh jps如何把以上脚本串成一个“大数据工具箱”bashmkdir -p ~/bigdata/scripts # 把上面每个脚本存成对应文件 chmod x ~/bigdata/scripts/*.sh # 可选加入 PATH echo export PATH$PATH:$HOME/bigdata/scripts ~/.bashrc source ~/.bashrc重点总结面试/考试易考场景关键命令或技术点Hadoop 进程检查ps -ef | grep NameNodeHDFS 空间hdfs dfsadmin -reportSpark 提交spark-submit --master yarn ...按时间过滤文件find -mtime -7日志高频错误统计grep ERROR | sort | uniq -c | sort -rnSSH 批量执行ssh userhost cmd日期变量$(date %Y%m%d)如果你愿意下一步我可以帮你把这些脚本改成CentOSnode100也能通用的版本或针对你WSL 实际目录结构定制一个“学习版健康检查脚本”针对我的 WSL 实际目录结构 定制一个“学习版健康检查脚本”下面给你定制一个专门用于你当前 WSL Ubuntu 环境的健康检查脚本。脚本check_wsl_env.sh#!/bin/bash # check_wsl_env.sh - WSL Ubuntu 学习环境健康检查脚本 # 适用环境mumuMuJinqiu (WSL Ubuntu) # 颜色定义 RED\033[0;31m GREEN\033[0;32m YELLOW\033[1;33m BLUE\033[0;34m NC\033[0m # No Color # 头部信息 echo echo WSL Ubuntu 学习环境健康检查 echo echo 用户名: $(whoami) echo 主机名: $(hostname) echo 当前目录: $(pwd) echo 检查时间: $(date %Y-%m-%d %H:%M:%S) echo # 1. 系统信息 echo echo -e ${BLUE} 1. 系统信息${NC} echo ---------------------------------------- if [ -f /etc/os-release ]; then source /etc/os-release echo 发行版: $NAME $VERSION else echo 发行版: 无法获取 fi echo 内核版本: $(uname -r) echo 架构: $(uname -m) # 2. 内存使用 echo echo -e ${BLUE} 2. 内存使用情况${NC} echo ---------------------------------------- free -h # 3. 磁盘使用 echo echo -e ${BLUE} 3. 磁盘使用情况${NC} echo ---------------------------------------- df -h ~ | grep -v Filesystem # 4. 当前目录大小 echo echo -e ${BLUE} 4. 当前目录占用${NC} echo ---------------------------------------- du -sh . 2/dev/null || echo 无法统计权限不足 # 5. 重点目录检查 echo echo -e ${BLUE} 5. 学习目录检查${NC} echo ---------------------------------------- # 检查 bigdata 目录 if [ -d ~/bigdata ]; then echo -e ${GREEN}✅${NC} ~/bigdata 目录存在 BIGDATA_SIZE$(du -sh ~/bigdata 2/dev/null | cut -f1) echo 大小: $BIGDATA_SIZE else echo -e ${RED}❌${NC} ~/bigdata 目录不存在建议创建 fi # 检查 test 目录 if [ -d ~/bigdata/2026/test ]; then echo -e ${GREEN}✅${NC} ~/bigdata/2026/test 目录存在 FILE_COUNT$(find ~/bigdata/2026/test -type f 2/dev/null | wc -l) echo 文件数量: $FILE_COUNT else echo -e ${YELLOW}⚠️${NC} ~/bigdata/2026/test 目录不存在 fi # 检查 scripts 目录 if [ -d ~/bigdata/scripts ]; then echo -e ${GREEN}✅${NC} ~/bigdata/scripts 目录存在 SCRIPT_COUNT$(find ~/bigdata/scripts -name *.sh 2/dev/null | wc -l) echo 脚本数量: $SCRIPT_COUNT else echo -e ${YELLOW}⚠️${NC} ~/bigdata/scripts 目录不存在可存放自定义脚本 fi # 6. 进程检查 echo echo -e ${BLUE}⚙️ 6. 后台进程检查${NC} echo ---------------------------------------- # 检查是否有 Cursor 进程 CURSOR_COUNT$(ps -ef 2/dev/null | grep -c cursor-server | grep -v grep) if [ $CURSOR_COUNT -gt 0 ]; then echo -e ${YELLOW}⚠️${NC} Cursor 远程服务进程数: $CURSOR_COUNT else echo -e ${GREEN}✅${NC} 无 Cursor 后台进程 fi # 检查是否有 node 进程排除 cursor NODE_COUNT$(ps -ef 2/dev/null | grep node | grep -v cursor | grep -v grep | wc -l) if [ $NODE_COUNT -gt 0 ]; then echo -e ${YELLOW}⚠️${NC} 其他 Node.js 进程数: $NODE_COUNT echo 可能是你自己启动的项目 else echo -e ${GREEN}✅${NC} 无其他 Node.js 进程 fi # 7. 环境变量 echo echo -e ${BLUE} 7. 关键环境变量${NC} echo ---------------------------------------- echo PATH 前3项: echo $PATH | tr : \n | head -3 | sed s/^/ / echo echo JAVA_HOME: ${JAVA_HOME:-未设置} echo HADOOP_HOME: ${HADOOP_HOME:-未设置} echo SPARK_HOME: ${SPARK_HOME:-未设置} # 8. 网络端口检查 echo echo -e ${BLUE} 8. 常用端口监听状态${NC} echo ---------------------------------------- check_port() { local port$1 local name$2 if ss -tln 2/dev/null | grep -q :$port ; then echo -e ${GREEN}✅${NC} $name ($port) 正在监听 else echo -e ${RED}❌${NC} $name ($port) 未监听 fi } check_port 22 SSH check_port 3306 MySQL check_port 8080 Tomcat/Proxy check_port 3000 Node.js 开发服务器 # 9. 可用命令检查 echo echo -e ${BLUE} 9. 常用命令可用性${NC} echo ---------------------------------------- check_cmd() { local cmd$1 if command -v $cmd /dev/null; then echo -e ${GREEN}✅${NC} $cmd else echo -e ${RED}❌${NC} $cmd fi } check_cmd java check_cmd python3 check_cmd node check_cmd npm check_cmd git check_cmd curl check_cmd wget check_cmd mysql check_cmd hadoop # 10. 学习进度 echo echo -e ${BLUE} 10. 学习进度建议自填${NC} echo ---------------------------------------- if [ -f ~/.learning_tracker ]; then cat ~/.learning_tracker else echo 未设置学习追踪文件 echo 可创建 ~/.learning_tracker 记录学习进度 fi # 结尾 echo echo echo -e ${GREEN}✅ 检查完成${NC} echo 使用方法1. 创建脚本bash# 进入你的工作目录 cd ~/bigdata/2026/test # 创建脚本文件 nano check_wsl_env.sh # 或 vim check_wsl_env.sh # 把上面完整脚本内容粘贴进去 # 保存并退出nano: CtrlX, Y, Enter2. 添加执行权限bashchmod x check_wsl_env.sh3. 运行脚本bash./check_wsl_env.sh预期输出示例 WSL Ubuntu 学习环境健康检查 用户名: mumu 主机名: MuJinqiu 当前目录: /home/mumu/bigdata/2026/test 检查时间: 2026-05-15 14:30:00 1. 系统信息 ---------------------------------------- 发行版: Ubuntu 22.04.5 LTS 内核版本: 5.10.16.3-microsoft-standard-WSL2 架构: x86_64 2. 内存使用情况 ---------------------------------------- total used free shared buff/cache available Mem: 15G 2.5G 10G 200M 2.5G 12G Swap: 2.0G 0B 2.0G 3. 磁盘使用情况 ---------------------------------------- /dev/sda 250G 45G 205G 18% /home 4. 当前目录占用 ---------------------------------------- 128K . 5. 学习目录检查 ---------------------------------------- ✅ ~/bigdata 目录存在 大小: 450M ✅ ~/bigdata/2026/test 目录存在 文件数量: 12 ⚠️ ~/bigdata/scripts 目录不存在可存放自定义脚本 ⚙️ 6. 后台进程检查 ---------------------------------------- ⚠️ Cursor 远程服务进程数: 2 ⚠️ 其他 Node.js 进程数: 0 可能是你自己启动的项目 7. 关键环境变量 ---------------------------------------- PATH 前3项: /home/mumu/.local/bin /usr/local/sbin /usr/local/bin JAVA_HOME: 未设置 HADOOP_HOME: 未设置 SPARK_HOME: 未设置 8. 常用端口监听状态 ---------------------------------------- ✅ SSH (22) 正在监听 ❌ MySQL (3306) 未监听 ❌ Tomcat/Proxy (8080) 未监听 ❌ Node.js 开发服务器 (3000) 未监听 9. 常用命令可用性 ---------------------------------------- ❌ java ✅ python3 ✅ node ✅ npm ✅ git ✅ curl ✅ wget ❌ mysql ❌ hadoop 10. 学习进度建议自填 ---------------------------------------- 未设置学习追踪文件 可创建 ~/.learning_tracker 记录学习进度 ✅ 检查完成 可选添加学习进度追踪bash# 创建学习进度文件 cat ~/.learning_tracker EOF 大数据学习进度 ✅ Linux 基础命令 ✅ Shell 脚本基础 ⏳ Hadoop 入门 ⏳ HDFS 操作 ❌ MapReduce ❌ Hive ❌ Spark 最后更新: 2026-05-15 EOF再次运行./check_wsl_env.sh第10部分就会显示你的学习进度。./check_wsl_env.sh脚本扩展建议你想添加的功能可加入的检查项检查磁盘空间是否超过80%df -h | awk NR1 $50 80检查系统负载uptime | awk {print $10,$11,$12}检查可更新的软件包数量apt list --upgradable 2/dev/null | wc -l检查某个服务是否运行systemctl is-active --quiet ssh echo 运行中总结这个脚本会帮你全面了解当前 WSL 环境的状态包括系统资源、目录结构、进程、命令可用性。每次学习前跑一遍能快速发现环境问题。