HDFS是Hadoop体系中最重要的组成部分,主要用于解决海量大数据的存储的问题,是目前应用最广的分布式文件存储系统。
1.HDFS解决传统文件存储的两个问题
- 当数据量越来越大时,会遇到存储的瓶颈,需要扩容
- 由于文件太大,上传和下载都非常耗时
解决:
2.HDFS的基本概念
2.1 NameNode(名称节点)
NameNode是HDFS集群的主服务器,通常成为名称节点或者主节点。两大功能
NameNode两个重要文件
- fsimage:元数据镜像文件(保存文件系统的目录树)
Fsimage是一个二进制文件,当中记录了HDFS中所有文件和目录的元数据信息 - edits:元数据操作日志(针对目录树的修改操作)
- Namenode会将HDFS的文件和目录元数据存储在一个叫fsimage的二进制文件中,每次保存fsimage之后到下次保存之间的所有hdfs操作,将会记录在editlog文件中,当editlog达到一定的大小(bytes,由fs.checkpoint.size参数定义)或从上次保存过后一定时间段过后(sec,由fs.checkpoint.period参数定义),namenode会重新将内存中对整个HDFS的目录树和文件元数据刷到fsimage文件中。Namenode就是通过这种方式来保证HDFS中元数据信息的安全性。
2.2 Secondary NameNode
Secondary NameNode的职责是合并NameNode的edit logs到fsimage文件中。 它定时到NameNode去获取edit logs,并更新到自己的fsimage上。 一旦它有了新的fsimage文件,它将其拷贝回NameNode中。 NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间
NameNode | Secondary NameNode |
---|
客户端请求的响应 元数据的管理
| 不sNameNode节点的热备份 负责edit logs和fsimage的合并 辅助恢复NameNode |
2.3 DataNode
DataNode节点是HDFS集群中的从服务器,通常称为数据节点。Datenode 提供真实文件数据的存储服务。 DataNode响应来自HDFS客户机的读写请求同时它们还响应来自NameNode的创建,删除和复制块的命令。NameNode依赖来自每个DataNode的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode可以根据这个报告验证块映射和其他文件系统元数据。如果DataNode不能发送心跳消息,NameNode将采用修复措施。重新复制在该节点上丢失的块。
文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个称一个Block。HDFS默认BIock大小是128MB。
3.HDFS的读写文件流程
3.1 HDFS的读文件流程
3.2 HDFS的写文件流程
4.HDFS的Shell操作
HDFS提供了多种数据访问的方式,其中命令行是最简单的。HDFS Shell包含以下三种:
hadoop fs 参数
hadoop dfs 参数
hdfs dfs 参数
fs涉及到一个通用的文件系统,可以指向任何的文件系统如local file,HDFS等。但是dfs仅是针对HDFS的。 (1)fs是文件系统, dfs是分布式文件系统 (2)fs > dfs (3)分布式环境情况下,fs与dfs无区别 (4)本地环境中,fs就是本地文件,dfs就不能用了
- hadoop fs: 使用面最广,可以操作任何文件系统。
- hadoop dfs和hdfs dfs:
只能操作HDFS文件系统相关(包括与Local FS间的操作),hadoop dfs已经废弃,被hdfs dfs代替。
4.1 HDFS命令
常用命令
[root@hadoop001 ~]
[root@hadoop001 ~]
命令参数 | 功能描述 |
---|
-ls | 查看指定路径下的文件目录 | -du | 统计目录下所有文件的大小 | -mv | 移动文件 | -co | 复制文件 | -rm | 删除文件或空白文件夹 | -put | 上传文件 | -get | 下载文件 | -text | 将源文件输出为文本格式 | -moveFromLocal | 从本地移动文件 | -copyFromLocal | 从本地复制文件 | -copyToLocal | 从HDFS拷贝到本地 | -appendToFile | 追加文件 | -help | 帮助 |
命令帮助
[root@hadoop001 ~]
Usage: hadoop fs [generic options] -ls [-d] [-h] [-R] [<path> ...]
[root@hadoop001 ~]
-ls [-d] [-h] [-R] [<path> ...] :
List the contents that match the specified file pattern. If path is not
specified, the contents of /user/<currentUser> will be listed. Directory entries
are of the form:
permissions - userId groupId sizeOfDirectory(in bytes)
modificationDate(yyyy-MM-dd HH:mm) directoryName
and file entries are of the form:
permissions numberOfReplicas userId groupId sizeOfFile(in bytes)
modificationDate(yyyy-MM-dd HH:mm) fileName
-d Directories are listed as plain files.
-h Formats the sizes of files in a human-readable fashion rather than a number
of bytes.
-R Recursively list the contents of directories.
4.2 HDFS命令事件
4.2.1 启动Hadoop集群
[root@hadoop001 ~]
[root@hadoop003 ~]
4.2.2 -help:输出这个命令参数
[root@hadoop001 ~]
4.2.3 -ls: 显示目录信息
[root@hadoop001 ~]
4.2.4 -mkdir:在HDFS上创建目录
[root@hadoop001 ~]
[root@hadoop001 ~]
Found 1 items
drwxr-xr-x - root supergroup 0 2022-04-24 00:15 /class
[root@hadoop001 ~]
Found 1 items
drwxr-xr-x - root supergroup 0 2022-04-24 00:15 /class/2020031031
[root@hadoop001 ~]
4.2.5 -copyFromLocal:从本地文件系统中拷贝文件到HDFS路径去
-put:等同于copyFromLocal
[root@hadoop001 ~]
[root@hadoop001 ~]
刘世杰
翟金泉
[root@hadoop001 ~]
4.2.6 -cat:显示文件内容
[root@hadoop001 ~]
刘世杰
翟金泉
4.2.7 -appendToFile:追加一个文件到已经存在的文件末尾
[root@hadoop001 ~]
[root@hadoop001 ~]
刘世杰
翟金泉
刘世杰
翟金泉
4.2.7 -moveFromLocal:从本地剪切粘贴到HDFS
[root@hadoop001 ~]
[root@hadoop001 ~]
刘世杰
翟金泉
4.2.8 copyToLocal:从HDFS拷贝到本地
-get:等同于copyToLocal,就是从HDFS下载文件到本地
[root@hadoop001 ~]
[root@hadoop001 ~]
total 8
-rw-------. 1 root root 2744 Mar 28 06:18 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Apr 18 18:24 Desktop
drwxr-xr-x. 2 root root 6 Apr 18 18:24 Documents
drwxr-xr-x. 2 root root 6 Apr 18 18:24 Downloads
-rw-r--r-- 1 root root 40 Apr 24 16:25 mingdan.txt
drwxr-xr-x. 2 root root 6 Apr 18 18:24 Music
drwxr-xr-x. 2 root root 6 Apr 18 18:24 Pictures
drwxr-xr-x. 2 root root 6 Apr 18 18:24 Public
drwxr-xr-x. 2 root root 6 Apr 18 18:24 Templates
drwxr-xr-x. 2 root root 6 Apr 18 18:24 Videos
[root@hadoop001 ~]
刘世杰
翟金泉
刘世杰
翟金泉
4.2.9 -cp :从HDFS的一个路径拷贝到HDFS的另一个路径
[root@hadoop001 ~]
[root@hadoop001 ~]
刘世杰
翟金泉
刘世杰
翟金泉
4.2.10 -mv:在HDFS目录中移动文件
[root@hadoop001 ~]
[root@hadoop001 ~]
[root@hadoop001 ~]
刘世杰
翟金泉
刘世杰
翟金泉
4.2.11 -tail:显示一个文件的末尾
[root@hadoop001 ~]
刘世杰
翟金泉
刘世杰
翟金泉
4.2.12 -chgrp 、-chmod、-chown:Linux文件系统中的用法一样,修改文件所属权限
[root@hadoop001 ~]
窗口查看文件权限
4.2.13 -getmerge:合并下载多个文件
[root@hadoop001 ~]
[root@hadoop001 ~]
[root@hadoop001 ~]
[root@hadoop001 ~]
[root@hadoop001 ~]
[root@hadoop001 ~]
Found 3 items
-rw-r--r-- 3 root supergroup 5 2022-04-24 17:16 /user/log1.txt
-rw-r--r-- 3 root supergroup 5 2022-04-24 17:16 /user/log2.txt
-rw-r--r-- 3 root supergroup 5 2022-04-24 17:16 /user/log3.txt
[root@hadoop001 ~]hdfs dfs -getmerge /user/* /tmp/log.txt
[root@hadoop001 ~]
log1
log2
log3
4.2.14 -rm:删除文件或文件夹
-rmdir:删除空目录
[root@hadoop001 ~]
刘世杰
翟金泉
刘世杰
翟金泉
[root@hadoop001 ~]
22/04/24 17:27:35 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /class/2020031032/mingdan.txt
[root@hadoop001 ~]
[root@hadoop001 ~]
cat: `/class/2020031032/mingdan.txt': No such file or directory
[root@hadoop001 ~]
Found 3 items
drwxr-xr-x - root supergroup 0 2022-04-24 17:05 /class/2020031031
drwxr-xr-x - root supergroup 0 2022-04-24 17:27 /class/2020031032
-rw-r--r-- 3 root supergroup 20 2022-04-24 16:24 /class/mingdan.txt
[root@hadoop001 ~]
[root@hadoop001 ~]
Found 2 items
drwxr-xr-x - root supergroup 0 2022-04-24 17:05 /class/2020031031
-rw-r--r-- 3 root supergroup 20 2022-04-24 16:24 /class/mingdan.txt
[root@hadoop001 ~]
Found 4 items
drwxr-xr-x - root supergroup 0 2022-04-24 17:29 /class
-rw-r--r-- 3 root supergroup 40 2022-04-24 17:00 /mingdan.txt
drwxr-xr-x - root supergroup 0 2022-04-24 17:22 /tmp
drwxr-xr-x - root supergroup 0 2022-04-24 17:16 /user
[root@hadoop001 ~]
-rm: Illegal option -help
Usage: hadoop fs [generic options] -rm [-f] [-r|-R] [-skipTrash] <src> ...
[root@hadoop001 ~]
rm: `/class': Is a directory
[root@hadoop001 ~]
22/04/24 17:32:39 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /class
4.2.15 -du统计文件夹的大小信息
[root@hadoop001 ~]
5 /user/log1.txt
5 /user/log2.txt
5 /user/log3.txt
[root@hadoop001 ~]
15 /user
4.2.16 -setrep:设置HDFS中文件的副本数量
[root@hadoop001 ~]
Replication 2 set: /user/log1.txt
|