编辑前建立恢复点

大数据Beginner
立即练习

介绍

社区工作坊把房间活动安排、访客联系地址和通行说明保存在共享 HDFS 目录中。在编辑活动安排之前,你需要一个恢复点,让它在当前目录改变后仍能展示获准使用的文件。

你将先读取正常数据,以普通所有者身份创建原生快照,再进行两项受控变更。你应已掌握 HDFS 路径、上传、目录以及基本的所有者/组权限。本实验介绍快照及其历史路径。全程使用 Terminal;所有数据均独立于其他实验。作者估计需 40 分钟,包含阅读和普通错误修正。

编辑前保存获准文件

在这一步中,你将读取可用的活动安排,并创建一个具名恢复点。从 Terminal 开始。cd 改变当前 shell 的本地工作目录;HDFS 命令中以 /user/labex/ 开头的路径属于 HDFS,而不是本地磁盘。

cd /home/labex/project

读取当前活动安排:

hdfs dfs -cat /user/labex/snapshot-workshop/team/schedule.csv

这些用逗号分隔的字段表示房间及其活动:

room,session
A,Printmaking
B,Bookbinding

团队目录还包含 contacts.csv 和 notes.txt。列出目录内容:

hdfs dfs -ls /user/labex/snapshot-workshop/team

这些正常的共享文件归 labex 所有,所属组为 bigdata。预配置的 analyst 用户属于该组,可以读取但不能写入。你是普通所有者,而不是 NameNode 服务身份 hdfs。教学环境使用简单认证,并不演示 Kerberos 安全。

快照是目录在某个具名时点的只读历史视图。管理员只为这个课程目录启用了快照能力。实际恢复点由你自己创建。-createSnapshot 的参数依次是当前目录和快照名称:

hdfs dfs -createSnapshot /user/labex/snapshot-workshop/team morning-approved

响应会给出以 .snapshot/morning-approved 结尾的原生路径。特殊的 .snapshot 路径分量用于选择历史记录;它不是用 -mkdir 创建的普通备份目录。读取历史活动安排:

hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/schedule.csv

它包含相同的两个获准活动。列出全部三份历史文件:

hdfs dfs -ls /user/labex/snapshot-workshop/team/.snapshot/morning-approved

快照也包含原来的联系地址和通行说明。如果命令提示 No such file or directory,将路径拼写与这个列表对照,然后只重试失败的读取。如果 -createSnapshot 提示名称已经存在,应查看该快照,而不是删除或重建它。不要重新运行环境 setup:它会拒绝覆盖已有工作。

现在,你已在任何编辑发生前建立了真实恢复点。本地下载副本或同名的普通目录都不能创建这种原生历史。

比较历史与后续工作

在这一步中,你将添加有效的新资料,制造一项范围明确的错误,并观察快照保持不变。继续使用同一个 Terminal。

后续工作坊活动的文件已放在本地。先读取它:

cat /home/labex/project/incoming/late-session.csv

它包含房间 C 和活动 Paper Folding。将它上传到当前团队目录。这是当前活动安排的一部分,任何后续恢复都必须保留它:

hdfs dfs -put /home/labex/project/incoming/late-session.csv /user/labex/snapshot-workshop/team/late-session.csv

使用 -chgrp 保持预期的共享组。文件模式 640 赋予所有者读写权限、组读取权限,并禁止其他用户访问该文件:

hdfs dfs -chgrp bigdata /user/labex/snapshot-workshop/team/late-session.csv
hdfs dfs -chmod 640 /user/labex/snapshot-workshop/team/late-session.csv

接下来,查看一份故意错误的替代文件:

cat /home/labex/project/incoming/schedule-draft.csv

其中包含 A,CANCELLED。下一次上传会故意只覆盖指定的当前活动安排文件。-f 允许替换该目标;这里使用它,是因为这是受控编辑。它不会影响快照。

hdfs dfs -put -f /home/labex/project/incoming/schedule-draft.csv /user/labex/snapshot-workshop/team/schedule.csv

第二项受控错误只删除当前联系地址文件。先确认精确路径:

hdfs dfs -ls /user/labex/snapshot-workshop/team/contacts.csv
hdfs dfs -rm /user/labex/snapshot-workshop/team/contacts.csv

不要使用通配符、递归删除或团队根目录。先读取改变后的活动安排,再读取其历史版本:

hdfs dfs -cat /user/labex/snapshot-workshop/team/schedule.csv
hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/schedule.csv

当前结果显示活动已取消;历史中仍保留 Printmaking 和 Bookbinding。以真实共享读取者的身份读取历史联系地址。sudo -u analyst 只让这一次客户端调用以该普通测试身份运行;客户端的绝对路径选择预配置的 HDFS 工具:

sudo -u analyst /usr/local/bin/hdfs dfs -cat /user/labex/snapshot-workshop/team/.snapshot/morning-approved/contacts.csv

尽管当前联系地址文件已经丢失,历史地址仍为 visitors@example.test。查看当前目录列表:

hdfs dfs -ls /user/labex/snapshot-workshop/team

它包含被修改的活动安排、未改变的说明和新增活动。如果之前上传新文件时提示目标已存在,应读取已有文件,而不是删除它并扩大上传范围。如果重复删除时提示联系地址文件不存在,说明受控删除已经完成;查看列表并继续即可。

保留这个最终现场。下一个实验会提供自己独立的损坏现场并教授恢复。快照与 HDFS 共用存储:其数据块不是独立备份副本,因此无法抵御整个存储系统丢失。

总结

你在编辑前创建了 HDFS 原生快照,并区分了受保护的历史文件与发生变化的当前目录。后续新增活动只存在于当前活动安排中,因此用历史替换整个目录会丢弃有效工作。你还使用真实共享 analyst 身份读取了历史数据。