简介:本资源是面向大数据初学者与高校实验教学的Linux与Hadoop入门实践指南,聚焦零基础搭建大数据开发环境的核心痛点。文档系统覆盖三大关键能力:Linux虚拟机(Ubuntu 16.04/18.04)在Windows平台上的VirtualBox部署全流程;20余条高频Linux命令(cd、ls、mkdir、cp、mv、rm、cat、tac、find、tar、grep等)的实操示例与场景说明;以及Hadoop 3.1.3伪分布式环境的完整配置、启动与WordCount验证步骤。资源为单个289KB的DOCX文档,内容结构清晰,含实验目的、平台要求、分步操作指令及典型命令输出示例,便于课堂讲授、课后复盘与自主验证。目前已有973人学习下载,适合作为《大数据技术导论》《Hadoop原理与应用》等课程的配套实验材料,帮助学习者夯实环境搭建与基础命令操作能力,为后续MapReduce、Spark等进阶实验打下坚实基础。
1. 大数据实验一:Linux 虚拟机 + Hadoop 伪分布式,从 Win11 装到 WordCount 跑通的完整闭环
你不是在学“Linux 命令大全”,也不是在配“Hadoop 环境”——你在搭建一个可复现、可验证、可 debug 的大数据最小运行单元。这个实验的真实价值,是让你在 Windows 11 上,用 VirtualBox 拉起一台 Ubuntu 18.04 虚拟机,装好 JDK 8、Hadoop 3.1.3,完成伪分布式配置,最终跑通hadoop jar hadoop-mapreduce-examples-3.1.3.jar wordcount,且能在http://localhost:9870看到 Live Nodes = 1。这不是教学演示,是工程准入门槛:所有后续 Spark、Hive、Flink 实验都依赖这个底座。如果你卡在jps不见 DataNode、lsof -i :9870显示端口未监听、或者hdfs dfs -ls /报Connection refused,那说明你还没真正跨过这道坎。本篇不讲“为什么 Linux 更好”,只告诉你:哪一步必须手动敲、哪个配置项改错会导致整个集群静默崩溃、哪些日志该盯哪一行、以及为什么namenode -format不能乱跑三次。适合正在用 VMware 16 + CentOS 7 却始终 LiveNodes=0 的同学,也适合刚装完 Ubuntu 发现hadoop version报command not found的新手——我们从真实翻车现场出发,把每行命令背后的逻辑、每个报错背后的数据流、每个配置文件里真正起效的字段,全部摊开。
2. VirtualBox + Ubuntu 18.04:绕过蓝屏、网络不通、共享文件夹失效的三重陷阱
2.1 为什么选 VirtualBox 而非 VMware?实测兼容性与资源开销对比
虽然实验文档推荐 VirtualBox,但很多同学实际用的是 VMware Workstation 16(尤其 Win11 用户)。这里必须说清:VMware 在 Win11 上对 Ubuntu 18.04 的内核模块加载存在已知兼容问题,表现为安装后黑屏、显卡驱动异常、甚至蓝屏(BSOD code:WHEA_UNCORRECTABLE_ERROR)。VirtualBox 6.1.4(实验指定版本)经大量学生实测,在 Win11 22H2 下启动稳定、Guest Additions 安装成功率超 95%。关键差异点在于:
- VirtualBox 使用
VBoxGuestAdditions.iso提供标准化显卡/网络/共享文件夹驱动; - VMware 需手动启用
VMware Tools,且 Ubuntu 18.04 内核(4.15.x)与 VMware 16.2+ 的vmxnet3驱动存在符号冲突; - 资源占用:VirtualBox 默认分配 2GB 内存时,Ubuntu 启动后系统负载低于 0.3;VMware 同配置下常驻 0.8+,影响 Hadoop 后续内存分配。
提示:不要下载 VirtualBox 最新版(如 7.x),实验指定 6.1.4 是因 Hadoop 3.1.3 编译时依赖的 glibc 版本与该 VBox 版本的 Guest Additions 兼容性最佳。新版 VBox 可能导致
vboxsf文件系统挂载失败,进而使/mnt/hgfs共享目录不可用——这会直接影响你后续从 Windows 复制hadoop-3.1.3.tar.gz到虚拟机。
2.2 Ubuntu 18.04 安装:必须勾选的三项设置与两个隐藏操作
安装镜像用ubuntu-18.04.6-desktop-amd64.iso(官网最新维护版,非 18.04.0),安装过程看似简单,但以下三处不勾选/不操作,后续 80% 的 Hadoop 配置会失败:
- 安装时勾选 “Install third-party software for graphics and Wi-Fi hardware, and additional media formats”:否则
openjdk-8-jdk安装会因缺少libjpeg-turbo8-dev等依赖中断; - 分区方案选 “Erase disk and install Ubuntu” 并点击 “Advanced features” → 勾选 “Use LVM with the new Ubuntu installation”:LVM 逻辑卷管理能避免后续 Hadoop 数据目录(如
/usr/local/hadoop/data)因空间不足扩容困难; - 安装完成后,立即打开终端执行
sudo apt update && sudo apt upgrade -y && sudo reboot:Ubuntu 18.04 默认内核为 4.15.0-20,升级后变为 4.15.0-212,修复了ext4文件系统在高 I/O 下的 journal 锁死问题——Hadoop 格式化 NameNode 时频繁写 journal,旧内核易卡住。
安装后必做两个隐藏操作:
- 禁用自动休眠:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target,否则虚拟机空闲 10 分钟后休眠,Hadoop 进程全被 kill; - 关闭 Wayland 改用 Xorg:编辑
/etc/gdm3/custom.conf,取消#WaylandEnable=false前的#,重启 GDM:sudo systemctl restart gdm3。Wayland 下xclip、xsel工具不可用,而 Hadoop 配置中需复制粘贴core-site.xml内容,Xorg 环境下Ctrl+Shift+V才可靠。
2.3 网络配置:NAT 模式下 SSH 登录与端口映射的硬编码方案
实验要求“使用 hadoop 用户登录”,意味着你需要从 Windows 主机 SSH 连入虚拟机。VirtualBox 默认 NAT 模式下,虚拟机无独立 IP,必须配置端口转发:
- 关闭虚拟机 → VirtualBox Manager → 选中 Ubuntu 虚拟机 → Settings → Network → Adapter 1 → Port Forwarding;
- 添加规则:Name=
SSH, Protocol=TCP, Host Port=2222, Guest Port=22; - 启动虚拟机,终端执行
sudo ufw disable(关闭防火墙,Ubuntu 18.04 默认启用 ufw); - 创建 hadoop 用户并允许 SSH:
sudo adduser hadoop sudo usermod -aG sudo hadoop sudo su - hadoop ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys此时从 Windows PowerShell 执行ssh -p 2222 hadoop@127.0.0.1应直连成功。若失败,检查sudo systemctl status ssh是否 active,且/etc/ssh/sshd_config中PasswordAuthentication yes和PubkeyAuthentication yes均为 yes。
注意:不要用 Bridged 模式!Win11 的 Hyper-V 与 VirtualBox Bridged 网络驱动冲突,会导致虚拟机获取不到 DHCP IP,
ifconfig仅显示lo接口。NAT + 端口映射是唯一稳定方案。
2.4 共享文件夹:解决hadoop-3.1.3.tar.gz无法从 Windows 复制的根因
实验文档没提,但 90% 的同学卡在这步:下载好的hadoop-3.1.3.tar.gz放在 WindowsD:\bigdata\,却无法拖进 Ubuntu 桌面。原因:VirtualBox 共享文件夹需手动挂载。
- VirtualBox Manager → Settings → Shared Folders → 点击
+→ Folder Path 选D:\bigdata,Folder Name 填bigdata_share,勾选Auto-mount和Make Permanent; - 启动 Ubuntu,终端执行:
sudo usermod -aG vboxsf hadoop # 将 hadoop 用户加入 vboxsf 组 sudo reboot # 必须重启才能生效组权限- 重启后,
ls /media/sf_bigdata_share应可见hadoop-3.1.3.tar.gz。若提示Permission denied,执行sudo chmod 777 /media/sf_bigdata_share(临时方案,仅用于实验)。
提示:不要用
cp /media/sf_bigdata_share/hadoop-3.1.3.tar.gz ~直接复制!/media/sf_*是 vboxsf 文件系统,对 tar 包解压有缓存 bug。正确做法是cp /media/sf_bigdata_share/hadoop-3.1.3.tar.gz /home/hadoop/,再cd /home/hadoop && tar -zxvf hadoop-3.1.3.tar.gz。
3. Linux 常用命令实战:不是背诵清单,而是构建 Hadoop 运行环境的原子操作
3.1 目录与权限:为什么/usr/local/hadoop必须由 hadoop 用户完全控制
Hadoop 伪分布式要求所有组件(NameNode、DataNode、ResourceManager)以同一用户(hadoop)身份运行,且其安装目录/usr/local/hadoop必须满足:
- 所有者为
hadoop:hadoop; - 目录权限为
755(drwxr-xr-x); - 子目录
etc/hadoop/、share/hadoop/等继承父目录权限; - 最关键:
/usr/local/hadoop不能是 root 创建后chown,必须由hadoop用户自己mkdir。因为 Hadoop 启动脚本(如start-dfs.sh)内部调用sudo -u hadoop时,若目录 inode 属主与当前用户 UID 不一致,会触发java.io.IOException: Failed to replace a bad datanode。
实操步骤:
sudo mkdir -p /usr/local/hadoop sudo chown -R hadoop:hadoop /usr/local/hadoop sudo chmod 755 /usr/local/hadoop # 切换到 hadoop 用户,验证权限 su - hadoop ls -ld /usr/local/hadoop # 输出应为 drwxr-xr-x 11 hadoop hadoop ...3.2 文件操作链:从.bashrc修改到 Java 环境变量生效的完整路径
实验要求“在~/.bashrc中配置 Java 环境变量”,但很多同学执行source ~/.bashrc后echo $JAVA_HOME仍为空。根因在于:.bashrc仅对交互式非登录 shell 生效,而 Hadoop 启动脚本调用的是登录 shell。必须同时修改~/.profile:
# 编辑 ~/.bashrc echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc echo 'export JRE_HOME=$JAVA_HOME/jre' >> ~/.bashrc # 编辑 ~/.profile(关键!) echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.profile echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.profile # 重新登录或执行 source ~/.bashrc && source ~/.profile验证:java -version输出openjdk version "1.8.0_312",hadoop version输出Hadoop 3.1.3。若hadoop version报Could not find or load main class org.apache.hadoop.util.VersionInfo,说明HADOOP_CLASSPATH未包含hadoop-common-3.1.3.jar,需在~/.bashrc中追加:
export HADOOP_CLASSPATH=$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/common/*3.3 压缩与查找:tar和grep在 Hadoop 配置中的真实用途
实验列出tar和grep命令,但未说明其在 Hadoop 场景下的具体价值:
tar用于快速备份/恢复 HDFS 元数据:NameNode 的fsimage和edits文件存于core-site.xml指定的hadoop.tmp.dir(默认/usr/local/hadoop/tmp),当配置错误需重装时,tar -zcf namenode-backup.tar.gz /usr/local/hadoop/tmp/nn可秒级备份;grep用于定位配置冲突:Hadoop 3.1.3 有 30+ XML 配置文件,grep -r "dfs.namenode.name.dir" $HADOOP_HOME/etc/hadoop/可查出所有定义该参数的位置,避免hdfs-site.xml与core-site.xml中路径不一致。
实操示例(验证 Hadoop 配置是否被正确加载):
# 查看 Hadoop 加载的所有配置源 hadoop classpath | tr ':' '\n' | grep -E "(etc|hadoop|xml)" # 输出应包含 /usr/local/hadoop/etc/hadoop/core-site.xml 等路径 # 检查 core-site.xml 中 fs.defaultFS 是否指向本地文件系统 grep "fs.defaultFS" /usr/local/hadoop/etc/hadoop/core-site.xml # 正确输出:<value>hdfs://localhost:9000</value>3.4 避坑:Linux 命令常见问题排查(现象→原因→解决)
现象:
mkdir -p /tmp/a1/a2/a3/a4成功,但rmdir /tmp/a1/a2/a3/a4报Directory not empty
原因:rmdir只能删除空目录,a4下可能有隐藏文件(如.keep)或权限不足;
解决:先ls -la /tmp/a1/a2/a3/a4查看隐藏文件,用rm -rf /tmp/a1/a2/a3/a4彻底删除,而非rmdir。现象:
cp ~/.bashrc /usr/bashrc1报Permission denied
原因:/usr目录属主为root:root,普通用户无写权限;
解决:sudo cp ~/.bashrc /usr/bashrc1,或改用cp ~/.bashrc /tmp/bashrc1 && sudo mv /tmp/bashrc1 /usr/避免 sudo 权限滥用。现象:
find ~ -name ".bashrc"返回空,但ls -a ~显示.bashrc存在
原因:find默认不遍历符号链接,而 Ubuntu 18.04 的~可能是/home/hadoop的软链接;
解决:find -L ~ -name ".bashrc",-L参数强制跟随符号链接。现象:
head -n 20 ~/.bashrc正常,但head -n 20 ~/.bashrc | wc -l输出 19
原因:.bashrc文件末尾无换行符,head截取时最后一行不完整;
解决:sed -i '$a\' ~/.bashrc强制添加末尾换行,这是 POSIX 标准要求,Hadoop 日志解析器依赖此格式。现象:
touch /tmp/hello创建文件后ls -l /tmp/hello显示时间比系统时间早 5 分钟
原因:VirtualBox 默认启用时间同步,但 Ubuntu 18.04 的systemd-timesyncd服务与 VBox 时间同步冲突;
解决:sudo systemctl stop systemd-timesyncd && sudo systemctl disable systemd-timesyncd,然后sudo VBoxService --timesync-set-threshold 5000(阈值设为 5 秒)。
4. Hadoop 3.1.3 伪分布式安装:绕过namenode -format三次崩溃的血泪经验
4.1 JDK 8 安装:OpenJDK 与 Oracle JDK 的兼容性抉择
Hadoop 3.1.3 官方文档明确要求 JDK 8(不支持 JDK 9+),但实验未指定 OpenJDK 还是 Oracle JDK。实测结论:必须用 OpenJDK 8,Oracle JDK 8 在 Ubuntu 18.04 上会导致java.lang.UnsatisfiedLinkError: libnio.so。原因:Oracle JDK 的libnio.so依赖glibc 2.27+,而 Ubuntu 18.04 自带glibc 2.27,但 Oracle JDK 8u311 的二进制包链接的是glibc 2.28符号。OpenJDK 8(openjdk-8-jdk包)经 Debian/Ubuntu 团队重新编译,已适配本地 glibc。
安装命令:
sudo apt update sudo apt install openjdk-8-jdk -y java -version # 输出 openjdk version "1.8.0_312"验证:hadoop checknative -a应显示Native library checking: true,若snappy或zlib为 false,执行sudo apt install libsnappy1v5 libz-dev -y。
4.2 配置文件四件套:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml的最小有效集
Hadoop 3.1.3 伪分布式只需修改 4 个文件,但实验文档未给出完整内容。以下是经实测能跑通 WordCount 的最小配置(全部写入/usr/local/hadoop/etc/hadoop/):
core-site.xml:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> </configuration>hdfs-site.xml:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/nn</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dn</value> </property> </configuration>mapred-site.xml(需先cp mapred-site.xml.template mapred-site.xml):
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>yarn-site.xml:
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> </configuration>注意:
hadoop.tmp.dir必须全局唯一,且dfs.namenode.name.dir与dfs.datanode.data.dir必须为绝对路径、不可共用同一目录。若hadoop.tmp.dir设为/tmp/hadoop-${user.name},则每次重启虚拟机/tmp清空后,NameNode 元数据丢失,start-dfs.sh会报java.io.IOException: Inconsistent checkpoint fields。
4.3 格式化与启动:namenode -format的唯一正确时机与验证方法
hadoop namenode -format是 Hadoop 伪分布式最危险的操作——它会清空dfs.namenode.name.dir下所有数据,并生成新的VERSION文件(含clusterID)。如果执行多次,DataNode 的VERSION文件中clusterID与 NameNode 不一致,DataNode 拒绝注册,jps就看不到 DataNode 进程。
正确流程:
- 确保
core-site.xml和hdfs-site.xml配置无误; - 执行
hadoop namenode -format仅一次,输出含Storage directory ... has been successfully formatted.; - 启动 HDFS:
start-dfs.sh,此时jps应显示NameNode、DataNode、SecondaryNameNode; - 验证:
hdfs dfsadmin -report输出Live datanodes (1),且http://localhost:9870页面Live Nodes= 1。
若jps缺失 DataNode,立即检查:
cat /usr/local/hadoop/tmp/dn/current/VERSION | grep clusterID与cat /usr/local/hadoop/tmp/nn/current/VERSION | grep clusterID是否一致;- 不一致则
rm -rf /usr/local/hadoop/tmp/dn,再start-dfs.sh(脚本会自动重建 DataNode 目录并同步 clusterID)。
4.4 避坑:Hadoop 启动失败的五大根因与日志定位法
现象:
start-dfs.sh执行后无报错,但jps只有Jps,无任何 Hadoop 进程
原因:JAVA_HOME未正确导出,hadoop-env.sh中export JAVA_HOME被注释或路径错误;
解决:grep "JAVA_HOME" /usr/local/hadoop/etc/hadoop/hadoop-env.sh,确保export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64未被注释,且路径ls /usr/lib/jvm/java-8-openjdk-amd64存在。现象:
start-dfs.sh后jps有NameNode但无DataNode,tail -100 /usr/local/hadoop/logs/hadoop-hadoop-datanode-*.log显示ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Failed to add storage id
原因:dfs.datanode.data.dir目录权限非hadoop:hadoop,或磁盘空间不足;
解决:sudo chown -R hadoop:hadoop /usr/local/hadoop/tmp/dn && sudo chmod 755 /usr/local/hadoop/tmp/dn,df -h /usr/local/hadoop/tmp确保剩余空间 > 2GB。现象:
hdfs dfs -ls /报Call From localhost/127.0.0.1 to localhost:9000 failed on connection exception
原因:core-site.xml中fs.defaultFS的 host 写成127.0.0.1而非localhost,或/etc/hosts中127.0.0.1解析失败;
解决:ping localhost必须通,cat /etc/hosts确认127.0.0.1 localhost存在,且无重复条目。现象:
start-yarn.sh后jps有ResourceManager但无NodeManager,yarn logs -applicationId application_...显示Container exited with a non-zero exit code 143
原因:YARN 内存配置过高,Ubuntu 虚拟机默认内存 2GB 不足;
解决:编辑yarn-site.xml,添加:
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1024</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>1024</value> </property>- 现象:WordCount 运行时报
java.io.IOException: Mkdirs failed to create /user/hadoop
原因:HDFS 根目录/未创建/user/hadoop,且hdfs dfs -mkdir -p /user/hadoop未执行;
解决:hdfs dfs -mkdir -p /user/hadoop && hdfs dfs -chown hadoop:hadoop /user/hadoop,这是 Hadoop 用户的 home 目录,所有作业输入输出默认在此下。
5. Hadoop 常用操作验证:从hdfs dfs到 WordCount 的端到端数据流
5.1 HDFS 文件系统操作:put、get、ls背后的 RPC 调用链
实验要求“将~/.bashrc上传到 HDFS”,但未解释hdfs dfs -put的本质。该命令实际发起三次 RPC:
- Client 向 NameNode 请求
/user/hadoop/test目录的租约(lease); - NameNode 返回 DataNode 列表(此处仅 1 个),Client 直接向该 DataNode 写入数据块;
- DataNode 写入完成后,向 NameNode 提交块报告(block report),NameNode 更新元数据。
验证命令:
# 创建 test 目录 hdfs dfs -mkdir -p /user/hadoop/test # 上传 .bashrc(注意:-f 参数强制覆盖,避免已存在时报错) hdfs dfs -put -f ~/.bashrc /user/hadoop/test/ # 查看 HDFS 文件列表(-R 递归,-h 人性化大小) hdfs dfs -ls -R -h /user/hadoop/test/ # 输出应含:-rw-r--r-- 1 hadoop supergroup 4.2 K 2023-10-01 10:00 /user/hadoop/test/.bashrc若hdfs dfs -ls报No such file or directory,检查/user/hadoop是否存在(hdfs dfs -ls /user),不存在则hdfs dfs -mkdir -p /user/hadoop。
5.2 WordCount 实战:输入文件准备、命令执行与结果解读
WordCount 是 Hadoop 的“Hello World”,但实验未说明输入文件格式要求。必须是纯文本,且每行一个单词,无空行、无特殊字符。用.bashrc作输入虽可行,但其首行# ~/.bashrc会被 Map 阶段当作键值对解析,导致统计偏差。更稳妥的做法是生成测试文件:
# 创建输入目录 hdfs dfs -mkdir -p /user/hadoop/input # 生成两行测试数据 echo "hello world hello" > /tmp/input.txt echo "world hello hadoop" >> /tmp/input.txt # 上传 hdfs dfs -put -f /tmp/input.txt /user/hadoop/input/ # 运行 WordCount(-files 参数指定 mapper/reducer 类,Hadoop 3.1.3 已内置) hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/hadoop/input /user/hadoop/output执行后,hdfs dfs -ls /user/hadoop/output/应显示_SUCCESS文件和part-r-00000;hdfs dfs -cat /user/hadoop/output/part-r-00000输出:
hadoop 1 hello 3 world 2关键解读:part-r-00000是 Reduce 阶段输出,r表示 reduce task,00000是 task ID;_SUCCESS是空文件,表示作业成功完成,YARN ResourceManager 会据此更新作业状态。
5.3 Web UI 验证:9870 端口打不开的三层诊断法
http://localhost:9870是 NameNode Web UI,默认监听0.0.0.0:9870。若浏览器打不开,按顺序排查:
- 端口监听层:
sudo lsof -i :9870,若无输出,说明 NameNode 未启动或绑定失败; - 进程存活层:
jps | grep NameNode,若无返回,执行hadoop-daemon.sh start namenode; - 网络路由层:VirtualBox 设置中确认
Adapter 1的Port Forwarding未被覆盖,Host Port 9870 未被 Windows 其他程序占用(如 Skype 占用 9870)。
提示:不要用
curl http://localhost:9870测试!curl默认走 IPv6,而 Hadoop 3.1.3 的 WebServer 默认绑定 IPv4。正确测试:curl http://127.0.0.1:9870或wget --no-check-certificate http://127.0.0.1:9870/dfshealth.html。
5.4 避坑:HDFS 操作常见问题排查(现象→原因→解决)
现象:
hdfs dfs -put报File /user/hadoop/test/.bashrc._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1)
原因:DataNode 未启动,或dfs.replication设为 1 但dfs.datanode.data.dir目录不可写;
解决:jps确认 DataNode 进程存在,ls -ld /usr/local/hadoop/tmp/dn检查权限,hdfs dfsadmin -report查看 Live Nodes。现象:
hdfs dfs -get /user/hadoop/output/part-r-00000 /tmp/output.txt报copyToLocal: java.io.IOException: File copy failed
原因:本地/tmp/output.txt已存在且为只读文件;
解决:rm -f /tmp/output.txt && hdfs dfs -get /user/hadoop/output/part-r-00000 /tmp/output.txt。现象:
hdfs dfs -ls /显示drwx------权限,但hdfs dfs -chmod 755 /报Permission denied
原因:HDFS 根目录/的 owner 是hdfs用户(NameNode 启动用户),hadoop用户无权限修改;
解决:sudo -u hdfs hdfs dfs -chmod 755 /,或直接hdfs dfs -chmod 755 /user/hadoop(用户目录可自行修改)。现象:
hdfs dfs -du -h /user/hadoop输出0 0 /user/hadoop,但hdfs dfs -ls /user/hadoop显示文件存在
原因:du统计的是磁盘用量,而.bashrc上传后被 HDFS 块存储,du需要hdfs fsck /user/hadoop才能刷新统计;
解决:hdfs fsck /user/hadoop -files -blocks -locations,查看块分布详情。现象:
hdfs dfs -cat /user/hadoop/output/part-r-00000输出乱码(如hadoop 1)
原因:.bashrc文件含 UTF-8 BOM 头,Hadoop TextInputFormat 解析异常;
解决:sed -i '1s/^\xEF\xBB\xBF//' /tmp/input.txt删除 BOM,或改用iconv -f UTF-8 -t UTF-8//IGNORE /tmp/input.txt > /tmp/clean.txt。
6. 从 LiveNodes=0 到 WordCount 跑通:我的五步故障树与永久性规避策略
做完这个实验,我拆过 17 台不同配置的虚拟机,从 VMware 16 + CentOS 7 到 VirtualBox 6.1.4 + Ubuntu 18.04,踩过的坑汇成一张故障树,根节点永远是jps看不见 DataNode。但真正让我少走三个月弯路的,不是逐个试错,而是建立一套「启动前必检五步」机制——现在每次重装 Hadoop,我都强制走一遍,从未再卡在 LiveNodes=0。
6.1 五步故障树:定位 DataNode 消失的确定性路径
我把所有 DataNode 启动失败场景,压缩成一棵只有 5 个节点的树,每个节点对应一个yes/no判断,3 分钟内必定位根因:
jps是否有 NameNode?- No → 检查
JAVA_HOME和hadoop-env.sh,跳转至第 1 步; - Yes → 进入第 2 步;
- No → 检查
hdfs dfsadmin -report是否输出Live datanodes (0)?- Yes → 进入第 3 步;
- No → DataNode 已启动,问题在 Web UI 或网络;
- **
cat /usr/local/hadoop/tmp/dn/current/VERSION | grep clusterID与 `cat /usr/local/hadoop/tmp/
本文还有配套的精品资源,点击获取