项目03 HDFS 文件管理及系统管理 —— 学生实训任务单 ================================================================ 【实训目标】 把项目02 部署好的 Hadoop 集群启动起来,并掌握 HDFS 的日常文件操作: 创建目录、上传文件、查看内容、修改权限、追加内容、下载文件。 做完之后在实验平台左下角能看到任务清单自动打勾,全部完成后点【提交检查】 查看得分,再点【导出报告】把结果交给老师。 如果做乱了想重来:点平台右上角【重置环境】,它只会清掉格式化、启动与文件 操作的成果,回到「集群还没格式化、还没启动」的起跑线,项目02 已经部署好的 环境(主机名、免密、JDK 与 Hadoop 配置)都保留。 ================================================================ 一、启动 Hadoop 集群 ================================================================ 任务 1 格式化 HDFS(只在 master01 上执行一次!) hadoop namenode -format 看到 "successfully formatted" 才算成功 注意:格式化只能做一次,重复格式化会把集群数据清掉。 任务 2 启动集群 /opt/hadoop/sbin/start-all.sh 它会用 ssh 到 worker01、worker02 上把 DataNode 与 NodeManager 拉起来。 任务 3 验证集群(三台都要看,缺一台不算完成) jps 三台都执行,对照进程名 hdfs dfsadmin -report 在 master01 上执行,看 Live datanodes 是不是 2 个 yarn node -list 在 master01 上执行,看 NodeManager 是不是 2 个 Web UI:master01:50070(HDFS)、master01:8088(YARN) 要求:三台的 jps 都要跑过(平台会记录),只启动集群不打勾;dfsadmin 报告也要真的看一次。 ================================================================ 二、准备上传目录与 WordCount ================================================================ 任务 4 在 HDFS 上创建 /upload 目录并放开权限 hdfs dfs -mkdir /upload hdfs dfs -chmod 777 /upload hdfs dfs -ls / 必须执行这一步,并看到权限位是 drwxrwxrwx 说明:这个目录是给 Web 界面上传文件用的,权限不放开网页上传会失败。 建完、改完权限**一定要再 ls 看一眼**,只看命令没报错不算完成。 任务 5 启动一个 WordCount 任务 echo "Hello Hadoop" > test.txt hdfs dfs -put test.txt /test.txt hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount /test.txt /wc_out1 看到 job ... completed successfully 之后: hdfs dfs -ls /wc_out1 hdfs dfs -cat /wc_out1/part-r-00000 提示:jar 的名字是 examples(复数),少写一个 s 会报文件不存在。 ================================================================ 三、HDFS 文件系统操作(教材「任务实施」) ================================================================ 任务 6 查看 HDFS 的根目录下的文件列表 hdfs dfs -ls / 注意每行开头的信息:权限位、副本数、属主属组、大小、路径。 任务 7 在 HDFS 中创建一个目录 hdfs dfs -mkdir /dir01 hdfs dfs -ls / 必须执行,并看到 /dir01 出现在列表里 任务 8 将本地文件上传到 HDFS 新建目录中 echo "Hello Hadoop" > test.txt cat test.txt hdfs dfs -put test.txt /dir01/ hdfs dfs -ls /dir01 必须执行,并看到 /dir01/test.txt 任务 9 查看 HDFS 中文件的内容 hdfs dfs -cat /dir01/test.txt hdfs dfs -text /dir01/test.txt (文本文件效果一样) 任务 10 修改 HDFS 新上传文件的权限 hdfs dfs -chmod 777 /dir01/test.txt hdfs dfs -ls /dir01 必须执行,并看到权限位变成 -rwxrwxrwx 任务 11 在 HDFS 新上传的文件中追加字符串 hdfs dfs -appendToFile - /dir01/test.txt 这时处在输入状态,直接敲: Hello HDFS 敲完按 Ctrl+C 表示输入结束("-" 就表示从标准输入读) hdfs dfs -cat /dir01/test.txt 应看到两行内容 任务 12 将 HDFS 上的文件下载到本地 hdfs dfs -get /dir01/test.txt ./test_new.txt cat test_new.txt ================================================================ 【HDFS 常用命令速查】 ================================================================ hdfs dfs -ls <路径> 列目录 hdfs dfs -mkdir <路径> 建目录 hdfs dfs -put <本地> 上传(本地 → HDFS) hdfs dfs -get <本地> 下载(HDFS → 本地) hdfs dfs -cat / -text <文件> 查看文件内容 hdfs dfs -chmod <权限> <路径> 修改权限 hdfs dfs -appendToFile - <文件> 追加内容(Ctrl+C 结束输入) hdfs dfs -rm [-r] <路径> 删除 hdfs dfsadmin -report 查看 DataNode 状态 ================================================================ 【完成标准(自己先核对一遍)】 ================================================================ □ master01 的 jps 能看到 NameNode / SecondaryNameNode / ResourceManager □ 两台 worker 的 jps 能看到 DataNode / NodeManager(三台都跑过 jps 才算) □ hdfs dfsadmin -report 显示 2 个 Live datanodes □ hdfs dfs -ls / 能看到 /upload(权限 drwxrwxrwx)和 /dir01 □ /wc_out1/part-r-00000 里能看到词频统计结果 □ hdfs dfs -ls /dir01 里 test.txt 的权限位是 -rwxrwxrwx □ /dir01/test.txt 有两行:Hello Hadoop 和 Hello HDFS □ 本地 test_new.txt 的内容与 HDFS 上的一致 【注意:平台的判定方式(别以为做了就一定会打勾)】 · 任务 3 要求三台都执行过 jps、并在 master01 执行过 hdfs dfsadmin -report; 只把集群启动起来是不会打勾的。 · 任务 4、7、8、10 都要求"用 hdfs dfs -ls 亲眼看到结果": 命令敲了、但没 ls 确认过,也不会打勾。 ================================================================ 【常见问题】 ================================================================ · 提示 "NameNode 还没有格式化" → 先做任务 1 · 提示 Connection refused(9000/8020)→ 集群还没启动,做任务 2 · WordCount 报 FileAlreadyExistsException → 输出目录 /wc_out1 已存在, 换个名字(如 /wc_out2),或先 hdfs dfs -rm -r /wc_out1 删掉 · WordCount 报 InvalidInputException → 输入文件不在 HDFS 上,先 hdfs dfs -put · -appendToFile 停在输入状态不动 → 按 Ctrl+C 结束输入,就回到命令提示符 · 权限改完不确定成没成 → 用 hdfs dfs -ls 再看一眼,别只看命令没报错 · 想从头再来 → 点右上角【重置环境】(集群第一、二部分仍然是配好的) ================================================================ 四、安全模式操作 ================================================================ 1. 在 master01 查询、进入、再次查询: hdfs dfsadmin -safemode get hdfs dfsadmin -safemode enter hdfs dfsadmin -safemode get 应先显示 OFF,进入后显示 ON。 2. 安全模式中验证禁止写入: hdfs dfs -put test_new.txt / 应提示 Name node is in safe mode;不能把上传失败当作成功。 3. 验证仍允许读取: hdfs dfs -ls /dir01 hdfs dfs -cat /dir01/test.txt hdfs dfs -get /dir01/test.txt ./safe_read.txt cat safe_read.txt 4. 退出并核对: hdfs dfsadmin -safemode leave hdfs dfsadmin -safemode get 恢复 OFF 后才可以继续后面的写入操作。 ================================================================ 五、扩容操作(补充 worker03 的准备过程) ================================================================ 本实验新增一台待配置的 worker03 虚拟机,IP 为192.168.137.217。 原三台仍为 master01 .211、worker01 .212、worker02 .213。 教材报告使用的主节点IP与本模拟器不同,保持本平台原有地址即可。 1. 切换 worker03,完成系统准备: ip a hostnamectl set-hostname worker03 systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config 将 SELINUX 设置为 disabled。 2. 四台机器的 /etc/hosts 均配置: 192.168.137.211 master01 192.168.137.212 worker01 192.168.137.213 worker02 192.168.137.217 worker03 可在主节点编辑好,再用 scp /etc/hosts worker03:/etc/hosts 等命令分发。 3. 主节点到新节点免密: ssh-copy-id worker03 输入新节点练习密码123456,再用 ssh worker03 hostname 核对。 4. worker03 配置时间同步: vim /etc/chrony.conf 加入 server master01 iburst systemctl restart chronyd systemctl enable chronyd chronyc sources 5. worker03 安装JDK并配置环境变量: yum install -y java-1.8.0-openjdk* vim /etc/profile 加入: export JAVA_HOME=/usr/lib/jvm/java export HADOOP_HOME=/opt/hadoop export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source /etc/profile java -version 6. master01 编辑 /opt/hadoop/etc/hadoop/workers,保留并写入三行: worker01 worker02 worker03 7. master01 同步Hadoop目录: yum install -y rsync rsync -a /opt/hadoop worker01:/opt/ rsync -a /opt/hadoop worker02:/opt/ rsync -a /opt/hadoop worker03:/opt/ 8. worker03 启动服务: hdfs --daemon start datanode yarn --daemon start nodemanager jps 也可使用 /opt/hadoop/sbin/hadoop-daemon.sh start datanode 和 /opt/hadoop/sbin/yarn-daemon.sh start nodemanager。 教材把 DataNode 启动脚本写成 yarn-daemon.sh,此处按HDFS/YARN服务职责修正; 模拟器保留教材兼容写法,但建议学习上面的标准命令。 9. master01 核实两个报告: hdfs dfsadmin -report 应看到 Live datanodes (3) 与 worker03; yarn node -list 应看到 Total Nodes:3 与 worker03 RUNNING。 10. 数据平衡: /opt/hadoop/sbin/start-balancer.sh 完成后观察 The cluster is balanced。 ================================================================ 六、快照操作 ================================================================ 1. 开启快照:hdfs dfsadmin -allowSnapshot /dir01 2. 创建变更前快照:hdfs dfs -createSnapshot /dir01 s1 3. 创建新文件并查看: hdfs dfs -touchz /dir01/test1.txt hdfs dfs -ls /dir01 4. 创建变更后快照:hdfs dfs -createSnapshot /dir01 s2 5. 比较:hdfs snapshotDiff /dir01 s1 s2 应显示 + ./test1.txt。 可分别 hdfs dfs -ls /dir01/.snapshot/s1 与 hdfs dfs -ls /dir01/.snapshot/s2,核对快照记录的是创建时的内容。 快照为只读,修改实时目录不会改写已创建的快照。 6. 删除: hdfs dfs -deleteSnapshot /dir01 s1 hdfs dfs -deleteSnapshot /dir01 s2 7. 禁止快照:hdfs dfsadmin -disallowSnapshot /dir01 必须先删除快照,再禁止快照功能。