HDFS追本溯源:体系架构详解

  • 时间:
  • 浏览:0

NN管理了HDFS五个最重要的关系:

     通过命令行工具,可不能否进行一些典型的文件操作,比如读文件,创建文件路径,移动文件,重命名,列出文件列表等。一起,命令行工具也提供了本地文件和HDFS交互的能力,可不能否通过以下命令,将本地文件上传到HDFS:

        图中五个文件,data1五个数据块,表示为b1、b2和b3。data2文件由b4和b5组成。你这个个多文件的内容封三到几只DN上。示意中,每个数据块就五个副本。

 另外,NN还能通过DN获取HDFS整体运行具体情况的一些信息,比如系统的可用空间,机会使用的空间,各个DN的当前具体情况等。

    在五个HDFS中,五个NN,五个SNN和众多的DN,在大型的集群中机会会有数以千计的DN。而Client,一般意义上比数据节点的个数时需多。它们之间的关系如下图:

正是机会上端的一些设计形态,很久 HDFS不要再说适合以下应用:

      fsimage中保存着某一特定时刻HDFS的目录树、元信息和文件数据块的索引等信息,后续的对那些信息的改动,则保位于编辑日志中,它们一起提供了五个全部的NN的第一关系。

      只能为那些数据块只能大呢?人太好和文件系统的大数据块的原理是一样的。在普通的文件系统中使用较大的数据块,可不能否减少管理数据块所时需的开销,如在Linux中可不能否减少保位于i-node中硬盘地址表中的信息链的长度;一起在对文件进行读写时,可不能否减少寻址开销,即硬盘定位数据块的次数。在HDFS中采用大数据库唉,可不能否减少NN上管理文件和数据块关系的开销,很久 在文件读写时,减少机会建立网络连接的开销。

     Client是用户和HDFS进行交互的手段,HDFS提供了各种各样的Client,包括CLI,Java API,Thrift接口,C语言库,用户空间文件系统(FUSE)等。人太好Hadoop就五个POSIX的文件系统,不支持ls,cp从前的命令,很久 Hadoop还是提供了一套和Linux文件命令累似 的命令行工具,比如以下命令可不能否创建五个目录:

尊重原创,未经允许不得转载:www.anzhan.me

      HDFS采用了主从式(Master/Slave)的体系形态,其中NameNode(NN),DataNode(DN)和Client是HDFS中的五个重要角色。HDFS也在社区的努力下不断演进,包括支持文件追加,Federation,HA的引入等。关于演进历史可不能否点击此处。关于HA和Federation的内容,请参考博文《HDFS HA: 高可靠性分布式存储系统防止方案的历史演进》。本文仅仅涉及Secondary NameNode(SNN)。

  下图是NN上文件和数据块的对应关系和DN与数据块的对应关系的示意。

     命令行工具提供了访问HDFS的基本能力,而Java API则提供了进一步的功能。目前,什么都有访问HDFS的接口有无 基于Java API的,包括上端介绍的命令行工具。下面是五个非常简单的Java API的例子。

1. Hadoop技术内幕-深入解析HADOOP COMMON和HDFS挂接与实现原理

      DN是HDFS中硬盘IO最忙碌的每项:将HDFS的数据块写到Linux本地文件系统中,机会从那些数据块中读取数据。DN作为从节点,会不断的向NN发送心跳。初始化时,每个DN将当前节点的数据块上报给NN。NN也会接收来自NN的指令,比如创建、移动机会删除本地的数据块,很久 将本地的更新上报给NN。

Client则是使用HDFS的主题,包括写文件,读文件等常见操作。

      上文多次提到数据块,只能那些是数据块?为了便于管理,设备往往将存储空间组织成具有一定形态的存储单位。比如硬盘,文件以块的形式存储在硬盘中,块的大小代表了系统读和写操作的最小单位;在Linux的Ext3文件系统中,块的大小默认为4K。文件系统通过五个块大小的整数倍来使用硬盘。硬盘上的数据块管理属于文件系统实现的外部细节;对于调用系统接口来读写文件的用户来说是透明的。

     从上端可不能否看出,SNN会配合NN,为NN的第一关系提供了五个简单的CheckPoint机制,并防止经常出现edits过大,意味着NN启动时间过长的现象报告 。

      HDFS有以下形态:

     HDFS作为五个分布式文件系统,具有高容错的特点。它可不能否部署在廉价的通用硬件上,提供高吞吐率(Throughput)的数据访问,不得劲适合那些时需防止海量数据集的tcp连接运行运行。它只能遵循POSIX的要求,不支持ls,cp从前标准的UNIX命令,什么都有支持fopen和fread从前的文件读写辦法 。它采用全新的设计,提供了一套特有的,基于Hadoop抽象文件系统的API,支持以流的辦法 访问文件系统的数据。

     Hadoop框架中最核心设计什么都有:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算。HDFS在Hadoop中扮演了非常基础的作用,以文件系统的形式为上层应用提供海量数据的存储服务。

很久 在大数据领域,分析的是机会位于的数据,那些数据一旦产生就不要再修改,很久 ,HDFS的那些形态和设计局限也就很容易理解了。HDFS为大数据领域的数据分析,提供了非常重要很久 十分基础的文件存储功能。

      一起,通过NN,Client还可不能否了解到数据块所在的DN的信息。时需注意的是,NN中关于DN的信息是不要再保存到NN的本地文件系统的,也什么都有上端提到的fsimage和edits中。NN每次启动时,有无 通过每个DN的上报来动态的建立那些信息。那些信息也就构成了NN第二关系。

     HDFS是针对大文件设计的分布式系统,使用数据块有一些的好处:

    Secondary NameNode是用于定期合并fsimage和edits的。与NN一样,每个集群都五个SNN,在大规模部署的条件下,一般SNN也独自占用一台服务器。SNN按照集群配置的时间建个,不停的获取HDFS某五个时间点的fsimage和edits,合并它们得到五个新的fsimage。该fsimage上传到NN有无 替换NN的老的fsimage。

而DN则保存了数据块。很久 执行NN的命令,比如一键复制,拷贝,删除等操作。

      HDFS的块也是累似 的原理。只不过它的块拥有更大的数据单元,默认的数据块大小是64M。HDFS将文件进行分块,块作为单独的存储单元,在Linux上以普通文件的形式保位于DN的文件系统中。数据块是HDFS文件存储的基本单位。在这里要注意,HDFS不要再说直接管理硬盘,它是通过DN上的文件系统存储数据块,通过管理数据块,来完成文件管理服务的。

     注意,SNN并有无 NN的strandby。NN是HDFS集群中的SPOF(Single Point of Failure)。通过SNN,可不能否减少NN的启动时间很久 降低NN元数据丢失的风险。很久 ,在HA经常出现前,NN的失效是要通过人工干预的。

参考资料:

      Hadoop是五个开发和运行防止大规模数据的软件平台,是Apache的五个用Java语言实现开源软件框架,实现在少许计算机组成的集群中对海量数据进行分布式计算。用户可不能否在不了解分布式底层细节的具体情况下,开发分布式tcp连接运行。充分利用集群的威力高速运算和存储。

      NN是HDFS主从形态中主节点上运行的主要tcp连接运行运行,它负责管理从节点DN。NN维护着整个文件系统的文件目录树,文件目录的元信息和文件的数据块索引。那些信息以有某种信息保位于本文文件系统中,有某种是文件系统镜像(文件名字fsimage),另有某种是fsimage的编辑日志(文件名字edits)。