理解HDFS

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

流式数据访问模式 : 指的是数据不是一次性获取过来,而是一点一点获取,处理流式数据也会一点一点处理。(全部接收在处理的话,延迟会很大)

(1)HDFS优点

高容错性:数据自动保存多个副本。它通过增加副本的形式,提高容错性,某一个副本丢失以后,它可以自动恢复

适合批处理

适合处理大数据

易于构建在廉价的机器上

流式数据访问

(2)HDFS不适合的领域

  1.低延时数据访问

    比如毫秒级的来存储数据,这是不行的,它做不到。它适合高吞吐率的场景,就是在某一时间内写入大量的数据。但是它在低延时的情况下是不行的,比如毫秒级以内读取数据,这样它是很难做到的。

    HDFS是单Master的,所有的对文件的请求都要经过它,当请求多时,肯定会有延时。

  2.小文件存储

    存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息(元信息)。这样是不可取的,因为NameNode的内存总是有限的。小文件存储的寻道时间会超过读取时间,它违反了 HDFS的设计目标。

  3、并发写入、文件随机修改

    一个文件只能有一个写,不允许多个线程同时写。仅支持数据 append(追加),不支持文件的随机修改。

(3)HDFS针对缺点的改善措施

HDFS不适合低延时数据访问,可以使用缓存或者多Master节点设计降低Client的数据访问压力

存储小文件问题

1、利用SequenceFile、MapFile、Har等方式归档小文件,这个方法的原理就是把小文件归档起来管理,HBase就是基于此的。对于这种方法,如果想找回原来的小文件内容,那就必须得知道与归档文件的映射关系。

2、横向扩展,一个Hadoop集群能管理的小文件有限,那就把几个Hadoop集群拖在一个虚拟服务器后面,形成一个大的Hadoop集群。google也是这么干过的。

3、多Master设计,正在研发中的GFS II也要改为分布式多Master设计,还支持Master的Failover,而且Block大小改为1M,有意要调优处理小文件。(Alibaba DFS的设计,也是多Master设计,它把Metadata的映射存储和管理分开了,由多个Metadata存储节点和一个查询Master节点组成。

(4)HDFS概念

  1、数据块(block)

   每个磁盘都有默认的数据块大小,是磁盘进行读写的最小单位,构建与单个磁盘之上的文件系统通过磁盘数据块进行管理文件系统的块。类似于磁盘文件系统,HDFS中也有数据块的概念,HDFS文件系统也被划分为多个块,块作为独立单元。

   HDFS数据块特点:HDFS中的块大小比文件系统的块大,一般默认64MB(Hadoop2中默认为128MB),而文件系统为几千字节。HDFS小于一个块大小的文件不会占据整个块的空间

  2、namenode

   HDFS集群上有两类节点:管理节点namenode和工作节点datanode。

   namenode管理文件系统的命名空间,维护整个文件系统的所有的目录和文件,以命名空间镜像文件(fsimage)和编辑日志文件(edits)的形式永久的存储在本地。namenode也记录着每个块所在的数据节点信息(不是永久存储,数据启动时由数据节点重建)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygfgp.html