跳转至

实验 3 - 熟悉常用的 HDFS 操作 - Shell 部分

在本次实验中,我们需要编写 Java 代码,同时还要使用 Hadoop 命令完成一系列操作。难度不高,但相对冗长,需要消耗一定时间。

这篇是使用 Shell 命令实现功能的部分。

启动 Hadoop 集群

启动所有节点的虚拟机,再启动 Hadoop. 可以参考实验一来确认步骤。随后再使用 SSH 连接到 namenode,以便运行接下来的命令实现:

ssh hadoop@192.168.178.100

完成任务!

前置条件已经就位,我们开始完成下面的任务吧。

1. 上传数据

要求

向 HDFS 中上传任意数据到一个文件,如果指定的文件在 HDFS 中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件

Hadoop 命令实现1

echo "foo bar" | hdfs dfs -appendToFile - /user/hadoop/append_test

2. 上传文件

要求

从本地文件系统任选一个文件向 HDFS 中传输。

Hadoop 命令实现:

uptime > /tmp/test.txt
hdfs dfs -put /tmp/test.txt /user/hadoop/test.txt

3. 下载文件

要求

从 HDFS 中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名。

Hadoop 命令实现2

hdfs dfs -get -ignoreCrc /user/hadoop/append_test /tmp/append_test

4. 读取文件

要求

将 HDFS 中指定文件的内容输出到终端中。

Hadoop 命令实现3

hdfs dfs -cat /user/hadoop/append_test

5. 读取元数据

要求

显示 HDFS 中指定的文件的读写权限、大小、创建时间、路径等信息。

Hadoop 命令实现4

hdfs dfs -stat /user/hadoop/append_test

6. 递归列出元数据

要求

给定 HDFS 中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。

Hadoop 命令实现5

hdfs dfs -ls -R /

7. 创建文件

要求

提供一个 HDFS 的文件的路径,创建该文件(可为空)

Hadoop 命令实现6

hdfs dfs -mkdir /user/hadoop/a
hdfs dfs -touchz /user/hadoop/a/b.txt

8. 创建目录

要求

提供一个 HDFS 内的目录的路径,创建该目录。如果目录的上级目录结构不存在,则自动创建目录。

Hadoop 命令实现7

hdfs dfs -mkdir -p /user/hadoop/b/c

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

hdfs dfs -rm /user/hadoop/a/b.txt

11. 删除目录

要求

删除 HDFS 中指定的目录,由用户指定目录中如果存在文件时是否删除目录。

Hadoop 命令实现7

hdfs dfs -rmdir /user/hadoop/a

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 模式

  1. appendToFile 参数参考  

  2. get 参数参考  

  3. cat 参数参考  

  4. stat 参数参考  

  5. ls 参数参考  

  6. touchz rm 参数参考 

  7. mkdir rmdir 参数参考 

  8. concat 总是将后一个参数的文件追加到前一个参数的文件后,因此我们可以实现在前部或在后部追加。参数参考  

  9. rm 参数参考  

  10. mv 参数参考