当前位置:首页>HDFS教程>HDFS教程

HDFS教程

作者:微学网发布时间:2019-08-11 15:31:27

HDFS产生的背景

当数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是这不方便管理和维护。

因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统,这样分布式文件系统就应运而生。

什么是HDFS

HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网络中跨多台计算机存储的文件系统。

HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

HDFS 的设计适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。

通俗点讲,就是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

HDFS的组成

HDFS集群包括,NameNode、DataNode、Secondary NameNode、Block数据块。

HDFS架构

NameNode

  • 存储文件的metadata,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小

  • 一个Block在NameNode中对应一条记录(一般一个block占用150字节),如果是大量的小文件,会消耗大量内存。同时map task的数量是由splits来决定的,所以用MapReduce处理大量的小文件时,就会产生过多的map task,线程管理开销将会增加作业时间。处理大量小文件的速度远远小于处理同等大小的大文件的速度。因此Hadoop建议存储大文件

  • 数据会定时保存到本地磁盘,但不保存block的位置信息,而是由DataNode注册时上报和运行时维护(NameNode中与DataNode相关的信息并不保存到NameNode的文件系统中,而是NameNode每次重启后,动态重建)

  • NameNode失效则整个HDFS都失效了,所以要保证NameNode的可用性

DataNode

  • 保存具体的block数据

  • 负责数据的读写操作和复制操作

  • DataNode启动时会向NameNode报告当前存储的数据块信息,后续也会定时报告修改信息

  • DataNode之间会进行通信,复制数据块,保证数据的冗余性

Secondary NameNode

  • 用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。(元数据的快照)

Block数据块

  • 基本存储单位,一般大小为64M

  • 配置大的块主要是因为:
    1)减少搜寻时间,一般硬盘传输速率比寻道时间要快,大的块可以减少寻道时间;
    2)减少管理块的数据开销,每个块都需要在NameNode上有对应的记录;
    3)对数据块进行读写,减少建立网络的连接成本

  • 一个大文件会被拆分成一个个的块,然后存储于不同的机器。如果一个文件少于Block大小,那么实际占用的空间为其文件的大小

  • 基本的读写单位,类似于磁盘的页,每次都是读写一个块

  • 每个块都会被复制到多台机器,默认复制3份

HDFS的优点

  • 高容错性:数据自动保存多个副本,当一个副本丢失后,可以自动回复。

  • 适合大数据处理:文件规模大(个数多)、数据规模大(数据大小)

  • 流式数据访问:一次写入,多次读取,不能修改,只能追加。保证数据一致性。

  • 构建成本低:可以构建在廉价的机器上。

HDFS的缺点

  • 不适合做低延迟数据访问,比如毫秒级的数据访问是做不到的。

  • 无法高效的对大量小文件进行存储。

  • 无法并发写入和随机修改。