HDFS简介
HDFS是Hadoop外围组成, 是分布式存储服务
HDFS是分布式文件系统中的一种
HDFS的重要概念
HDFS通过对立的命名空间目录树来定位文件另外, 它是分布式的, 由很多服务器联结起来实现其性能. 集群中的服务器有各自的角色(分布式实质是拆分, 各司其职)
- 典型的Master/Slave架构
HDFS的架构是典型的Master/Slave构造
HDFS集群往往是一个NameNode+多个DataNode组成NameNode
是集群的主节点,DataNode
是集群的从节点 - 分块存储(block机制)
HDFS中的文件在物理是分块存储(block)的, 块的大小能够通过配置参数来指定
Hadoop2.x版本中默认的block大小是128M - 命名空间(NameSpace)
HDFS反对传统的档次型文件组织构造.
用户或者应用程序能够创立目录, 而后将文件保留在这些目录里.
文件系统命名空间的层次结构和大多数现有的文件系统相似: 用户能够创立, 删除, 挪动或重命名文件NameNode
负责保护文件系统的命名空间, 任何对文件系统命名空间或属性的批改都将被NameNode记录下来 - NameNode元数据管理
咱们把目录构造及文件分块地位叫做元数据NameNode
的元数据记录每一个文件所对应的block信息(block的id, 以及所在的DataNode节点) - DataNode数据存储
文件的各个block的具体存储管理由DataNode节点来承当
一个block会有多个DataNode来存储, DataNode会定时向NameNode来汇报本人持有的block信息 - 正本机制
为了容错, 文件的所有block都会有正本
每个文件的block大小和正本系数都是可配置的
应用程序能够指定某个文件的正本数目
正本系数能够在文件创建的时候指定, 也能够在之后扭转
正本数量默认是3个 - 一次写入, 屡次读出
HDFS设计成适应一次写入, 屡次读出的场景, 且不反对文件的随机批改 . (反对追加写入, 不反对随机更新)
正因为如此, HDFS适宜用来做大数据分析的底层存储, 并不适宜用来做网盘等利用 (批改不不便, 提早大, 网络开销大, 老本太高)
HDFS架构
NameNode
: HDFS集群的管理者, Master- 保护治理HDFS的命名空间(NameSpace)
- 保护正本策略
- 记录文件块(Block)的映射信息
- 负责解决客户端读写申请
DataNode
: NameNode下达命令, DataNode执行实际操作, Slave- 保留理论的数据块
- 负责数据块的读写
Client
: 客户端- 上传文件到HDFS的时候, Client负责将文件切分成Block, 而后进行上传
- 申请NameNode交互, 获取文件的地位信息
- 读取或写入文件, 与DataNode交互
- Client能够应用一些命令来治理HDFS或拜访HDFS
HDFS读写解析
HDFS读数据流程
- 客户端通过Distributed FileSystem向NameNode申请下载文件, NameNode通过查问元数据找到文件块所在的DataNode地址
- 筛选一台DataNode(就近准则, 而后随机)服务器, 申请读取数据
- DataNode开始传输数据给客户端 (从磁盘外面读取数据输出流, 以Packet为单位来做校验)
- 客户端以Packet为单位接管, 先在本地缓存, 而后写入指标文件
HDFS写数据流程
- 客户端通过Distributed FileSystem模块向NameNode申请上传文件, NameNode查看指标文件是否已存在, 父目录是否存在
- NameNode返回是否能够上传
- 客户端申请第一个Block上传到哪几个DataNode服务器上
- NameNode返回3个DataNode节点, 别离是dn1, dn2, dn3
- 客户端通过FSDataOutputStream模块申请dn1上传数据, dn1收到申请会持续调用dn2, 而后dn2调用dn3, 将这个通信管道建设实现
- dn1, dn2, dn3逐级应答客户端