hdfs总结

本文深入探讨了HDFS(分布式文件系统)的特性,包括其一次写入、多次读出的设计,以及在处理大数据时的优势和处理小文件及低延迟数据的局限。介绍了HDFS的组成部分,如文件块、副本策略、HDFS命令和数据流上传过程。此外,还详细阐述了副本节点的选择、文件读取机制、NameNode和Secondary NameNode的工作原理,以及DataNode的功能和安全模式。同时涵盖了集群管理和数据完整性方面的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HDFS介绍

  1. HDFS就是分布式文件管理系统,适合一次写入,多次读出,不支持修改

  2. 优缺点:(优)有副本高容错,处理大数据;(缺)不适合处理小文件,不合适低延迟处理数据

  3. HDFS组成

    NameNode(nn)管理元数据,处理客户端请求
    DataNode(dn)储存实际数据块,执行客户端操作
    SecondaryNameNode辅助nn,定期完成checkpoint操作,不可作为热备
  4. HDFS文件块(block)默认情况下为128M,传输时间1%为寻址时间,nn寻址时间为10ms,100M/s为一般速度。如果block太小会增加寻址时间,如果太大会增加传输时间,HDFS块的大小取决于传输磁盘效率。

  5. HDFS命令

    start-dfs.sh/stop-yarn.sh启动hdfs/关闭yarn
    hadoop fs (-moveFromLocal/-put/-appendToFile/-copyFromLocal/ )本地文件 集群目录路径本地剪切至hdfs/本地复制/追加一个文件到已存在文件末尾/与put相同
    hadoop fs (-copyToLocal/-get)集群文件 本地路径从hdfs下载到本地
    hadoop fs -getmerge 集群目录路径 本地文件名合并一个目录下的多个文件到一个文件
    hadoop fs -setrep n 文件路径设定n个文件副本
  6. Windows下HDFS客户端

    • 配置环境变量

    • 创建maven工程

    • 配置maven变量

      <dependencies>
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.12</version>
          </dependency>
          <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-slf4j-impl</artifactId>
              <version>2.12.0</version>
          </dependency>
          <dependency>
              <groupId>org.apache.hadoop</groupId>
              <artifactId>hadoop-client</artifactId>
              <version>3.1.3</version>
          </dependency>
      </dependencies>
      
    • 创建log4j2.xml(日志信息)

  7. 客户端操作API

    /*获取文件系统操作对象*/
    Configuration conf = new Configuration("name","value");
    //name为配置的名称,value为配置所需的值,可参考hdfs-site.xml
    FileSystem fis = FileSystem.get(new URI("hdfs://hadoop102:9820"),conf,"atguigu");
        
        
    fis.copyFromLocalFile();//上传文件
    fis.copyToLocalFile();//下载文件
    fis.rename();//修改文件名称
    RemoteIterator<LocatedFileStatus> ListFiles;
    ListFiles = fis.listFiles();//获取文件详情,返回值是整个目录下所有文件信息的集合
    ListFiles.getBlockLocations();//获取文件存储的块信息
    FileStatus[] status = fis.listStatus()
    for (FileStatus fileStatu : listStatus) {
        filestatu.isFile();//判断是不是文件
        filestatu.isDirectory();//判断是不是文件夹
    }
    
  8. HDFS数据流上传

    1. 首先客户端准备上传文件(DIstributed FileSystem),如果上传文件大于128M,则客户端会对文件进行切分;

    2. 客户端向nn发送一个RPC请求,nn对文件检测是否存在,并返回是否可以上传。;

    3. 客户端请求上传第一个block文件;

    4. nn返回一个存储数据的节点位置,dn1,dn2,dn3;

    5. 客户端会最近的dn1进行传输连接;

    6. dn1则会与nn分配的dn2,dn3建立连接;逐级应答后,dn1则返回应答成功信息到客户端;

    7. 传输数据(从磁盘读取数据放到一个本地内存缓存),以Packet为单位,每一个Packet的大小为64K,每传输一个packet会放入一个应答队列等待应答,Packet由512字节数据+4个crc检验的chunk组成;

    8. 客户端传输成功消息传达至nn;

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-39hTrAe3-1602923577812)(C:\Users\cf\AppData\Roaming\Typora\typora-user-images\image-20201014204247911.png)]

  9. 副本节点选择

    第一个副本在Client所处的节点上。如果客户端在集群外,随机选一个(节点最近原则)。

    第二个副本在另一个机架的随机一个节点

    第三个副本在第二个副本所在机架的随机节点

  10. HDFS文件读取

    1. 客户端向nn发送下载请求(DistributedFileSystem);
    2. nn返回查找到的dn地址并返回给客户端;
    3. 客户端挑选一个最近的dn进行数据的读取;
    4. dn开始传输数据给客户端(以Packet为单位chunk校验);
    5. 客户端收到Packet后再本地缓存,然后写入目标文件;
  11. nn和2nn工作机制

    nn中的元数据的存储方式为内存+磁盘(Fsimage+Edits),snn辅助操作为CheckPoint

    1. 第一次启动集群或者格式化集群后,再磁盘上创建Fsimage(镜像文件)和Edits(日志文件),后续如果需要重启nn,则直接磁盘中读取Fsimage和Edits到内存;

    2. 客户端发起操作请求,写入滚动日志edits_inprogress;

    3. nn在内存中对元数据进行增删改;

    4. snn会对nn进行CheckPoint操作(每一个小时 || 操作次数达到1百万);

    5. 将滚动前的编辑日志和镜像文件拷贝到snn(edits+fsimage);

    6. snn记载日志和镜像文件到内存并合并;

    7. 生成新的镜像文件fsimage.chkpoint;

    8. 拷贝fsimage.chkpoint到nn;

    9. nn将fsimage.chkpoint重新命名为fsimage;

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VmQKMQmF-1602923577813)(C:\Users\cf\AppData\Roaming\Typora\typora-user-images\image-20201015111037182.png)]

  12. Fsimage和Edits解析

    1. Fsimage是HDFS文件系统元数据的一个永久性的检查点,包括文件系统中的所有目录和文件inode的序列化信息;

    2. Edits存放HDFS文件系统的所有更新操作(增删改);

      hdfs oiv -p XML -i fsimage -o ~/
      hdfs oev -p XML -i edits -o ~/
      
  13. 集群安全模式

    1. nn启动时,将镜像文件载入内存,并执行编辑日志的过程时,集群会进入安全模式,这个期间中nn的文件系统对于客户端来说只读的;
    2. nn会在30秒后退出安全模式,如果集群中没有块则nn不会进入安全模式;
    hdfs dfsadmin -safemode get		(功能描述:查看安全模式状态)
    hdfs dfsadmin -safemode enter  	(功能描述:进入安全模式状态)
    hdfs dfsadmin -safemode leave	(功能描述:离开安全模式状态)
    hdfs dfsadmin -safemode wait	(功能描述:等待安全模式状态)
    
    
  14. dn的工作机制

    1. 一个数据块再dn上存储的包含两个文件;一个是数据块,一个是元数据包含数据块的长度,数据块的校验和,以及时间戳;

    2. dn再启动后会向集群注册,通过后,每一个小时会向nn上报所有块信息;

    3. dn每三秒会向nn发送一个心跳包,心跳包返回结果带有nn对于数据块的操作;

    4. 如果超过十分钟+三十秒nn没有收到dn发送过来的心跳包则遗弃该节点,该节点不再使用;

    5. dn上的数据检验为CheckSum来进行,以此来保存数据的完整性;

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CFaLRLfy-1602923577815)(C:\Users\cf\AppData\Roaming\Typora\typora-user-images\image-20201015113335137.png)]

  15. 白名单和黑名单

    1. 未加入到白名单配置文件中的节点,不被集群使用,直接抛弃

    2. 加入到黑名单的节点,集群会将节点进行强制退出,但是再节点退役前,集群会将节点上的数据复制到其他节点的数据块上。

      (配置hdfs-site.xml)
      <property>
      <name>dfs.hosts.exclude</name>
            <value>/opt/module/hadoop-3.1.3/etc/hadoop/blacklist>
      </property>
      
      hdfs dfsadmin -refreshNodes   (刷新节点信息)
      
    3. 如果数据不均衡,可以通过命令使得集群再平衡

      start-balancer.sh 
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值