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

    你可能感兴趣的文章
    NuxtJS 接口转发详解:Nitro 的用法与注意事项
    查看>>
    NVelocity标签使用详解
    查看>>
    Nvidia Cudatoolkit 与 Conda Cudatoolkit
    查看>>
    NVIDIA GPU 的状态信息输出,由 `nvidia-smi` 命令生成
    查看>>
    NVIDIA-cuda-cudnn下载地址
    查看>>
    nvidia-htop 使用教程
    查看>>
    nvidia-smi 参数详解
    查看>>
    nvm安装以后,node -v npm 等命令提示不是内部或外部命令 node多版本控制管理 node多版本随意切换
    查看>>
    NYOJ 1066 CO-PRIME(数论)
    查看>>
    nyoj------203三国志
    查看>>
    nyoj58 最少步数
    查看>>
    OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式&授权码模式
    查看>>
    OAuth2 Provider 项目常见问题解决方案
    查看>>
    Vue.js 学习总结(14)—— Vue3 为什么推荐使用 ref 而不是 reactive
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>
    OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
    查看>>
    OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
    查看>>
    OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>