Hadoop(四)HDFS
- 什么是HDFS
- HDFS文件系统
- 设计的目的
- 上传机制
- 读取机制
什么是HDFS
Hadoop Distributed File System hadoop底层的分布式文件存储系统,可以存储海量的数据。其特点为:
- 作为一个文件系统,用于存储文件,通过统一的命名空间目录树来定位文件。
- 分布式存储系统,通过许多服务器联合起来实现功能。
- master/slave架构,主从架构。其中namenode用于存储元数据,处理用户请求。datanode用户存储数据。
- 分块存储,将一个大文件化成一个个小文件进行存储。一个文件块默认为128M大小。(hadoop 2.x)
- 对外提供统一的文件访问的地址。
- 副本信息。每个block模块都有三个副本。block0001_node1,block0001_node2,block0001_node3
- 一次写入,多次读取。适用于多次读取的情况,不适用于频繁写入的情况。改变文件会涉及到元数据的改变。
HDFS文件系统
分布式文件系统,hadoop有多种文件管理系统实现。HDFS是hadoop抽象文件系统的一种实现。
我们可以通过HDFS获取到很多的实例。
- local:本地文件系统
- hdfs:分布式文件系统
- webHdfs:HTTP协议的文件系统
- ftp:ftp文件系统
设计的目的
- 提供分布式高可用的文件系统
- 数据流的访问,所有的访问都是访问大量的数据,使用IO流操作追求的是稳定不是效率
- 大数据集合。假设所有存储到hdfs的数据都是海量的数据,不擅长处理小文件。
- 简单的相关模型 假设文件是一次写入多次读取,不会有频繁的更新。
- 在节点上计算,而不是将数据转移到一起进行计算(Mapreduce的思想)
上传机制
1、文件系统内创建文件。
2、创建写入数据的数据队列。
3、NameNode 维护一个确认队列(ack队列中是要写入的node的序列)
4、寻找适合存储的datanode作为副本,将其构成管线。
5、按照管线中的顺序将数据写入到datanode
6、写入后将返回确认
读取机制
数据读取
- 通过namenode获取到数据所在的位置、这个操作很快,避免成为瓶颈
- 返回的是一个包装的IO类。通过包装类调用read,直接连接到DataNode进行数据的读取
- 当一个节点读取完毕后,封装类内部改用下个节点进行读取
元数据存储
namenode的元数据是存在硬盘上的。fsimage是存储在硬盘与内存上的,保存的是一份最完整的元数据集。
edits保存的是最近一段时间操作的元数据信息。等到一定的条件满足(文件大小与文件的时间)时将edits数据与fsimage文件进行合并。这两个文件的合并是secondaryNode进行操作的。存放的路径配置在hdfs-site.xml上。配置信息为dfs.namenode.edits.dir