实验 3 - 熟悉常用的 HDFS 操作 - Shell 部分¶
在本次实验中,我们需要编写 Java 代码,同时还要使用 Hadoop 命令完成一系列操作。难度不高,但相对冗长,需要消耗一定时间。
这篇是使用 Shell 命令实现功能的部分。
启动 Hadoop 集群¶
启动所有节点的虚拟机,再启动 Hadoop. 可以参考实验一来确认步骤。随后再使用 SSH 连接到 namenode,以便运行接下来的命令实现:
完成任务!¶
前置条件已经就位,我们开始完成下面的任务吧。
1. 上传数据¶
要求
向 HDFS 中上传任意数据到一个文件,如果指定的文件在 HDFS 中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。
Hadoop 命令实现1:
2. 上传文件¶
要求
从本地文件系统任选一个文件向 HDFS 中传输。
Hadoop 命令实现:
3. 下载文件¶
要求
从 HDFS 中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名。
Hadoop 命令实现2:
4. 读取文件¶
要求
将 HDFS 中指定文件的内容输出到终端中。
Hadoop 命令实现3:
5. 读取元数据¶
要求
显示 HDFS 中指定的文件的读写权限、大小、创建时间、路径等信息。
Hadoop 命令实现4:
6. 递归列出元数据¶
要求
给定 HDFS 中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。
Hadoop 命令实现5:
7. 创建文件¶
要求
提供一个 HDFS 的文件的路径,创建该文件(可为空)
Hadoop 命令实现6:
8. 创建目录¶
要求
提供一个 HDFS 内的目录的路径,创建该目录。如果目录的上级目录结构不存在,则自动创建目录。
Hadoop 命令实现7:
9. 合并文件¶
要求
在 HDFS 中合并任意两个文件到新文件。
Hadoop 命令实现8:
# 通用步骤
# 建立另一个临时文件
echo "test" | hdfs dfs -put - /user/hadoop/buf.txt
# 建立合并目标
hdfs dfs -touchz /user/hadoop/merged.txt
# 合并两个文件到 merged.txt
hdfs dfs -concat /user/hadoop/merged.txt /user/hadoop/buf.txt /user/hadoop/append_test
10. 删除文件¶
要求
删除 HDFS 中指定的文件。
Hadoop 命令实现9:
11. 删除目录¶
要求
删除 HDFS 中指定的目录,由用户指定目录中如果存在文件时是否删除目录。
Hadoop 命令实现7:
12. 移动文件¶
要求
在 HDFS 中,将文件从源路径移动到目的路径。
Hadoop 命令实现10:
# 先建一个目录拿来充数
hdfs dfs -mkdir -p /user/hadoop/a/b/c/d
# 执行移动
hdfs dfs -mv /user/hadoop/a /user/hadoop/b
完成了?¶
完成了!你可以停止 Hadoop 集群,或者继续前往 Java 实现部分。
Changelog / 更新日志¶
- 2023/03/28
- 捉了一个小臭虫
- 2023/03/19
- 修正 typo
- 2023/03/17
- 更改
hadoop fs命令为针对 HDFS 的hdfs dfs命令,可参见 Apache 文档 - 更改了“追加文件内容”为“合并文件”
- 更改
- 2023/03/10
- 分离出 Shell 部分和 Java 部分
- 2023/03/09
- 更改为 Scaffold / Code 模式