HDFS概述

1.HDFS是什么

  • Hadoop Distributed File System分步式文件系统
  • 源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版
  • HDFS是Hadoop体系中数据存储管理的基础
  • 通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序
  • 提供一次写入多次读取的机制,数据以的形式,同时分布在集群不同物理机器上
  • 高度容错性的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行

2.Hadoop 2重要的新功能

  • 高可用性HA
消除Hadoop 1中存在的单点故障**,其中NameNode故障将导致整个集群中断
HDFS的高可用性提供自动故障转移功能**,备用节点自动从失败的主NameNode接管工作
  • Federation
允许集群中出现多个NameNode,各个NN间相互独立且不需要互相协调,各自分工,管理自己的区域;
DataNode 被用作通用的数据块存储设备;每个DataNode要向集群中所有NameNode注册,并发送心跳报告

3.HDFS客户端

  • Web client(http://node1:50070)
  • Java API->Idea插件(big data tool)

4.HDFS安装

时间同步->安装JDK->上传解压->免密钥设置->修改配置文件->同步到其他节点->格式化NN->启动

HDFS组成

1.主从架构图解

在这里插入图片描述

2.NameNode

  • 作用是接收客户端读写,存元数据信息
  • 元数据信息包括文件谁所有,权限,用户对文件的操作信息(edit logs),文件被分成几块(Block ID),块存在哪些DataNode
  • NameNode如何将数据保存到磁盘?元数据主要保存在fsimage和edit logs
首先了解两个文件
	fsimage:NameNode启动时对整个文件系统的快照
	edit logs:NameNode启动后对整个文件系统的操作日志
接下来讲讲两个文件如何配合工作
	fsimage保存的是最开始时的快照,而edit logs记录的是启动后的每一步操作命令,所以fsimage+edit logs就是最终操作结果
	只有NameNodde重启时,edit logs才会合并到fsimage中,从而得到一个最新快照
	但是在产品集群中NameNode很少重启,这意味着随着NameNode运行时间的加长,edit logs文件越来越大
	因此我们需要一个管理机制来减小edit logs文件大小和得到一个新的fsimage文件,这与windows的恢复机制相似
此时引入SecondNameNode
  • NameNode启动后将元数据加载到内存,磁盘文件名为fsimage,块的位置信息不会保存到fsimage,而由DataNode启动时主动上报给NameNode,edit记录操作日志
  • 一个集群中有且只有一台NameNode处于active状态

3.SecondNameNode

  • SecondNameNode是NameNode的备份,但主要任务是合并NameNode的fsimage和edit logs,减少NameNode启动时间
  • SNN的合并时机可以通过配置文件设置的时间间隔(fs.checkpoint.period.period,默认1h)或配置文件设置edit大小(fs.checkpoint.size),edit超过该大小则需合并
  • 合并流程
    在这里插入图片描述

4.DataNode

  • DataNode用来真正存数据,数据按块存,当DN启动会向NN汇报块信息
  • DataNode之间还保存数据的副本,实现数据节点的互相拷贝
  • DN与NN间需要维护心跳,3s一次,当10min没收到心跳,则NN认为DN掉线,会复制该DN上的块到其他DN上
  • NN对DN还有重平衡机制,因为随着时间推移,DN上存储的数据总数不同,磁盘空间大小不同,可以调用命令整理磁盘,若不重平衡会导致系统由响应最慢的节点决定

HDFS组成详解

1.块Block(数据存储单元)

  • 文件被切分成固定大小的数据块
  • 查找数据块比较方便,因为在磁盘上找文件时由指针移动来寻找,所以移动块比字节要快
  • 数据块大小默认为128MB(可配置)
  • 若文件大小不到128MB可以单独存一个块,但过多小文件每次都单独存一个块,而块存于NN,NN存于内存,内存有限,从而集群中的存储量有限,所以存数据是需要将小文件合并成大文件,尽量填满一个数据快再存;文件大小大于128MB,则会切分
  • 将切分后的数据块存储到不同节点上,默认情况每个Block都有三个备份副本采用负载均衡,随机存放策略防止数据倾斜,即数据都存放在一个节点上,发生数据倾斜,可以使用重平衡策略
  • 当DN挂掉后自动生成该节点的副本,以保证备份数为3,当该节点恢复后不会删除多余副本,多余副本就会导致节点数据量不同,所以需要上面提到的重平衡
  • 块大小和副本数通过客户端上传文件时设定,文件上传成功后副本数可以变更,但块大小不行

2.块副本存放策略

  • 第一个副本放在上传文件的DN,若是集群外提交则随机挑选一台磁盘不太满的,CPU不太忙的节点
  • 第二个副本放在不同于第一个副本的机架节点
  • 第三个副本放在与第二个副本相同机架节点
  • 更多副本则随机节点
    在这里插入图片描述

HDFS权限安全

1.HDFS文件权限

  • 与Linux文件权限类似有读写执行(rwx)权限,但x对于文件忽略,对于文件夹表示是否允许访问其内容
  • 若Linux用户cj使用Hadoop命令创建文件,那么该文件在HDFS拥有者就是cj
  • HDFS文件的目的是阻止好人做错事,而不是阻止坏人做坏事,A上传的文件B也看得到,与Linux不同

2.安全模式

  • NN启动时,将fsimage加载到内存,并执行edit中的各项操作(NN启动时合并两个文件)
  • 内存中成功建立文件系统元数据映射后,则创建一个新fsimage和空edit
  • 此时NN运行在安全模式,即NN对于客户端来说是只读的,写删重命名等操作都会失败
  • 此阶段NN收集各个DN的报告
  • 当数据块副本数量超过最小副本数,会被认为是安全的,在一定比例(可配置)数据块被认为安全后,再经过若干时间,安全模式结束
  • 当数据块副本数量未达到最小副本数,会继续复制直到达到
  • 系统中数据块的位置不是由NN维护,而是以块列表形式存储在DN
    在这里插入图片描述

HDFS读写流程

1.HDFS写流程

  • 客户端传数据是先传到NN再由NN传到DN,还是直接传到DN?答案都不对,看图
    在这里插入图片描述

2.HDFS读流程

在这里插入图片描述

HDFS操作

1.利用Web访问

  • 访问地址:http://node1:50070
  • Overview
    在这里插入图片描述
  • Datanodes
    在这里插入图片描述
  • 相信你可以自己看懂!

2.IDEA插件Big Data Tools

  • 下载插件
    在这里插入图片描述
    在这里插入图片描述
  • 测试连接
    在这里插入图片描述
    在这里插入图片描述
  • 报错解决
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 测试连接
    在这里插入图片描述
  • 报错解决
    在这里插入图片描述
  • 成功
    在这里插入图片描述
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐