HDFS(数据存储)

  • Post author:
  • Post category:其他




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

  • 下载插件

    在这里插入图片描述

    在这里插入图片描述
  • 测试连接

    在这里插入图片描述

    在这里插入图片描述
  • 报错解决

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
  • 测试连接

    在这里插入图片描述
  • 报错解决

    在这里插入图片描述
  • 成功

    在这里插入图片描述



版权声明:本文为weixin_51699336原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。