大数据实验第一课:Linux与Hadoop操作避坑指南
简介本资源是大数据系列实验的第一份配套材料面向刚接触大数据技术的高校学生与自学者帮助其搭建后续实验所需的基础环境。内容围绕Linux虚拟机安装、常用Linux命令以及Hadoop伪分布式安装三大模块展开覆盖cd、ls、mkdir、cp、mv、rm、cat、tac等命令的实操练习并引导完成Hadoop 3.1.3伪分布式环境搭建与WordCount实例验证适合零基础入门者按步骤动手实践。资源包内含1个docx文档约289KB以实验指导书形式呈现结构清晰、步骤完整便于对照操作与复习。目前已有974人学习下载可作为大数据课程实验一的参考手册帮助读者快速掌握Linux操作与Hadoop环境配置要点为后续集群与数据处理实验打下基础。1. 大数据实验第一课为什么 Linux 命令和 Hadoop 操作是绕不过去的门槛很多人第一次打开大数据实验指导书看到熟悉常用的 Linux 操作和 Hadoop 操作这个标题第一反应是——这不就是敲几个命令的事吗然后真正上手才发现ls、cd确实五分钟就会了但一到hdfs dfs -put报错、start-dfs.sh启动后jps少一个进程、Permission denied反复出现的时候就彻底卡住了。这个实验看起来简单实际上它是整个大数据方向的地基Linux 是你跟集群对话的语言Hadoop 是你理解分布式存储和计算的第一扇窗。如果这一关靠复制粘贴混过去后面写 MapReduce、调 Spark 的时候会连日志都看不懂。这篇笔记面向的是刚接触大数据实验、手里有一台 Linux 机器虚拟机或云主机都行但不知道从哪下手的人我会把命令背后的逻辑、参数怎么调、报错怎么查按能复现的顺序讲清楚。2. Linux 操作别背命令先搞懂文件系统和权限2.1 为什么大数据实验第一步永远是 LinuxHadoop 生态里几乎所有组件都原生跑在 Linux 上NameNode、DataNode、ResourceManager 这些进程本质上就是 Linux 上的 Java 进程。你在 Windows 上装个模拟环境也能跑但一旦涉及权限、路径、环境变量、进程管理Linux 的那套机制就会直接暴露在你面前。常见做法是准备一台 Ubuntu 或 CentOS 的虚拟机分配 4GB 以上内存、50GB 磁盘因为后面要同时跑多个 Java 进程。我一般建议先确认三件事当前用户是谁、有没有 sudo 权限、系统时间对不对。系统时间不对会导致后面 Hadoop 各节点通信失败这个坑很隐蔽。# 查看当前用户和用户组 whoami id # 查看系统时间和时区 date timedatectl # 查看磁盘和内存确认资源够用 df -h free -hwhoami输出当前用户名id会额外显示 uid、gid 和所属组后面配置 Hadoop 的时候经常需要确认用户归属。df -h用人类可读的方式显示磁盘占用-h就是 human-readable。free -h看内存如果可用内存低于 2GB后面启动多个节点会非常吃力。2.2 文件与目录操作把路径当成你的坐标系大数据实验里最常见的操作就是把本地文件传到 HDFS从 HDFS 拉下来看看某个目录下有什么。这些动作的前提是你对 Linux 路径体系有清晰的认知。绝对路径从/开始相对路径从当前目录开始~代表当前用户的家目录。# 创建实验用的目录结构 mkdir -p ~/bigdata/input mkdir -p ~/bigdata/output # 生成一个测试文件 echo hello hadoop hello bigdata ~/bigdata/input/test.txt # 查看文件内容 cat ~/bigdata/input/test.txt # 复制、移动、重命名 cp ~/bigdata/input/test.txt ~/bigdata/input/test_bak.txt mv ~/bigdata/input/test_bak.txt ~/bigdata/input/test_renamed.txt # 递归查看目录树 ls -lR ~/bigdatamkdir -p的-p表示如果父目录不存在就一起创建避免目录不存在的报错。echo ... 里的是覆盖写入是追加写入这两个符号搞混会丢数据。ls -lR中-l是长格式显示权限和属主-R是递归实验里检查目录结构时很好用。2.3 权限管理chmod 和 chown 到底在改什么Hadoop 的很多报错归根结底是权限问题。Linux 里每个文件有三组权限属主user、属组group、其他人other每组有读r4、写w2、执行x1三种。chmod改权限chown改属主和属组。# 给脚本添加执行权限 chmod x ~/bigdata/run.sh # 用数字方式设置权限属主读写执行属组读执行其他人无权限 chmod 750 ~/bigdata/input # 修改文件属主和属组需要 sudo sudo chown hadoop:hadoop ~/bigdata/input/test.txt # 查看权限 ls -l ~/bigdata/input/test.txtchmod 750拆开看就是 7421读写执行、541读和执行、0无权限。实验里如果 HDFS 目录报Permission denied先看本地文件权限再看 HDFS 上的目录权限两边都要对。chown通常需要 root 或 sudo改之前确认新属主存在。2.4 进程与日志jps 和 tail 是你的听诊器Hadoop 启动后判断是否正常最直接的方式就是看进程和日志。jps是 JDK 自带的工具列出当前用户的所有 Java 进程。# 查看 Java 进程 jps # 实时查看日志最后 50 行 tail -n 50 ~/hadoop/logs/hadoop-*-namenode-*.log # 持续跟踪日志输出 tail -f ~/hadoop/logs/hadoop-*-datanode-*.log # 按关键词搜索日志中的错误 grep -i error\|exception ~/hadoop/logs/hadoop-*-namenode-*.logjps正常应该看到 NameNode、DataNode、SecondaryNameNode 等进程。如果少了某个不要急着重启先去看对应角色的日志。tail -f会持续输出新内容调试启动过程时非常有用按 CtrlC 退出。grep -i忽略大小写\|是或的关系能快速定位异常。3. Hadoop 操作从单机模式到伪分布式的完整路径3.1 三种运行模式实验到底该选哪种Hadoop 有单机模式、伪分布式、完全分布式三种。单机模式不启动任何守护进程只跑本地文件系统适合验证代码逻辑伪分布式在一台机器上模拟多个节点会启动 NameNode、DataNode 等进程适合做实验完全分布式需要多台机器适合真实集群。大数据实验一通常要求伪分布式因为它能让你看到完整的 HDFS 和 YARN 行为又不需要多台机器。选伪分布式之前确认 JDK 已安装、JAVA_HOME已配置、SSH 免密登录已设置。SSH 免密不是可选项Hadoop 启动脚本会通过 SSH 连接本机没配好会一直提示输入密码。# 检查 Java 版本 java -version # 查看 JAVA_HOME echo $JAVA_HOME # 生成 SSH 密钥并配置免密 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # 验证免密登录 ssh localhostssh-keygen -P 表示空密码-f指定密钥文件路径。authorized_keys权限必须是 600否则 SSH 会拒绝使用。ssh localhost如果不需要输密码就说明配置成功。3.2 核心配置文件四个 XML 决定集群行为Hadoop 伪分布式的配置集中在etc/hadoop目录下的几个 XML 文件里。最常改的是core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。!-- core-site.xml指定 HDFS 的默认文件系统地址 -- configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/home/hadoop/hadoopdata/tmp/value /property /configuration!-- hdfs-site.xml设置副本数伪分布式下只能是 1 -- configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name value/home/hadoop/hadoopdata/namenode/value /property property namedfs.datanode.data.dir/name value/home/hadoop/hadoopdata/datanode/value /property /configurationfs.defaultFS里的端口 9000 是 NameNode 的 RPC 端口后面客户端连接就靠它。hadoop.tmp.dir是临时目录默认在/tmp下重启可能被清空建议改到用户目录。dfs.replication在伪分布式下必须设为 1因为只有一个 DataNode设成 3 会一直报副本不足。!-- mapred-site.xml指定 MapReduce 跑在 YARN 上 -- configuration property namemapreduce.framework.name/name valueyarn/value /property /configuration!-- yarn-site.xml配置 ResourceManager 和 NodeManager -- configuration property nameyarn.resourcemanager.hostname/name valuelocalhost/value /property property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property /configurationmapreduce.framework.name设为yarn表示用 YARN 调度如果设成local就退回单机模式了。yarn.nodemanager.aux-services必须包含mapreduce_shuffle否则 MapReduce 任务会卡在 shuffle 阶段。3.3 格式化与启动顺序错了就得重来配置改完后第一次启动前必须格式化 NameNode。格式化只能做一次重复格式化会导致 DataNode 的 clusterID 和 NameNode 不一致集群起不来。# 格式化 NameNode只在首次启动前执行一次 hdfs namenode -format # 启动 HDFS start-dfs.sh # 启动 YARN start-yarn.sh # 验证进程 jpshdfs namenode -format会创建 NameNode 的元数据目录。如果之前格式化过又想重新来需要先停掉所有进程删掉hadoop.tmp.dir、dfs.namenode.name.dir、dfs.datanode.data.dir三个目录再重新格式化。start-dfs.sh和start-yarn.sh分别启动 HDFS 和 YARN 相关进程。jps正常应该看到 NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager 五个进程。3.4 HDFS 常用命令put、get、ls、rm 的正确姿势HDFS 命令基本是hdfs dfs -xxx的形式操作的是 HDFS 上的路径不是本地路径。# 在 HDFS 上创建目录 hdfs dfs -mkdir -p /user/hadoop/input # 上传本地文件到 HDFS hdfs dfs -put ~/bigdata/input/test.txt /user/hadoop/input/ # 查看 HDFS 目录内容 hdfs dfs -ls /user/hadoop/input/ # 查看 HDFS 文件内容 hdfs dfs -cat /user/hadoop/input/test.txt # 下载 HDFS 文件到本地 hdfs dfs -get /user/hadoop/input/test.txt ~/bigdata/output/ # 删除 HDFS 文件 hdfs dfs -rm /user/hadoop/input/test.txt # 递归删除目录 hdfs dfs -rm -r /user/hadoop/input-put和-get是本地与 HDFS 之间传输的核心命令-put后面先跟本地路径再跟 HDFS 路径-get反过来。-rm默认只能删文件删目录要加-r。-cat适合看小文件大文件用-tail看末尾几行。这些命令的参数顺序搞反是新手最常见的错误报错通常是路径不存在。4. 避坑与排查那些让实验卡住的真实问题4.1 jps 少进程从日志倒推原因现象是执行jps后只看到部分进程比如有 NameNode 没有 DataNode。原因通常是 DataNode 的 clusterID 和 NameNode 不一致或者数据目录权限不对。解决方法是先看 DataNode 日志搜索clusterID或Permission关键词如果是 clusterID 不一致删掉 DataNode 数据目录重新启动如果是权限问题用chown把数据目录改回当前用户。4.2 上传文件报 Permission denied现象是hdfs dfs -put提示权限不足。原因可能是 HDFS 上的目标目录属主不是当前用户或者本地文件没有读权限。解决方法是先用hdfs dfs -ls看目标目录的权限和属主用hdfs dfs -chmod或hdfs dfs -chown调整同时确认本地文件ls -l有读权限。伪分布式下如果一直有权限问题可以在core-site.xml里临时把hadoop.http.staticuser.user设成当前用户但不建议在生产环境这么做。4.3 格式化后重启失败现象是第二次执行hdfs namenode -format后集群启动不了。原因是重复格式化导致 NameNode 和 DataNode 的 clusterID 不匹配。解决方法是停掉所有进程删除 NameNode 和 DataNode 的数据目录重新格式化一次然后启动。记住格式化只做一次后面重启只需要start-dfs.sh。4.4 SSH 免密不生效现象是启动脚本一直提示输入密码或者ssh localhost需要密码。原因是authorized_keys权限不对或者密钥没生成。解决方法是确认~/.ssh/authorized_keys权限是 600~/.ssh目录权限是 700密钥文件存在且内容正确。如果还不行用ssh -v localhost看详细调试信息通常会指出具体哪一步失败。4.5 端口被占用现象是启动时报Address already in use。原因是之前的进程没退干净或者端口被其他程序占用。解决方法是用jps看有没有残留的 Java 进程用kill -9杀掉或者用netstat -tlnp | grep 9000查端口占用情况。改端口也可以但要同步改所有相关配置比较麻烦优先杀进程。5. 进阶技巧用一行命令验证集群是否真的健康实验做完不代表集群是健康的。我一般会用一个完整的读写流程来验证本地生成文件、上传 HDFS、跑一个自带例子、看输出、清理现场。这一套走通说明 HDFS 和 YARN 都在正常工作。# 生成一个稍大的测试文件 for i in $(seq 1 1000); do echo line $i hello hadoop; done ~/bigdata/input/big.txt # 上传到 HDFS hdfs dfs -mkdir -p /user/hadoop/wordcount/input hdfs dfs -put ~/bigdata/input/big.txt /user/hadoop/wordcount/input/ # 跑 Hadoop 自带的 WordCount 例子 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \ wordcount /user/hadoop/wordcount/input /user/hadoop/wordcount/output # 查看输出结果 hdfs dfs -ls /user/hadoop/wordcount/output/ hdfs dfs -cat /user/hadoop/wordcount/output/part-r-00000 | head -n 20 # 清理 hdfs dfs -rm -r /user/hadoop/wordcountfor循环生成 1000 行文本确保数据量足够触发 MapReduce 的分布式行为。hadoop jar后面跟 jar 包路径和主类名再跟输入输出路径。输出目录必须不存在否则会报Output directory already exists这是 MapReduce 的保护机制。part-r-00000是 reduce 输出的结果文件head -n 20只看前 20 行。这里有个容易忽略的点$HADOOP_HOME环境变量要提前配好否则 jar 包路径写不对。如果不知道 jar 包具体名字用通配符*匹配但确认只有一个匹配项否则会报错。验证集群健康还可以看 Web UI。NameNode 的 Web 界面默认在 9870 端口ResourceManager 在 8088 端口。浏览器打开后能看到集群概况、节点列表、运行中的任务。如果页面打不开先确认进程在不在再确认防火墙有没有放行端口。我自己的习惯是每次实验结束前一定把jps的输出、HDFS 根目录的ls结果、YARN 的任务列表截个图存下来。下次启动如果对不上直接对比就知道哪里变了。这个习惯帮我省了很多重复排查的时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

STM32双机CAN通信实战:TJA1050硬件设计到软件调试全解析

STM32双机CAN通信实战:TJA1050硬件设计到软件调试全解析

1. 为什么双机通信我选了CAN而不是UART——场景选择与总体方案先说一个最常见的场景:你在做一个小项目,A板和B板之间要互通数据,距离可能有个十来米,现场还有电机、变频器这类干扰源。多数人第一反应是UART,一对TX/RX接…

2026/10/13 12:40:44 阅读更多 →
数据库技术选型决策记录(ADR)实战:关系型、文档型与事件型数据库的完整评估与决策

数据库技术选型决策记录(ADR)实战:关系型、文档型与事件型数据库的完整评估与决策

【免费下载链接】architecture-decision-record Architecture decision record (ADR) examples for software planning, IT leadership, and template documentation 项目地址: https://gitcode.com/gh_mirrors/ar/architecture-decision-record 点击查看 免费下载 …

2026/10/13 12:40:44 阅读更多 →
8款硬核MCP服务器实战:让AI告别复制粘贴

8款硬核MCP服务器实战:让AI告别复制粘贴

我先从一个特别没面子但特别真实的场景说起。 上周我要做一份跨项目的数据汇总报告,具体流程是这样的:先从A系统的后台导出两个月的订单记录,再从B系统拉出成本表,打开电子表格软件把两边的格式统一,然后把关键数字一…

2026/10/13 12:40:44 阅读更多 →

最新新闻

RabbitMQ从0到1:核心模型、生产实践与高频问题排查指南

RabbitMQ从0到1:核心模型、生产实践与高频问题排查指南

如果你手头有个项目需要在系统里传递消息,十有八九会想到RabbitMQ。但很多人装完、跑个Hello World就算“会用”了,等遇到连接失败、消息丢失、谁该消费谁不该消费、甚至admin账号没法创建virtual host时,才发现自己其实并不理解它。这篇就从…

2026/10/13 13:13:23 阅读更多 →
CANN全面开源:异构计算架构如何让性能调优不再靠猜

CANN全面开源:异构计算架构如何让性能调优不再靠猜

1. 先搞清楚CANN是什么,以及“开源开放”为什么是一条难走但必须走的路 很多做AI开发的同行,第一次听到CANN这个缩写,是在跑模型的时候拿到一张报错截图,或者是在某个加速卡的性能优化文档里。CANN的全称是异构计算架构&#xff0…

2026/10/13 13:13:23 阅读更多 →
Python+微信小程序+AI:从零搭建对话式健康风险评估系统

Python+微信小程序+AI:从零搭建对话式健康风险评估系统

最近半年我一直泡在一个“Python 微信小程序 AI健康问诊”的个人项目里。起因很简单:家里人经常在小程序里看各种健康问答,但问题描述得零零散散,得到的回答又是通用模板,根本没结合个人的基础情况。我就想,能不能自…

2026/10/13 13:13:23 阅读更多 →
若依集成EasyExcel实战:告别手写POI,搞定复杂表头与大数据导出

若依集成EasyExcel实战:告别手写POI,搞定复杂表头与大数据导出

从写下第一行导出代码到最后彻底放弃手写 POI,大概花了我整整两周时间。彼时我们的若依后台管理系统刚好需要一批新的报表导出功能,领导给了个听起来特别简单的要求:把数据导成 Excel,表头要好看点,列宽自动适应&#…

2026/10/13 13:13:23 阅读更多 →
AI产品经理的五种分化:从模型微调到行业落地,你适合哪一类?

AI产品经理的五种分化:从模型微调到行业落地,你适合哪一类?

最近好几个朋友来找我聊转行,说想往AI产品经理方向走,结果翻了一圈招聘JD直接懵了:同一个岗位名称,有的要求懂Transformer、懂模型微调,有的只要会画原型写PRD,有的甚至要跟着销售跑客户。这到底是一个岗位…

2026/10/13 13:13:23 阅读更多 →
Mars版Eclipse绿色版配置指南:JAVA_HOME、Tomcat与避坑要点

Mars版Eclipse绿色版配置指南:JAVA_HOME、Tomcat与避坑要点

简介:这是一份Eclipse JEE Mars R的Windows 64位官方绿色版压缩包,面向Java企业级与Web开发者,针对J2EE项目开发与调试环境而封装。版本基于2015年6月30日发布的Mars R正式版,解压后免安装即可运行,省去安装向导与手动…

2026/10/13 13:12:22 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →