Hadoop(四)HDFS

什么是HDFS

Hadoop Distributed File System hadoop底层的分布式文件存储系统,可以存储海量的数据。其特点为:

  1. 作为一个文件系统,用于存储文件,通过统一的命名空间目录树来定位文件。
  2. 分布式存储系统,通过许多服务器联合起来实现功能。
  3. master/slave架构,主从架构。其中namenode用于存储元数据,处理用户请求。datanode用户存储数据。
  4. 分块存储,将一个大文件化成一个个小文件进行存储。一个文件块默认为128M大小。(hadoop 2.x)
  5. 对外提供统一的文件访问的地址。
  6. 副本信息。每个block模块都有三个副本。block0001_node1,block0001_node2,block0001_node3
  7. 一次写入,多次读取。适用于多次读取的情况,不适用于频繁写入的情况。改变文件会涉及到元数据的改变。

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