博客
关于我
大数据技术之分布式文件管理系统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/

    你可能感兴趣的文章
    Objective-C实现找到一个数字数组的中值算法(附完整源码)
    查看>>
    Objective-C实现找到具有 500 个除数的第一个三角形数算法(附完整源码)
    查看>>
    Objective-C实现找到最近的点对之间的距离算法(附完整源码)
    查看>>
    Objective-C实现抓包实例(附完整源码)
    查看>>
    Objective-C实现抽签抓阄(附完整源码)
    查看>>
    Objective-C实现抽象工厂模式(附完整源码)
    查看>>
    Objective-C实现拉格朗日插值法(附完整源码)
    查看>>
    Objective-C实现拉格朗日插值算法(附完整源码)
    查看>>
    Objective-C实现拓扑排序算法(附完整源码)
    查看>>
    Objective-C实现拦截输入法(附完整源码)
    查看>>
    Objective-C实现括号匹配(附完整源码)
    查看>>
    Objective-C实现拷贝二进制文件(附完整源码)
    查看>>
    Objective-C实现指定内存空间获取时间的函数(附完整源码)
    查看>>
    Objective-C实现指定点 x 处计算多项式 f(x) 并返回值算法(附完整源码)
    查看>>
    Objective-C实现按位倒序(附完整源码)
    查看>>
    Objective-C实现按位的isPowerOfTwo算法(附完整源码)
    查看>>
    Objective-C实现按位运算符乘以无符号数multiplyUnsigned算法(附完整源码)
    查看>>
    Objective-C实现排队叫号系统(附完整源码)
    查看>>
    Objective-C实现控制NRP8S功率计读取功率 (附完整源码)
    查看>>
    Objective-C实现控制程控电源2306读取电流 (附完整源码)
    查看>>