1. Hadoop HDFS
1.1 HDFS 优点
高容错: 数据自动保存多个副本,它通过增加副本的形式提高容错性。某个副本丢失以后,它可以自动恢复。
适合海量数据处理:
- 数据规模:能够处理数据规模达到 GB、TB、甚至PB级别的数据
- 文件规模:能够处理百万规模以上的文件数量,数量相当之大
流式数据访问:
-
一次写入,多次读取,不能修改,只能追加
-
它能保证数据的一致性
廉价易扩展: 廉价可构建(扩建)在廉价机器上,通过多副本机制,提高可靠性。
1.2 HDFS 缺点
1、不适合低延时数据访问,比如毫秒级的存储数据,是做不到的
2、无法高效的对大量小文件进行存储
- 存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信 息。这样是不可取的,因为NameNode的内存总是有限的
- 小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标
3、并发写入、文件随机修改
- 一个文件只能有一个写,不允许多个线程同时写
- 仅支持数据 append(追加),不支持文件的随机修改
2. HDFS 组成
Client: 客户端
- 文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传
- 与NameNode交互,获取文件的位置信息
- 与DataNode交互,读取或者写入数据
- Client提供一些命令来管理HDFS,比如NameNode格式化
- Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作
NameNode: 集群中的 Master 节点(主节点),负责管理元数据(文件属性信息)
- 管理 HDFS 的命名空间
- 配置副本策略
- 管理数据块(Block)映射信息
- 处理客户端读写请求
DataNode: 集群中的 Slave 节点(从节点),是文件存储的基本单元,用来管理文件块
- 存储实际的数据块
- 执行数据的读/写操作
Secondary NameNode: 集群中的主节点辅助节点,用于 NameNode 的存储优化和数据恢复
- 辅助 NameNode,分担其工作量,比如定期合并 Fsimage 和 Edits,并推送给 NameNode
- 在紧急情况下,可辅助恢复 NameNode
组件间关系:
- 一个HDFS集群是由一个 NameNode 和一定数目的 DataNode 组成。
- DataNode 负责处理文件系统客户端的读写请求,在 NameNode 的统一调度下进行数据块的创建、删除和复制。
- 典型的部署场景是一台机器上只运行一个 NameNode 实例,而集群中的其它机器分别运行一个 DataNode 实例。
3. HDFS 命令
HDFS 的命令格式:
hadoop dsf -command # 已过时
hadoop df -command # 使用范围较大
hdfs dsf -command # 适用范围较小
在 Linux 下敲 hdfs
,可以查看后面跟的命令,使用较多的是加 dfs
hdfs dfs
所跟的命令如下:
3.1 Shell 命令
创建目录:
hdfs dfs -mkdir [-p] <path>..<dir> # -p 多层级创建
删除目录:
hdfs dfs -rmkdir <path>..<dir> # 只能删除空目录,否则只能用 rm
删除:
hdfs dfs -rm [-f] [-r|-R] [-skipTrash] <src> ...
查看:
hdfs dfs -ls [-d] [-h] [-R] [<path> ...]
hdfs dfs -cat [-ignoreCrc] <src> ...
hdfs dfs -tail [-f] <file>
创建目录:
hdfs dfs -mkdir
创建目录:
hdfs dfs -mkdir
上传:
hdfs dfs -put [-f] [-p] [-l] <localsrc> ... <dst>]
hdfs dfs -moveFromLocal <localsrc> ... <dst>
hdfs dfs -copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>
下载:
hdfs dfs -get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>
hdfs dfs -moveToLocal <src> <localdst>
hdfs dfs -copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>
权限:
hdfs dfs -chgrp [-R] GROUP PATH...
hdfs dfs -chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...
hdfs dfs -chown [-R] [OWNER][:[GROUP]] PATH...
追加:
hdfs dfs -appendToFile <localsrc> ... <dst>
查看磁盘:
hdfs dfs -df [-h] [<path> ...]
查看大小:
hdfs dfs -du [-s] [-h] <path> ...
修改副本数:
hdfs dfs -setrep [-R] [-w] <rep> <path> ...
查看文件状态:
hdfs dfs -stat [format] <path> ...
format的形式:
%b:打印文件的大小(目录大小为0)
%n:打印文件名
%o:打印block的size
%r:打印副本数
%y:utc时间 yyyy-MM-dd HH:mm:ss
%Y:打印自1970年1月1日以来的utc的微秒数
%F:目录打印directory,文件打印regular file
❤️ END ❤️