ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Linux命令与Hadoop伪分布式搭建:从实验报告到实战通关

Linux命令与Hadoop伪分布式搭建:从实验报告到实战通关 简介《大数据原理与技术课程实验报告》完整版是一份面向大数据专业学生与初学者的实验指导资料围绕Hadoop运行所需的Linux基础系统讲解了从虚拟机安装到常用命令操作的完整流程。资源包内仅含1个docx文档大小3.29MB内容覆盖VirtualBox下Ubuntu 16.04的安装、cd/ls/mkdir/rmdir/cp/mv/rm等文件目录操作、cat/tac/more/head/tail等文件查看方法以及touch/chown/find/tar等实用命令与环境变量配置。报告还针对Hadoop伪分布式环境补充了核心配置文件修改、NameNode格式化及启动验证等关键步骤通过实际命令输出展示操作结果便于读者对照练习和排错。这些操作覆盖了日常系统管理与文件处理的基本场景是进一步学习MapReduce与YARN等组件的前提。目前已有5240人学习适合作为课程实验报告模板、期末复习资料或大数据入门自学配套文档能有效帮助初学者理解命令含义、熟悉Hadoop环境搭建为后续大数据处理项目打下扎实基础。1. 把一份课程实验报告吃透Linux 命令与 Hadoop 伪分布式是绕不开的起跑线大数据课程实验报告听起来像作业实际上一份完整的实验报告就是最好的入门资源。这份《大数据原理与技术课程实验报告》完整版完整记录了从装虚拟机开始到跑通 Hadoop WordCount 的整个实操链路。核心就两件事一是把 Linux 系统命令练熟因为 Hadoop 跑在 Linux 上不会 cd、ls、tar、chown后面连日志都翻不明白二是把 Hadoop 伪分布式环境搭起来理解 HDFS 和 MapReduce 在单机上怎么协作。它面向正在做大数据课设、准备实验报告、或者刚接触 Linux 和 Hadoop 的从业者照着命令敲一遍能少走很多弯路。2. 搭好实验环境VirtualBox Ubuntu 16.04先解决分辨率和网卡两个硬伤实验报告开头把宿主机配置写得很清楚i5-10300H、16GB 内存、Windows 10 家庭中文版。这个配置跑一个伪分布式绰绰有余但也要注意Hadoop 伪分布式虽只有一台机器实际要把 NameNode、DataNode、SecondaryNameNode 这些进程全部塞进一个虚拟机内存规划不好后面启动时就会出现进程起来又消失的怪现象。这一章先把环境基础打好。2.1 虚拟机配置参数与内存规划伪分布式和真集群的区别只在节点数量进程种类和通信逻辑是一样的所以虚拟机不能给得太抠门。我一般会这样规划项目推荐值说明内存2GB-4GB物理 16GB 时给 4GBHadoop 各进程加上系统本身比较从容处理器2 核双核足够 WordCount四核也不会更快硬盘40GB 动态分配系统加 Hadoop20GB 勉强可用40GB 给足余量网络模式桥接或 NAT实验报告场景优先桥接原因后面讲硬盘这里有个细节VirtualBox 提供动态分配和固定大小两种模式。动态分配的意思是硬盘文件按实际占用量增长一开始只有几个 GB固定大小则是创建时就占满设定空间。新手建议选动态分配原因很朴素你的宿主机 C 盘可能没有 40GB 空闲动态分配能避免创建失败。内存分配则要结合宿主机实际情况。实验报告这台机器 16GB虚拟机分 4GB 没有压力如果你宿主机只有 8GB那就压缩到 2GB同时把 Hadoop 里和资源调度相关的参数调小否则虚拟机一开宿主机先卡死。另外Windows 10 的 Hyper-V 和 VirtualBox 存在冲突如果启动虚拟机时报错提示虚拟化被占用需要在启用或关闭 Windows 功能里把 Hyper-V 关掉。2.2 安装 VirtualBox 和 Ubuntu Kylin版本搭配与增强功能VirtualBox 装好后新建虚拟机时系统类型选 Linux - Ubuntu 64 位。这里有一个前置条件如果在新建向导里看不到 64 位选项说明 CPU 虚拟化没开需要进 BIOS 找到 Intel VT-x 或 AMD-V 并启用。这个开关不开虚拟机后面装系统会卡在启动阶段。实验报告用的镜像是 ubuntukylin-16.04即 Ubuntu Kylin 16.04 的 64 位版本。选择它而不是最新版 Ubuntu主要考虑是课程教材和大数据软件的兼容性Hadoop 官方文档长期以 Ubuntu 16.04 作为参考系统网上能找到的坑和方案也最多。如果你手头只有 Ubuntu 18.04 或 20.04也一样能跑只是个别依赖包名会有差异。安装过程中最常见的翻车是安装界面分辨率太小显示不完整。实验报告的解决思路是先硬着头皮装完系统再靠增强功能解决分辨率。安装增强功能之前建议先把编译工具链装好sudo apt update sudo apt install -y build-essential dkms sudo apt upgrade -y第一行是刷新软件源索引新装的 Ubuntu 不执行 apt update 直接装软件很容易报 404第二行是安装内核头文件和动态内核模块支持增强功能的两个核心模块依赖它们编译第三行顺手把系统更新到最新状态避免后续装 JDK 时出现依赖版本冲突。工具链就绪后在 VirtualBox 菜单栏点设备 - 安装增强功能虚拟机里会挂载一个 VBox_GAs 光盘然后执行cd /media/用户名/VBox_GAs_* sudo ./VBoxLinuxAdditions.run sudo reboot需要说明的是光盘路径里的用户名要替换成你自己的登录用户名后面的星号是通配符用来匹配 VBox_GAs_6.1.x 这类带版本号后缀的目录。如果你直接抄别人的命令而不改用户名大概率会提示目录不存在。增强功能装好之后重启虚拟机在系统设置里就可以选择更高的分辨率了。2.3 多网卡宿主机的网络模式与网卡选择实验报告里第二个硬伤是 Ubuntu 装完不能上网。笔记本通常同时装着有线网卡和无线网卡VirtualBox 的桥接模式需要明确指定桥接到哪一块物理网卡。选错了虚拟机虽然显示已连接但拿不到合法的 IP 地址。排查方法是先在宿主机上确认当前网络用的是哪块网卡打开 Windows 命令行执行一条命令ipconfig /all看到 Media disconnected 的就是没有实际使用的网卡连接正常的才会有具体的 IP 地址。然后在 VirtualBox 的设置 - 网络 - 连接方式里选桥接网卡界面名称下拉框里选刚才确认的那块卡。实验报告里提到的 Realtek PCIe GbE Family Controller 是有线网卡MediaTek Wi-Fi 6 MT7921 Wireless LAN Card 是无线网卡连 WiFi 就选后者。这里给一个选择建议能用桥接就优先用桥接。原因在于后面要访问 Hadoop 的 Web 界面HDFS 默认管理页面在 9870 端口桥接模式下虚拟机和宿主机在同一网段直接用浏览器敲虚拟机 IP 就能访问如果用 NAT 模式需要额外配置端口转发才能从宿主机访问虚拟机里的服务多一层麻烦。2.4 环境就绪后的验收动作系统装好、网络通了以后先别急着下载 Hadoop用三条命令确认基础环境uname -a free -h df -h /tmpuname 确认内核是不是 amd64也就是 64 位架构free 看内存多大和 VirtualBox 设置里分配的值对得上才说明分配生效df 看 /tmp 目录剩余空间因为后面很多解压操作会用到 /tmp空间不足时 tar 解包到一半就直接报错。这一步花不了两分钟但能排除掉一大半环境层面的隐藏问题。很多人的 Hadoop 装到一半报各种奇怪的错回过头来发现是虚拟机的内存被宿主机抢到只剩 512MB或者是 /tmp 分区写满。3. 18 个 Linux 命令实操拆解命令理解、参数边界与考试常见的坑这一章是整份实验报告里信息密度最高的部分。说穿了Linux 命令不是背出来的是敲出来的但敲也要知道每个命令的边界。我按实验报告的顺序把 18 个命令分成四组来拆。每一组都有对应的实验场景命令和命令之间不是孤立的它们是同一个文件管理流程的不同环节。3.1 目录切换与创建删除cd、ls、mkdir、rmdir先看 cd 的三个场景。cd /usr/local是绝对路径切换cd ..回到上一级目录cd ~回到当前用户主目录。这三个没有难度但要注意cd ..和cd ../..的区别后者一次回两级脚本里写错层级会导致后面所有相对路径失效。cd 命令本身不输出任何内容如果切换成功就直接回到了新目录的提示符下切不成功才会报 No such file or directory。ls 命令实验报告里让它列 /usr 目录。这里有个小技巧ls -al比ls实用得多-a显示隐藏文件-l显示详细属性权限、属主、大小、时间。Hadoop 的配置目录里有一堆以点开头的隐藏文件用ls -al才能看到完整结构。只看文件大小用ls -lh带单位输出默认 -l 显示的是字节数一长串数字看着费劲。mkdir 的递归创建参数-p值得单独说cd /tmp mkdir -p a1/a2/a3/a4不带 -p 的时候父目录不存在会直接报错带了 -pshell 会一路把 a1、a2、a3、a4 全部创建出来。实验报告里先演示了mkdir a再演示mkdir -p就是让你对比这个差异。rmdir 的方向相反只能删除空目录rmdir -p可以从内往外把路径上一连串空目录都删掉。但注意rmdir 碰到非空目录会拒绝执行并提示 Directory not empty这也是很多新手摔跟头的地方删非空目录要用后面讲的rm -r。提示mkdir 的 -p 参数还有一个隐藏用途就是创建目录时如果目录已存在不会报错这在脚本里很实用可以直接当确保目录存在的幂等操作来用。3.2 文件内容查看cat、tac、more、head、tail这一组全是查看文件内容但适用场景完全不同。cat 把整个文件一次性输出到屏幕适合读小文件tac 是 cat 的反写从最后一行往前输出适合看日志里的最新记录。注意tac 本质是把行的顺序颠倒不是把每个字的顺序颠倒不要跟 rev 混淆。more 是分页查看按空格翻页按 q 退出。它还有一个增强版 less支持上下方向键滚动实际工作中 less 用得更多但课程实验里考核 more 是标配。head 和 tail 一个取头一个取尾最常用的几个参数是head -n 20 ~/.bashrc tail -n 20 ~/.bashrc tail -n 50 ~/.bashrc-n 20表示取前 20 行或后 20 行-n 50是从第 50 行开始一直列到最后注意这里的加号含义是从第几行起不是加多少行。实验报告里还演示了head -n -50含义是除了最后 50 行不显示其余全显示这个负号参数很多资料不会提但笔试爱考。查看 .bashrc 这类配置文件时cat 和 head/tail 搭配使用基本够用。如果文件有几千行建议先wc -l看总行数再决定用 head 还是 tail。直接 cat 刷屏前面的输出会被顶出终端缓冲区想翻回去都找不到记录这是很多刚入门的人容易忽略的实际问题。3.3 复制、移动、删除与权限cp、mv、rm、touch、chowncp 的坑主要在递归复制目录时忘记加 -rsudo cp -r /tmp/test /usr不加 -rcp 会提示 omitting directory复制目录必须用 -r 把整个目录树带着走。实验报告里还有个细节sudo cp ~/.bashrc /usr/bashrc1把文件复制过去的同时改了名这是 cp 的第二个参数作为目标文件名的用法很多人只记得目录到目录的复制忘了可以顺便重命名。带权限复制用 -p保留原文件的属主和时间戳这在备份配置时很有用。mv 在同一个文件系统内移动和重命名是瞬时操作跨文件系统则是先复制再删除这个区别在移动大目录时特别明显。实验报告里演示了sudo mv /usr/test /usr/test2的重命名用法本质上是把路径名改掉。rm 的-r也有写作-R的和-f建议分开理解-r递归删除目录-f忽略不存在的文件、不提示确认。实验报告里删 test2 目录用的是rm -R实际等价的写法是rm -r。注意rm 删掉的东西不进回收站这不是开玩笑的。sudo rm -r之前先ls确认一遍路径尤其是在 root 权限下一个空格位置错了就可能把目录结构删掉一半。touch 的两个用途创建空文件和修改时间戳。实验报告里演示了touch -d 5 days ago hello把文件时间改成 5 天前这在模拟日志时间、触发增量备份场景里很常见。chown 改文件所有者实验报告里sudo chown root /tmp/hello把所有者改成 root注意普通用户无权把文件改成别的用户的必须加 sudo。chown 还有一个常用参数 -R递归修改目录下所有文件的所有者。3.4 查找、压缩与环境变量find、tar、grep、sourcefind 的常规用法是指定路径加名字find ~/.bashrc这个写法其实是按完整路径去匹配更通用的做法是find /home -name *.xml在指定目录下按通配符找文件。find 还支持-mtime -3按修改时间过滤-size 100M按文件大小过滤排查日志文件时很顺手。tar 是这一组里最值得练的实验报告里做了打包和解包两个方向sudo mkdir /test sudo tar -zcv -f /test.tar.gz test sudo tar -zxv -f /test.tar.gz -C /tmp拆开看-z表示通过 gzip 压缩-c是创建归档-v是打印过程-f指定归档文件名解包方向-x替代-c-C指定解压目标目录。一个常见的坑是 -f 必须放在参数组合的最后面因为 -f 后面跟的是文件名顺序错了会把文件名当成别的参数解析。比如tar -zcv -f /test.tar.gz test写成tar -f -zcv ...shell 会直接把 -zcv 当成文件名处理。grep 的用法实验报告里演示得很朴素grep examples ~/.bashrc在文件里查找字符串。实际调试中 grep 更常用的是grep -r 关键字 /etc/hadoop/这种递归查找方式配合管道ps aux | grep java找进程也是高频操作。grep 的 -n 参数可以显示行号排查配置错误时能直接定位到哪一行有问题。环境变量配置是这一章的收尾重点sudo vim ~/.bashrc # 在文件末尾追加 export JAVA_HOME/usr/lib/jvm/jdk1.7.0_60 export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH${JAVA_HOME}/bin:$PATH # 使配置立即生效 source ~/.bashrc echo $JAVA_HOME这里有个关键点JAVA_HOME 必须指向 JDK 实际解压的目录不能凭印象写。实验报告里特意注释这里要注意目录要换成自己解压的 jdk 目录这个提醒非常实在。很多人在这一步翻车不是 export 语法写错而是目录名和实际解压出来的 jdk1.8.0_162 对不上。source 命令让配置在当前 shell 立即生效不开新终端就能用如果不执行 source新开的终端加载 .bashrc 的时候也会读到但当前这个 shell 里的 PATH 还是旧值。4. Hadoop 伪分布式从配置到跑通core-site、hdfs-site、WordCount 与 HDFS 命令环境就绪后进入正题。实验报告用的是 hadoop-3.1.3.tar.gz教材配套的 2.7.1 配置思路基本一致只是 jar 包名和默认端口有差异。这一章重点解决三个问题配置文件怎么改、启动顺序是什么、命令参数怎么理解。4.1 伪分布式架构与两个核心配置文件伪分布式的伪字体现在所有进程都跑在一台机器上但进程之间的通信方式、数据存储路径和真集群是一样的。理解了这一点后面看 HDFS 的 Web 界面时就不会对着单个节点发愣。Hadoop 装好后第一步是把 Hadoop 的 bin 目录加进 PATH或者每次都 cd 到 /usr/local/hadoop 再执行命令实验报告用的是后者更不容易出错。两个核心配置文件在 /usr/local/hadoop/etc/hadoop/ 下。core-site.xml 管全局核心是设置默认文件系统configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property /configurationfs.defaultFS里的 9000 是 NameNode 的 RPC 通信端口这个端口要记一下后面很多排查日志时会看到。如果只配置了这一个属性伪分布式也能跑但数据会临时存在系统内存和临时目录里重启就丢。hdfs-site.xml 里建议把 NameNode 和 DataNode 的数据目录指到固定位置configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name value/usr/local/hadoop/tmp/dfs/name/value /property property namedfs.datanode.data.dir/name value/usr/local/hadoop/tmp/dfs/data/value /property /configuration这里dfs.replication必须设成 1因为只有一个 DataNode副本数设大于 1 只是白白增加校验开销。name.dir和data.dir是两个被反复踩坑的属性如果 NameNode 的元数据目录不显式配置会落在系统临时目录里一次临时文件清理就把元数据清掉了下次启动直接报错找不到元数据。4.2 格式化 NameNode、启动守护进程与 jps 验证配置文件改完第一件要做的事是格式化 NameNodecd /usr/local/hadoop ./bin/hdfs namenode -format格式化会生成 NameNode 的元数据相当于给文件系统做初始化。这个命令只能执行一次之后每次启动或重启都不需要再格式化如果因为改配置想重新格式化需要先把 DataNode 的 data 目录清掉否则两个节点元数据不一致最常见的结果是 DataNode 起来了又反复退出。具体排查放到第 5 章避坑部分展开。启动命令要特别注意实验报告里那个注释./sbin/start-dfs.sh这个脚本名是连在一起的没有空格。很多人照着文字抄写成 start dfs.sh 或者 start-dfs .shshell 会直接报 command not found。启动成功后执行jps正常会看到 NameNode、DataNode、SecondaryNameNode 三个进程。如果只有 NameNode 没有 DataNode基本可以判定是格式化的问题。如果启动时提示 JAVA_HOME is not set and could not be found说明 hadoop-env.sh 里的配置不对。处理方式是在 /usr/local/hadoop/etc/hadoop/hadoop-env.sh 里找到 export JAVA_HOME 那一行改成具体路径export JAVA_HOME/usr/lib/jvm/jdk1.8.0_162Hadoop 自带的脚本不会主动探测 JDK 目录特别是通过 sudo 或者某些终端环境启动时系统环境变量经常没传进去写绝对路径是最稳的做法。改完保存重新执行 start-dfs.sh。4.3 运行 WordCount 实例参数顺序与输出目录的约束WordCount 是 Hadoop 的 Hello World统计输入文件中每个单词出现的次数。实验报告里的完整命令是./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount input outputjar 后面跟的是示例 jar 包路径wordcount 是 jar 包里的主类入口input 是输入目录output 是输出目录。这里要解释一下为什么 input 和 output 是目录而不是文件MapReduce 的输入输出抽象在目录级别一个目录下可以放多个文件作为输入输出目录下会生成多个计算产出的 part 文件。常见做法是先建一个输入目录放数据mkdir input cp LICENSE.txt input/ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount input output这里有个很多人忽略的约束output 目录在运行前必须不存在否则会报 Output directory already exists。MapReduce 框架会自己创建输出目录遇到同名目录就直接拒绝这个设计和本地文件的覆盖逻辑不一样。跑第二次实验想覆盖结果时要先rm -rf output或者换个目录名我一般习惯按时间戳命名比如 output2、output3省得每次删。任务跑完后控制台会输出一堆日志最值得看的是 Completed 字样和最后几行 job 运行统计。单词统计的结果在 output/part-r-00000 文件里一行一个单词和对应的出现次数cat output/part-r-00000 | head -20能看到 the 123 这类格式的输出说明从 HDFS 读写到 MapReduce 计算的整条链路已经通了。4.4 HDFS 常用操作本地和分布式文件系统之间的搬运实验报告第四部分把 HDFS 的日常操作串了一遍。先用 Hadoop 用户登录 Linux 系统然后创建 HDFS 用户目录./bin/hdfs dfs -mkdir -p /user/hadoop-p参数的作用和 Linux 的 mkdir -p 一样父目录不存在就一并创建。这里创建的是 HDFS 里的目录不是本地目录。然后在这个用户目录下建 test 文件夹、上传本地文件、再下载回来./bin/hdfs dfs -mkdir test ./bin/hdfs dfs -ls ./bin/hdfs dfs -put ~/.bashrc test ./bin/hdfs dfs -ls test ./bin/hdfs dfs -get test ./要理解相对路径和绝对路径的差异第一条命令用的是绝对路径 /user/hadoop后续命令都用相对路径 test是因为 HDFS 对当前用户有隐含的工作目录默认就是 /user/hadoop。put 是把本地文件上传到 HDFSget 是把 HDFS 文件下载到本地当前目录。get 完成后可以用本地 ls 命令检查文件是否真的落到了本地文件系统里。提示hdfs dfs 命令的参数很多光一个 -ls 就有 -R 递归列出、-h 人性化大小显示。遇到不确定的参数先./bin/hdfs dfs -help看一眼说明比瞎猜快得多。5. 避坑与常见问题排查实验报告里最典型的四次翻车记录实验报告自带的问题清单比实验内容本身更有参考价值。这里我把报告里的三个问题展开再补一条我自己实践中经常碰到的坑。每一条都按现象 - 原因 - 解决的顺序来写方便你对照排查。5.1 安装界面分辨率太小安装按钮找不全现象Ubuntu 安装界面打开后窗口超大分辨率只有 640x480右下角的继续和安装按钮有一半在屏幕外鼠标挪不过去。原因VirtualBox 虚拟机在未安装增强功能之前显示驱动只有基础的 VGA 模式不支持高分屏自适应安装器默认的分辨率超出屏幕显示区域。解决先用 Win 键加鼠标拖拽窗口边缘把安装窗口挪到能看到按钮的位置凑合完成系统安装。装完系统后按第 2 章 2.2 节的方法安装增强功能重启后进系统设置 - 显示这时候分辨率选项就正常了调到 1920x1080 即可。我这边的习惯是装完增强功能立即重启一次不要拖到装 Hadoop 之后不然后续所有界面操作都在低分辨率下进行找文件找得很痛苦。5.2 Ubuntu 不能上网网卡没选对现象虚拟机里浏览器打不开页面ping 网关也不通但宿主机网络正常。执行ip addr看到虚拟网卡有 IP但访问外网超时。原因笔记本有多块物理网卡VirtualBox 的桥接模式默认绑定了一块当前没有实际接入网络的网卡。比如你连着 WiFi但桥接到了没插网线的有线网卡上虚拟机虽然拿到了一个地址但这个地址对应的链路根本不通。解决先在宿主机上执行ipconfig /all看当前哪块网卡有实际的 IP 地址和默认网关。然后在 VirtualBox 的设置 - 网络里把连接方式改为桥接网卡界面名称手动选择正在使用的那块卡。改完重启虚拟机网络用ping 8.8.8.8验证。如果桥接始终调不通退而求其次用 NAT 模式先保证能上网但后面访问 Hadoop Web 界面时记得做端口转发。5.3 启动 Hadoop 报 JAVA_HOME is not set现象执行./sbin/start-dfs.sh时控制台提示 ERROR: JAVA_HOME is not set and could not be found。jps 命令也执行不了提示找不到命令。原因Hadoop 的启动脚本在独立进程中执行不会自动继承你在终端里 source 的 ~/.bashrc 环境变量。特别是在通过 sudo 执行时环境变量被重置JAVA_HOME 彻底丢失。另一个可能是 .bashrc 里配置的 JDK 路径和实际解压目录不一致。解决去 /usr/local/hadoop/etc/hadoop/hadoop-env.sh 里手动指定 JDK 路径。找到export JAVA_HOME${JAVA_HOME}这一行改成绝对路径export JAVA_HOME/usr/lib/jvm/jdk1.8.0_162改完先执行echo $JAVA_HOME确认当前 shell 能输出正确路径再执行source /usr/local/hadoop/etc/hadoop/hadoop-env.sh让 Hadoop 脚本读到。如果还不行就在启动命令前加上export JAVA_HOME/usr/lib/jvm/jdk1.8.0_162作为前缀强制注入环境变量。5.4 重新格式化导致 DataNode 起不来现象因为改了配置文件重新执行了hdfs namenode -format之后 jps 只能看到 NameNodeDataNode 进程反复退出或者干脆起不来。查看日志文件 /usr/local/hadoop/logs/hadoop-hadoop-datanode-*.log发现报错提到 clusterID 不一致。原因格式化会重新生成 NameNode 的元数据产生一个新的集群 ID但 DataNode 的数据目录里还保留着旧集群的 ID 记录。两边对不上DataNode 连接 NameNode 时被拒绝于是进程反复崩溃。解决重新格式化之前把第 4 章配置的两个数据目录清空rm -rf /usr/local/hadoop/tmp/dfs/name/* rm -rf /usr/local/hadoop/tmp/dfs/data/* ./bin/hdfs namenode -format清空之后再格式化NameNode 和 DataNode 的集群 ID 就一致了。这个操作会丢失 HDFS 里的所有数据实验环境无所谓生产环境绝不允许这么干。从那以后我每次改完 hdfs-site.xml 要重新格式化都会先检查 tmp 目录下的遗留数据而不是直接敲 format 命令。6. 给学习成果做一次验收用三件套自检命令确认环境真的可用实验报告看完、命令敲完怎么知道自己是真的会了而不是对着文档抄我的习惯是给自己设一道裸检不开书、不翻笔记按下面的顺序跑一遍每个步骤的输出都对得上才算环境合格。检查项命令期望输出进程状态jpsNameNode、DataNode、SecondaryNameNode 三个进程数据节点hdfs dfsadmin -reportLive datanodes (1)计算链路WordCount 换新目录重跑output2/part-r-00000 有统计内容先验证 Hadoop 进程执行jps正常输出应该包含 NameNode、DataNode、SecondaryNameNode。缺哪个说明哪个进程没启动成功直接进 /usr/local/hadoop/logs/ 看对应名字的 .log 文件日志末尾通常会有明确的原因比如端口被占用、磁盘空间不足或者 clusterID 不匹配。接着验证 HDFS 的状态./bin/hdfs dfsadmin -report看到 Live datanodes (1) 说明数据节点在线。如果显示 0优先检查 DataNode 进程是否存活再检查日志。最后再跑一次 WordCount这次换个输入文件用 hadoop 目录下的 NOTICE.txtmkdir -p input2 cp NOTICE.txt input2/ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount input2 output2 cat output2/part-r-00000 | wc -l能输出单词数量的统计结果说明从 HDFS 读写到 MapReduce 计算整条链路都是通的。之所以强调换一个输入文件、换一个输出目录是因为 output 目录冲突是新手最容易踩的坑这个检验动作能顺手验证你对输出覆盖机制的理解。如果报 Output directory already exists说明你没有先删掉旧的 output2这就把本章前面埋的坑踩了个正着。从那以后我每次搭完 Hadoop 环境都强制自己把 jps、dfsadmin -report、WordCount 三件套完整走一遍少一步都不算收工。这个习惯帮我省掉了无数次环境明明启动了跑任务却莫名失败的排查时间。这份完整版实验报告里还保留着每一步的截图和命令记录复查比对的时候很可靠。希望帮到你。本文还有配套的精品资源点击获取
返回列表