博客
关于我
大数据技术之分布式文件管理系统HDFS
阅读量:373 次
发布时间:2019-03-04

本文共 1767 字,大约阅读时间需要 5 分钟。

HDFS(Hadoop Distributed File System)是一种分布式文件管理系统,用于存储和处理大规模数据。它的架构包括NameNode和DataNode,分别负责文件块的位置管理和数据存储。以下是HDFS写入和读取数据的详细流程:

HDFS 写入数据流程

  • 客户端请求上传文件

    • 客户端通过DistributedFileSystem接口向NameNode请求上传文件。
    • NameNode检查目标文件是否已存在以及父目录是否存在,返回允许上传的状态。
  • 选择目标DataNode

    • NameNode根据文件位置、网络拓扑结构等因素,选择最适合存储文件块的DataNode。
    • HDFS使用“最接近”策略:优先选择本地机器上的DataNode,然后是同一网格的其他节点,最后是其他网格的节点。
  • 数据传输

    • 客户端通过FSDataOutputStream模块向选定的DataNode上传数据。
    • DataNode接收数据后,会将其传输到其他DataNode,形成通信链,确保数据块的完整传输。
  • 提交块元数据

    • 客户端完成数据上传后,将块的元数据(如块ID、大小、校验和等)提交到NameNode。
    • NameNode更新文件的目录树和块位置信息。
  • HDFS 读取数据流程

  • 客户端请求下载文件

    • 客户端向NameNode请求下载特定文件的块位置。
    • NameNode查找文件块所在的DataNode地址,并返回给客户端。
  • 选择最近的DataNode

    • 客户端可以选择最近的DataNode或随机的DataNode读取数据,以提高读取速度。
    • HDFS支持副本机制,优先读取最近的副本,减少网络延迟。
  • 数据读取

    • DataNode从磁盘读取数据,并通过FSDataInputStream模块向客户端传输。
    • 客户端以Packet为单位接收数据,写入目标文件中。
  • NameNode和SecondaryNameNode的工作机制

  • NameNode的角色

    • NameNode存储文件块的元数据,管理文件的目录树结构。
    • 处理客户端的读写请求,定期与DataNode通信,收集块信息。
  • SecondaryNameNode的作用

    • SecondaryNameNode负责定期检查NameNode的编辑日志和镜像文件,合并最新的元数据。
    • 在NameNode断电恢复时,SecondaryNameNode帮助快速恢复元数据,保证集群的连续性。
  • 数据完整性和冗余机制

  • 数据校验

    • DataNode在读取或写入数据时,计算校验和(如CRC、MD5、SHA-1)。
    • 检查计算校验和与存储值是否一致,发现数据损坏时进行修复。
  • 数据冗余

    • HDFS默认配置复制因子为3,确保每个文件块有三个副本,提高数据可用性。
    • NameNode在选择DataNode时,会优先考虑节点的冗余情况,确保数据分布合理。
  • DataNode的工作机制

  • 存储数据

    • DataNode将文件块以固定大小的文件形式存储在磁盘中,包括数据和元数据。
    • 元数据记录块的大小、校验和、时间戳等信息。
  • 周期性汇报

    • DataNode定期向NameNode汇报块信息,时间间隔由dfs.blockreport.intervalMsec配置,默认为21600000毫秒(30分钟)。
    • DataNode还会扫描自身的数据目录,确保块信息的准确性。
  • 心跳机制

    • DataNode每隔3秒发送一次心跳信号,NameNode记录节点信息。
    • 若超过10分钟未收到心跳,NameNode认为节点不可用,触发数据重布局。
  • 配置和优化

  • 心跳和重校验

    • dfs.heartbeat.interval:心跳时间间隔,单位为秒,默认为3秒。
    • dfs.namenode.heartbeat.recheck-interval:心跳重校验间隔,单位为毫秒,默认为300000毫秒(30秒)。
    • dfs.datanode.directoryscan.interval:DataNode扫描数据目录的间隔,单位为秒,默认为21600秒(3小时)。
  • 数据块大小

    • HDFS默认块大小为256MB,可根据存储设备容量和网络带宽调整,提升读写性能。
  • 通过以上流程,HDFS能够高效地管理和存储大规模数据,支持高并发的读写操作,适用于处理海量数据任务。

    转载地址:http://xqzr.baihongyu.com/

    你可能感兴趣的文章
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>