HDFS文件操作

HDFS文件操作

HDFS Shell 命令行
# 基本格式:hdfs dfs -cmd<args>

# 创建存放数据文件的目录
## 在 hadoop 下创建 job
hdfs dfs -mkdir /hadoop/job

## 在 hadoop 下连续创建 test 和 data (中间加个空格)
hdfs dfs -mkdir /hadoop/test /hadoop/data

## 在 test 里面创建 data(递归-p)
hdfs dfs -mkdir -p/test/data

# 删除目录 data(mr)
hdfs dfs -rmr /test/data

#查看 
hdfs dfs -ls
Found 2 items
drwxr-xr-x   - root supergroup          0 2024-04-17 22:11 .sparkStaging
drwxr-xr-x   - root supergroup          0 2023-11-19 10:41 hive_data

hdfs dfs -ls /hadoop
Found 3 items
drwxr-xr-x   - root supergroup          0 2023-11-02 19:54 /hadoop/data
drwxr-xr-x   - root supergroup          0 2023-11-02 20:00 /hadoop/job
drwxr-xr-x   - root supergroup          0 2023-10-22 17:13 /hadoop/wordcount

# 将通讯数据上传到 HDFS 上
hdfs dfs -put /root/test_shell/test_bool.sh /hadoop/test

# 查看上传到 HDFS 上的通讯数据
hdfs dfs -text /hadoop/test/test.bool.sh

# 下载文件到本地(下载文件的路径可以直接到文件,也可以到目录)
hdfs dfs -get /hadoop/test/test.bool.sh /root test_shell

# 统计文件的大小
hdfs dfs -du /hadoop/test/test_bool.sh
565  565  /hadoop/test/test_bool.sh

hdfs dfs -du /hadoop/data
147448639  147448639  /hadoop/data/del
105599797  105599797  /hadoop/data/many
3038099    3038099    /hadoop/data/movies.csv
678260987  678260987  /hadoop/data/ratings.csv
38810332   38810332   /hadoop/data/tags.csv
97418      97418      /hadoop/data/《小王子》英文版.txt

# 删除移动数据文件和目录(删除文件用的是 -rm,而删除目录用的是 -rmr)
hdfs -dfs -rm /hadoop/test/test_bool.sh
hdfs dfs -rmr /hadoop/test(删除目录时,如果目录下还有文件,会一起删除)

HDFS 安全模式(safeMode)

hdfs dfsadmin -safemode 命令用于检查或设置 Hadoop HDFS 的安全模式(Safe Mode)

在安全模式下,HDFS处于只读状态,不允许对系统进行写操作,这通常用于维护和保护文件系统的完整性。

在安全模式下,管理员可以执行一些维护任务,如检查文件系统的健康状态,修复数据等。

hdfs dfsadmin -safemode [get | enter | leave]

get: 用于获取当前的安全模式,它将返回当前的安全模式状态,如是否处于安全模式、副本数量是否达到预期等信息。

enter: 用于将HDFS进入安全模式,这是为了进行维护操作,如手动修复数据块或进行数据完整性检查,进入安全模式后,文件系统将变为只读状态。

leave: 用于将HDFS退出安全模式,允许对文件系统进行写操作。在维护任务完成后,可以使用此选项退出安全模式。

客户端读取hdfs文件内容的流程

在这里插入图片描述

客户端请求(Client Request):

客户端通过调用 open 方法请求读取文件。这个请求被发送到 HDFS 的 FileSystem。

NameNode 处理(NameNode Processing):

FileSystem 在 NameNode 上执行,它负责管理文件系统的命名空间和客户端对文件的访问。NameNode 接收到客户端的请求后,查找文件的元数据,并确定文件块(block)的位置。

获取块位置(Get Block Locations):

NameNode 响应客户端的请求,返回文件所涉及的所有块的位置信息。这个过程通常涉及到查找文件的元数据,这些元数据存储在 NameNode 中。

客户端读取数据(Client Reads Data):

客户端接收到块位置信息后,直接向包含这些块的 DataNode 发起读取请求。客户端会根据返回的块位置信息,与相应的 DataNode 建立连接。

DataNode 响应(DataNode Response):

DataNode 接收到客户端的读取请求后,将请求的数据块发送回客户端。客户端通过 InputStream 读取数据。

关闭连接(Close Connection):

一旦客户端读取完所需的数据,它会调用 close 方法来关闭与 DataNode 的连接。DataNode 也会关闭与客户端的连接。

数据传输(Data Transfer):

在数据读取过程中,DataNode 将数据通过网络传输到客户端。这个过程可能涉及到多个 DataNode,因为一个文件可能被分割成多个块,存储在不同的 DataNode 上。

客户端向hdfs写内容的流程

在这里插入图片描述

客户端发起创建文件请求(Client Initiates File Creation):

用户或应用程序在客户端发起创建新文件的请求。这个请求首先被发送到 HDFS 的客户端 API。

客户端请求 NameNode(Client Requests NameNode):

HDFS 客户端包含文件系统的命名空间的本地副本。客户端 API 会检查本地副本是否有文件的元数据,如果没有,它会向 NameNode 发送请求以创建新文件。

NameNode 创建文件并返回创建信息(NameNode Creates File and Returns Information):

NameNode 接收到创建文件的请求后,会在文件系统的命名空间中创建一个新的文件条目,并返回文件的创建信息,包括文件的数据块信息和第一个数据块的 DataNode 位置。

客户端打开输出流(Client Opens OutputStream):

客户端根据 NameNode 返回的信息,打开一个到指定 DataNode 的输出流(OutputStream)。这个流是用于写入文件数据的。

客户端写入数据包(Client Writes Data Packet):

客户端开始将数据分成多个数据包,并通过打开的输出流将第一个数据包写入到第一个 DataNode。

DataNode 确认接收数据包(DataNode Acknowledges Packet):

第一个 DataNode 接收到数据包后,会向客户端发送一个确认包(ack packet),表明数据包已经成功接收并存储。

建立数据流水线(Pipeline Establishment):

客户端收到确认后,会为下一个数据块创建一个新的输出流到下一个 DataNode。这样,客户端会建立一个 DataNode 之间的流水线,用于连续地写入数据。

客户端继续写入数据(Client Continues Writing Data):

客户端沿着建立的流水线继续写入剩余的数据包。每个 DataNode 接收到数据包后,都会向它的下一个 DataNode 转发数据包,并同时向客户端发送确认包。

关闭输出流和文件(Close OutputStream and File):

当所有数据都被写入后,客户端会关闭输出流。这会沿着流水线传递关闭信号,直到所有 DataNode 都完成了文件写入操作。一旦所有数据块都被确认写入,客户端会向 NameNode 发送 complete 请求,完成文件的创建。

NameNode 更新文件元数据(NameNode Updates Metadata):

最后,NameNode 更新文件的元数据,确认文件写入操作已完成。这包括更新文件的大小、修改时间等信息。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值