Hadoop之--HDFS原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/PoorGuy_tn/article/details/82054878

HDFS介绍:

  • HDFS是Hadoop的存储结构,HDFS为了做到可靠性(reliability) 创建了多份数据块(data block)的复制,并将他们放置在服务器群的计算节点中(compute notes),MapReduce就可以在他们所在的这些节点上处理这些数据了.
  • 这里写图片描述

HDFS结构:

  • 下面是HDFS的结构图

这里写图片描述

注释:
元数据:元数据是指除文件内容之外的其他数据.(Eg:文件名,文件大小,文件存储位置等)
block:block是指将一个文件切成许多个block,然后将这些block分别存在不同的节点上,任何一个block至少都会有3个以上的存储.

HDFS运行机制:

  • 一个名字节点和多个数据节点
  • 数据复制(冗余机制)
    存放位置:(机架感知策略)
  • 故障检测
    –数据节点
    心跳包(检测是否坏掉)
    块检测(安全模式下的检测)
    数据完整性检测(校验和比较)
    –名字节点(日志文件,镜像文件)

  • 空间回收机制

注意:

  • 心跳包:各个节点每过一段时间就要发送个NameNode一次请求,在10分钟内没有发送的认为是坏的机器.
  • 快检测:主要对块的数量进行检测,由于有坏的机器的出现,使得有些block的数量达不到标准,NameNode就会将这些不够备份数量的block放在空余的节点上.
  • 每一次新开机启动,都会进行这些检测,称之为安全模式,请不要轻易选择强制停止安全模式,这样有可能造成数据的丢失.

HDFS有点:

–高容错性

  • 数据自动保存多个副本
  • 副本丢失后,自动回复

–适合批处理

  • 移动计算而非数据
  • 数据位置暴露给计算框架

–适合大数据处理

  • GB,TB,甚至PB级数据
  • 百万规模以上的文件数量
  • 10K+节点

–可构建在廉价的机器上:

  • 通过多副本提高稳定性
  • 提供了容错和恢复机制

注意:因为HDFS容错性做的好,所以可以在廉价的机器上,不怕机器故障丢失数据.

HDFS缺点

–低延迟数据访问

扫描二维码关注公众号,回复: 2904845 查看本文章
  • 比如毫秒级
  • 低延迟与高吞吐率
    Eg:订单,由于我们输入单号就要得到商品,不适合用,更适合使用关系型数据库.
    –小文件存储:
  • 占用NameNode大量内存
  • 寻道时间超过读取时间
    因为我们知道元数据是存储在NameNode里的,每一次开机都会将元数据加载到内存,数据量大了元数据会变多.
    –并发写入,文件随机修改:

  • 一个文件只能有一个写者

  • 仅支持append
    Eg:现在我们所听说的各大网盘基本上都是使用Hadoop的HDFS存储的,所以没有修改文件内容的功能(修改文件名不属于修改文件内数据)

HDFS架构图:

这里写图片描述
注意:在网上看到这张图片,但是这张图片有些错误,五条虚线应该上面和HDFS Client相连而不是与NameNode相连.

  1. 首先我们可以看上面的图片,当客户端发出写请求,客户端会首先找到NameNode(因为NameNode中存储了元数据,并且存放了block块所在的位置),如果NameNode文件丢失,所有block将会变成垃圾文件,没有办法重新组合和被找到.
  2. NameNode会将文件的block信息储存起来,并且将各个block存到不同的节点中,然后节点进行复制,以达到要求的备份数量.
  3. 我们在右面可以看到一个名字为Secondary NameNode的东西,一会会细致的说一下,现在可以说他是作为热备份用的.

HDFS数据存储单元(block):

–文件被切分成固定大小的数据块

  • 默认数据块大小为64MB,可自行配置大小
  • 若文件大小不够64MB,则单独存在一个block中

    –一个文件的存储方式

  • 按大小被切分成若干block,存储在不同的节点上

  • 默认情况下每个block都有三个副本

–Block大小和副本数量通过Client短上传文件时设置,文件上传成功后副本数可以变更,Block Size不可变更.

注意:Block占有的是逻辑结构,磁盘空间是多少就是多少

HDFS设计思想:

这里写图片描述
注意:
每一个block都要存在三个不同的节点上.并且第一个副本要和源文件在不同的机架上,第二个副本和第一个副本在同一机架上不同的节点上(目的:为了传输速度快)

各节点的功能:

  • NameNode的功能:
    这里写图片描述
  • SecondaryNameNode的功能:
    这里写图片描述
    SNN合并图解:
    这里写图片描述
  • DataNode的功能:
    这里写图片描述

  • Block的副本放置策略:

–第一个副本:
放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点.

–第二个副本:
放置在与第一个副本不同的机架节点上.

–第三个副本:
与第二个副本相同的机架上的节点

–更多副本:
随机放置

HDFS读写流程图:

这里写图片描述

注释:
上图中open是一个函数
这里写图片描述

HDFS文件权限:

–与Linux文件权限类似:

  • r:read;w:write;x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容.

–如果Linux系统用户PoorGuy使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是PoorGuy

–HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事.HDFS相信,你告诉我你是谁,我就认为你是谁.
注:正是因为这个原因所以安全性不高,但是企业不会将重要数据存在Hadoop上,Eg用户名密码等.

安全模式

  • namenode启动的时候,首先将映像文件载入内存,并执行编辑日志中的各项操作.
  • 一旦在内存中成功建立文件系统数据的映射,则船舰一个新的fsimage文件.
  • 此刻namenode运行在安全模式下,及namenode的文件系统对客户端来说是只读的.(显示目录,显示文件内容,写,删除,重命名都会失败)
  • 在此阶段namenode收集datanode的报告,当书记块达到最小副本数以上的时候,会被认为是安全的,在一定比例下(可设置)的数据块被确定为”安全”后,再过若干时间,安全模式结束.
  • 当检测到副本数不足的数据块时,该快会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中的.

附加:

HDFS上传原理简写:

  1. Client端发送一个添加文件到HDFS的请求给NameNode;
  2. NameNode告诉Client端如何来分发数据块以及分发的位置.
  3. Client端把数据分为快(block),然后把这些块分发到DataNode中;
  4. DataNode在NameNode的指导下复制这些快,保持冗余.

以上是通过书本和视频总结的一些,供大家学习交流.

小白创作,大佬勿喷,谢谢合作

猜你喜欢

转载自blog.csdn.net/PoorGuy_tn/article/details/82054878