资讯动态

大数据实验第一课:Linux与Hadoop操作避坑指南

发布时间:2026/10/13 12:40:46 来源:尧图企业网站定制
简介本资源是大数据系列实验的第一份配套材料面向刚接触大数据技术的高校学生与自学者帮助其搭建后续实验所需的基础环境。内容围绕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 的任务列表截个图存下来。下次启动如果对不上直接对比就知道哪里变了。这个习惯帮我省了很多重复排查的时间。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑