Hadoop的HDFS文件存储实现机制

HDFS的实现机制

hadoop HDFS 

      当数据集的大小超过一台独立物理计算机的存储能力的时候,就有必要对其进行分区.并存储到若干台单独的计算机上.管理网络中跨多台计算机存储的文件系统称为分布式文件系统.该系统架构于网络之上,,基于网络的复杂性,该系统势必比普通磁盘文件系统更为复杂.例如能够容忍单点故障而不丢失任何数据等.分布式文件系统有很多,比如sun的NFS,google的GFS,Hadoopd的HDFS等.下文主要讲HDFS的实现机制.
  HDFS的三个实体
  数据块
     每个磁盘都有默认的数据块大小,这是磁盘进行读写的基本单位.构建于单个磁盘之上的文件系统通过磁盘块来管理该文件系统中的块.该文件系统中的块一般为磁盘块的整数倍.磁盘块一般为512字节.HDFS也有块的概念,默认为64MB(一个map处理的数据大小).HDFS上的文件也被划分为块大小的多个分块,与其他文件系统不同的是,HDFS中小于一个块大小的文件不会占据整个块的空间.
     HDFS用块存储带来的第一个明显的好处一个文件的大小可以大于网络中任意一个磁盘的容量,数据块可以利用磁盘中任意一个磁盘进行存储.第二个简化了系统的设计,将控制单元设置为块,可简化存储管理,计算单个磁盘能存储多少块就相对容易.同时也消除了对元数据的顾虑,如权限信息,可以由其他系统单独管理.
DataNode节点
     DataNode是HDFS文件系统的工作节点,它们根据需要存储并检索数据块,受NameNode节点调度.并且定期向NameNode发送它们所存储的块的列表
NameNode节点
     NameNode管理HDFS文件系统的命名空间,它维护着文件系统树及整棵树的所有的文件及目录.这些文件以两个文件形式永久保存在本地磁盘上(命名空间镜像文件和编辑日志文件).NameNode记录着每个文件中各个块所在的数据节点信息但并不永久保存这些块的位置信息,因为这些信息在系统启动时由数据节点重建.
     没有NameNode,文件系统将无法使用.如提供NameNode服务的机器损坏,文件系统上的所有文件丢失,我们就不能根据DataNode的块来重建文件.因此,对NameNode的容错非常重要.第一种机制,备份那些组成文件系统元数据持久状态的文件.通过配置使NameNode在多个文件系统上保存元数据的持久状态或将数据写入本地磁盘的同时,写入一个远程挂载的网络文件系统.当然这些操作都是原子操作.第二种机制是运行一个辅助的NameNode,它会保存合并后的命名空间镜像的副本,并在Name/Node发生故障时启用.但是辅助NameNode保存.态总是滞后于主力节点,所以在主节点全部失效后难免丢失数据.在这种情况下,一般把存储在远程挂载的网络文件系统的数据复制到辅助NameNode并作为新的主NameNode运行


hadoop的HDFS文件存储

1:什么是HDFS?

HDFS适合做:

  1. 存储大文件。上G、T甚至P。
  2. 一次写入,多次读取。并且每次作业都要读取大部分的数据。
  3. 搭建在普通商业机群上就可以了。虽然会经常宕机,但HDFS有良好的容错机制。

HDFS不适合做:

  1. 实时数据获取。如果有这个需求可以用HBase。
  2. 很多小文件。因为namenode要存储HDFS的metadata(比如目录的树状结构,每个文件的文件名、ACL、长度、owner、文件内容存放的位置等等信息),所以HDFS上文件的数目受到namenode内存的限制。
  3. 并发环境下的写入和修改。

hadoop中存储文件以HDFS形式存储,HDFS拥有自己的设计原则:

1:文件大小以block块的形式存储
2:每个块至少分配到三台DataNode(看集群情况而定)
3:通过副本机制提高可靠度和吞吐量
4:hadoop1.0使用单一的master(NameNode)来协调存储元数据(metadata)
5:最有意思的是hadoop设计者没有设置客户端缓存机制,因为我们对处理数据有足够的信心。
下图为HDFS的系统结构
         Hadoop的HDFS文件存储实现机制_第1张图片
        NameNode:主要存储元数据:例如:文件名,拷贝几份,分别备份到哪里;
过程大概如下:
client要向集群中写入数据,首先询问Master(NameNode),Master告知客户端向哪些DataNode
写入数据,在往DataNode写入数据的同时,DataNode与NameNode保持心跳,如果DataNode在执行
任务失败,NameNode会通过心跳机制得知DataNode死掉,将重新分配新的任务到其他的DataNode。
2:Block之副本放置策略
第一副本:放置在上传文件DataNode,如果是集群外提交,由NameNode选择一台磁盘不太满,
  CPU不太忙的节点。
第二副本:放置在于第一副本不同的机架的节点上
第三副本:与第二个副本相同集群的节点
也许根据业务的需要我们需要更多地副本,其他副本随机分配
   
3:Block的存储形式
1:Block默认大小64M,如果上传文件小于64M,那么仍然占用一个命名空间(NameNode metadata),
   但是物理存储不会占用64M空间;(这也是hadoop为什么不太适合处理小数据的原因之一)
2:Block大小和副本数由Client端上传文件到HDFS时设置,其中副本数可以变更,Block是不可以再上    传后变更的

   

你可能感兴趣的:(Hadoop的HDFS文件存储实现机制)