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

    你可能感兴趣的文章
    npm安装crypto-js 如何安装crypto-js, python爬虫安装加解密插件 找不到模块crypto-js python报错解决丢失crypto-js模块
    查看>>
    npm安装教程
    查看>>
    npm报错Cannot find module ‘webpack‘ Require stack
    查看>>
    npm报错Failed at the node-sass@4.14.1 postinstall script
    查看>>
    npm报错fatal: Could not read from remote repository
    查看>>
    npm报错File to import not found or unreadable: @/assets/styles/global.scss.
    查看>>
    npm报错TypeError: this.getOptions is not a function
    查看>>
    npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
    查看>>
    npm淘宝镜像过期npm ERR! request to https://registry.npm.taobao.org/vuex failed, reason: certificate has ex
    查看>>
    npm版本过高问题
    查看>>
    npm的“--force“和“--legacy-peer-deps“参数
    查看>>
    npm的安装和更新---npm工作笔记002
    查看>>
    npm的常用操作---npm工作笔记003
    查看>>
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm设置淘宝镜像、升级等
    查看>>
    npm设置源地址,npm官方地址
    查看>>
    npm设置镜像如淘宝:http://npm.taobao.org/
    查看>>
    npm配置安装最新淘宝镜像,旧镜像会errror
    查看>>