Hadoop学习笔记(9)从三个方面去初步了解HDFS

HDFS简介

1、什么是HDFS?

HDFS是指Hadoop Distributed FileSystem简称,也成为hadoop分布式文件系统

2、关键词:分布式

比如现在A B C D四个节点机器,每个几点硬盘容量为2T,总共容量8T。当现在有一份3T的数据文件需要存储,可以发现单独一个节点都无法存储,所以分布式系统会把该数据分别存到多个节点中。
在这里插入图片描述
图中的block1、block2、block3都分别有3个,1个正式数据块,2个为副本数据块(系统默认是3个),map随机选择一个,再传reduce。

3、基于流式数据访问模式,通常是处理超大文件(PB级以上)的需求而开发的一个分布式系统

4、HDFS的优缺点

优点:

  • 处理超大文件(能够用来存储管理PB级别的数据,1PB=1024TB)
  • 处理非结构化数据
  • 流式数据的访问(一次写入,多次读写)
  • 运行在廉价的商用机器集群上(故障时能够继续运行且不让用户察觉到明显的中断)

局限性(缺点):

  • 不适合处理低延迟数据访问
    • HDFS是为了处理大型数据集分析任务的,主要是为了达到高的数据吞吐量而设计的
    • 对于低延迟的访问需求,HBase是更好的选择
  • 无法高效存储大量的小文件
    • 小文件会给Hadoop的扩展性和性能带来严重问题
    • 利用SequenceFile、MapFile等方式归档小文件
  • 不支持多用户写入及任意修改文件
    • 只有一个写入者,只能执行追加操作
    • 不支持多个用户对同一个文件的写操作,以及在文件任意位置进行修改

5、HDFS的特性

  • 高容错、可扩展性以及可配置性强
  • 跨平台
  • shell命令接口
  • 机架感知功能
  • 负载均衡
  • Web页面
    • http://master:50070 hdfs的web页面
    • http://master:18088 yarn的web页面

6、HDFS的目标

  • 检测和快速恢复硬件故障
    • 故障的检测和快速自动恢复是HDFS的一个核心目标
  • 流式数据访问
    • 设计成合适进行批量处理(批处理)
    • 重视数据吞吐量,而不是数据访问的反应速度
  • 大规模数据集
    • 支持大文件存储
    • 一个单一的HDFS实例能支撑数以千万计的文件
  • 简化一致化模型
    • 对文件实行一次性写入,多次读取的访问模式
  • 移动计算代价比移动数据代价低
    • 一个应用请求的计算,离开操作的数据越近越高效,这是数据达到海量级别的时候更是如此
  • 可移植性
    • HDFS在设计时就考虑到平台的可移植性,这种特性方便了HDFS作为大规模数据应用平台的推广
  • 通信协议
    • 所有的通信协议都是在TCP/IP协议之上

HDFS的核心设计

  • 数据块
    • 数据块是HDFS上最基本的存储单位
    • HDFS块默认大小为128M
      • 小于一个块大小的文件不会占据整个块的空间
      • hadoop fsck /sougou.500w.utf8 -files -localtions -blocks
    • 对块进行抽象会带来的好处
      • 一个文件的大小可以大于网络中任意一个磁盘的容量
      • 使用块抽象而不是文件可以简化存储子系统
      • 块非常适合用于数据备份进而提供数据容错能力和可用性
  • 数据块复制
    • HDFS为了做到可靠性 (reliability)创建了多份数据块(计算节点中(compute data blocks)的复制(replicas),并将它们放置在服务器群的nodes),MapReduce就可以在它们所在的节点上处理这些数据了。
    • HDFS将每个文件存储成块(block)序列
    • 每个文件的block大小和复制(Replication)因子(复制因子即备份数)都是可在hdfs-site.xml配置的。
  • 数据副本的存放策略
    • 数据分块存储和副本的存放,是保证可靠性和高性能的关键
    • 将每个文件的数据进行分块存储
      • 每一个数据块又保存有多个副本
      • 这些数据块副本分布在不同的机器节点上
    • 在多数情况下,HDFS默认的副本系数是3
    • Hadoop默认对3个副本的存放策略
      • 第一块:在本机器的HDFS目录下存储一个block
      • 第二块:不同Rack(机架)的某个DataNode上存储一个Block
      • 第三块:在该机器的同一个Rack下的某台机器上存储最后一个Block
      • 能更多副本:随机节点
  • 设置集群Block的备份数
    • 方法一:配置文件hdfs-site.xml
        <property>
                    <name>dfs.replication</name>
                    <value>3</value>
        </property>
- 方法二:通过命令修改备份数
  - hadoop fs -setrep -R 3 hdfs://master:9000/

注意:方法二可以改变整个HDFS里面的备份数,不需要重启HDFS系统,而方法一需要重启HDFS系统才能生效。

  • 安全模式(SafeMode)
    • 安全模式是Hadoop集群的一种保护模式
      • NameNode在启动时会自动进入安全模式,也可以手动进入。
      • 当系统处于安全模式时,会检查数据块的完整性。
    • 用命令来操作安全模式
      • hadoop dfsadmin -safemode leave //强制NameNode退出安全模式
      • hadoop dfsadmin -safemode enter //进入安全模式
      • hadoop dfsadmin -safemode get //查看安全模式状态
      • hadoop dfsadmin -safemode wait //等待,一直到安全模式结束
  • 负载均衡
    • 机器与机器之间磁盘利用率不平衡是HDFS集群非常容易出现的情况,尤其是在DataNode节点出现故障或者在现有集群上增添新的DataNode的时候
    • 分析数据块分布和重新均衡DataNode上的数据分布的工具
      • $HADOOP_HOME/bin/start-balancer.sh -t 10%
    • 认为手动的去启动负载均衡程序
      • start-balancer.sh -t 10% // 10%代表负载均衡的误差
    • 负载均衡程序作为一个与独立的进程NameNode进程分开执行。
    • 负载均衡的过程在这里插入图片描述
  • 心跳机制
  • 机架感知
    • 大型Hadoop集群是以机架的形式来组织的
      • 同一个机架上不同节点间的网络状态比不同机架之间的更为理想
    • 默认情况下,Hadoop的机架感知是没有被启用的
      • 启用机架感知功能,在NameNode所在机器的core-site.xml中配置一个选项:
    <property>
                   <name>topology.script.file.name</name>
                   <value>/path/to/script</value>           //value的值是一个脚本
    </property>

HDFS的体系结构

  • Master/Slave架构
    在这里插入图片描述

    • 文件切分成块(默认大小128M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时制定(默认3)
    • NameNode是主节点,存储文件的元数据如文件名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个节点的块列表以及块所在的DataNode等
    • DataNode在本地文件系统存储文件块数据,以及块数据的校验
  • 主要组件的功能
    在这里插入图片描述
    在这里插入图片描述

    • NameNode
      • NameNode是一个中心服务器,单一节点,负责管理文件系统的命名空间(namespace)以及客户端对文件的访问
      • 文件操作:NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,数据流不经过NameNode,只会询问它跟哪个DataNode联系
      • 副本存放在那些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带宽消耗和读取时延
      • NameNode全权管理数据块的复制,它周期性地从集群中的每个DataNode接收心跳信号和块状态报告(BlockReport)。接收到心跳信号意味着该DataNode节点工作正常。块状态报告包含了一个该DataNode上所有数据块的列表。
  • DataNode

    • 一个数据块在DataNode上以文件存储在磁盘上,包括两个文件,一个是数据本身, 一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
    • DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
    • 心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令,如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟NameNode没有收到某个DataNode的心跳信息,则NameNode认为该DataNode节点已死亡不可用。
  • SecondaryNameNode

    • 辅助的NameNode
    • 周期性将EditsLog文件合并
    • 工作原理,如图所示
      在这里插入图片描述
  • 工作流程

    • secondarynamenode通知namenode切换edits文件
    • secondarynamenode从namenode获得fsimage和edits(通过http)
    • secondarynamenode将fsimage载入内存,然后开始合并edits
    • secondarynamenode将新的fsimage发回给namenode
    • namenode用新的fsimage替换旧的fsimage
  • 什么时候checkpoint

    • fs.checkpoint.period指定两次checkpoint的最大时间间隔,默认3600秒。
    • fs.checkpoint.site规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M。
  • 数据损坏处理

    • 当DN读取block的时候,它会计算checksum
    • 如果计算后的checksum,与block创建时值不一样,说明该block已经损坏
    • client读取其他DN上的block;NN标记该块已经损坏,然后复制block达到预期设置的文件备份数
    • DN在其文件创建后三周验证其checksum
  • HDFS文件权限

    • 与Linux文件权限类似
    • r:read ;w:write;x:execude,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
    • 如果Linux系统用户zhangsan使用hadoop命令创建了一个文件,那么这个文件在HDFS中owner是zhangsan
    • HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁
    • Root用户只能查看,不能写入
    • hadoop dfs -chmod 777 /
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值