Hadoop--HDFS

简介

 HDFS是一个分布式文件管理系统。当数据量越来越多时,可分配到其他的磁盘中,但是在不同操作系统下不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统;是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
 HDFS是做存储用的,它提供了几个特性:

  1. 可靠性:
    HDFS创建了多份数据块(data blocks)的复制(replicas),并将它们放置在服务器群的计算节点中(computer nodes),MapReduce就可以在它们所在的节点上处理这些数据,以此来实现可靠性
  2. 高扩展性
  3. 高吞吐率

HDFS优点:
-高容错性
 数据自动保存多个副本
 副本丢失后,自动恢复
-适合批处理
 移动计算而非数据
 数据位置暴露给计算框架
-适合大数据处理
 GB、TB、甚至PB级数据
 百万规模以上的文件数量
 10K+节点
-可构建在廉价机器上
 通过多副本提供可靠性
 提供了容错和恢复机制

HDFS缺点:
-低延迟数据访问
 比如毫秒级
 低延迟与高吞吐率
-小文件存取
 占用NameNode大量内存
 寻道时间超过读取时间
-并发写入、文件随机修改
 一个文件只能有一个写者
 仅支持append

HDFS运行机制

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

HDFS命令

Shell命令

 Ls,lsr
 Mkdir,rm,cp
 Chmod chown
 Cat,mv,put,get,tail
与Linux的操作相似!

HDFS结构

在这里插入图片描述

HDFS架构

在这里插入图片描述

HDFS数据存储单元(block)
  • 文件被切分成固定大小的数据块
     默认数据块大小为64MB,可配置
     若文件大小不到64MB,则单独存成一个block
  • 一个文件存储方式
     按大小被切分成若干个block,存储到不同节点上
     默认情况下每个block都有三个副本
  • Block大小和副本数通过Client端上传文件是设置,文件上传成功后副本数可以变更,Block Size不可变更
HDFS设计思想

在这里插入图片描述

NameNode(NN)
  • NameNode主要功能:接受客户端的读写服务
  • NameNode保存metadata信息包括
     -文件owership和permissions
     -文件包含哪些块
     -Block保存在哪个DataNode(由DataNode启动时上报)
  • NameNode的metadata信息在启动后会加载到内存
     -metadata存储到磁盘文件名为“fsimage”
     -Block的位置信息不会保存到fsimage
     -edits记录对metadata的操作日志
SecondaryNameNode(SNN)
  • 它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。
  • SSN执行合并时机
     -根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
     -根据配置文件设置edits log 大小 fs.checkpoint.size规定edits文件的最大值默认是64MB
    为了节省NameNode的资源而设的,让NameNode更专注于读写服务,而备份服务就由另设的一台机器来解决。
SNN合并流程

在这里插入图片描述

DataNode(DN)
  • 存储数据(Block)
  • 启动DN线程的时候会向NN汇报block信息
  • 通过向NN发送心跳保持与其联系(3秒一次),如果NN10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其他DN
Block的副本放置策略
  • 第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
  • 第二个副本:放置在与第一个副本不同的机架的节点上。
  • 第三个副本:与第二个副本相同机架的节点
  • 更多副本:随机节点

HDFS读流程

在这里插入图片描述
流程:HDFS客户端发送请求open方法,去调用Distributed FileSystem这个API,这个API又再发送一个请求到NameNode,这样来得到block location,因为数据其实都存储在DataNode上;拿到块的位置信息之后,就开始由FSDataInputStream并发查询各个DataNode,直到找到数据。

HDFS写流程

在这里插入图片描述

HDFS文件权限
  • 与Linux文件权限类似
     r:read;w:write;x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
  • 如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是zhangsan。
  • HDFS的权限的目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁。(即不做密码认证)
安全模式
  • namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
  • 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
  • 此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。
  • 在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的,在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束。
  • 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表的形式存储在datanode中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值