Hadoop HDFS 基本原理(文件上传 & 文件下载 & NameNode & Secondary NameNode)

前言

在前面的几章内,我们介绍了Hadoop Shell 命令 与 WordCountHadoop HDFS的Java API使用. 本章我们稍微讲解下Hadoop的客户端提交Hadoop服务端Secondary namenode原理.


概述

  • HDFS集群分为2大角色: NameNodeDataNode/Secondary NameNode.
  • NameNode负责整个文件系统的原数据.
  • DataNode负责管理用户的文件数据块.
  • 文件会被按照固定大小(blocksize)切分成若干块后分布式存储在若干台NameNode上.
  • 每一个文件有多个副本(Replication), 并放在不同的datanode上.
  • datanode会定期汇报自身所保存的文件的block信息, 而namenode则会负责保持文件的副本数量.
  • HDFS的内部机制对客户端保持透明, 客户端请求访问HDFS都是通过向namenode申请来进行.

客户端写文件基本流程

在这里插入图片描述

  1. 客户端向namenode结点发送请求上传文件(例如: /hello.sh).
  2. namenode响应可以上传.
  3. RPC请求上传第一个block(0-128M), 请返回DataNode.
  4. 适配符合的datanode(例如: sean60/sean61). 考虑因素(空间/距离)
    4.1. 第一个考虑距离client端最近的结点;
    4.2. 第二个再另外一个虚拟机上挑选一个datanode进行拷贝.
    4.3 第三个考虑不同机架上的datanode结点.(机架感知-配置)
  5. 请求建立block传输通道channel.
    5.1 pipeline同机器间请求建立通道.
    5.2 pipeline请求建立通道
  6. 请求成功, 开始传输数据.
    6.1 应答成功.
    6.2 应答成功.
  • 注: 每次传输packet时,有一个64K的缓冲池.
    • 相同管道流内是同步进行传输.
    • 当一个datanode上传输完成后即完成, 没必要等待所有的副本都传输完成.
    • 传输时, chunk是以512Byte进行校验.

客户端读文件基本流程

在这里插入图片描述

  1. 客户端向namenode结点发送请求下载某个文件(例如: /hello.sh).
  2. namenode响应, 并将存储的结点信息通知客户端.(例如: /hello.sh ({BLK_1, BLK_2} {BLK_1: sean60,sean62}))
  3. 客户端根据返回信息, 查询BLK, 并且选择其中的一个BLK, 与其建立管道.
  4. BLK所在的datanode响应信息, 建立Socket管道, 开始传输数据.
  5. 对于其他块, 重复上述的3, 4两个步骤.

NameNode & Secondary NameNode 基本运行机制

在这里插入图片描述

NameNode的工作流程
  1. 更新内容(增删查改等操作).
  2. 记录操作日志(edits.inprocess-edits.0002/edits.0003)
SecondaryNameNode的工作流程
  1. SecondaryNameNodeNameNode请求是否需要checkPoint.
  2. 请求checkpoint.
  3. namenode滚动正在写的edits.
  4. secondary name node下载滚动的文件到本地.
  5. secondary name node将文件加载到内存并合并.
  6. secondary name node dump新的image文件.
  7. secondary name node将新的image文件上传到namenode目录下.
  8. namenode将下载的image文件其重命名为fsimage.
  • 注: 格式化命令hdfs namenode -format [-cluster <cluster_id>]
  • dfs.namenode.dir.current目录下,format同时也会生成fsimageedits文件, 及与其对应的md5校验文件.
  • seen_txid文件记录的是edits滚动的序号, 每次重启namenode时, namenode就知道哪些edits进行加载edit.
DataNode相关信息
  • dfs.blockreport.inervalMsec汇报时间(1H默认).
  • heartbeat.recheck.interval 心跳机制(10分钟30秒).

Q&A

Q1: NameNode如果宕机, hdfs是否还能够继续执行?
A1: 不能. Secondary Name Node并不具有NameNode的权限与职能.

Q2: 如果NameNode的磁盘损坏, 元数据是否还能恢复? 如果需要恢复, 如何恢复?
A2: 能恢复绝大部分内容. 将Secondary Name Node的部分拷贝到NameNode目录下即可.

Q3: 通过以上思考, 在配置NameNode工作目录时, 有什么注意点?
A3: 尽量将Secondary NameNodeNameNode的工作目录分开存放. NameNode的有时也可以配置在多块磁盘上.dfs.namenode.name.dir也可以配置多块磁盘./data1/dfs/name,/data2/dfs/name,/data3/dfs/name.

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页