Hadoop基础——HDFS知识点梳理

news/2024/5/20 4:03:11 标签: hdfs, hadoop, 大数据

HDFS基础知识

1. 介绍一下HDFS组成架构?

组成部分:

  • HDFS Client,
  • NameNode,
  • DataNode
  • Secondary NameNode( HA模式下是 StandBy NameNode)
  1. Client: 客户端
    1. 文件切分,文件上传HDFS时,client将文件切分成一个一个的block,然后进行存储。
    2. 与NN交互,获取文件的位置信息。
    3. 与DN交互,读取或者写入数据。
    4. Client提供一些命令来管理HDFS, 比如启动或者关闭HDFS
    5. Client可以通过一些命令来访问HDFS
  2. NameNode: master,
    1. 管理hdfs的命名空间
    2. 管理数据块的映射信息
    3. 处理客户端的读写请求
    4. 配置副本策略
  3. DateNode: slave,NN下达命令,DN执行实际的操作
    1. 存储实际的数据块
    2. 执行数据块的读写操作
  4. Secondary NameNode:
    1. 辅助NN,分担其工作量。
    2. 定期合并fsimage和edits log,生成新的fsimage替换旧的fsimage。
    3. 在紧急情况下辅助恢复NN。

2. NameNode 和 SecondaryNameNode 的区别与联系

  1. 区别:
    1. namenode 负责管理整个文件系统的元数据,以及命名空间。
    2. secondary name node 负责定期合并fsimage和edit log。
  2. 联系:
    1. secondary name node 中保存了一份和namenode一致的fsimage(镜像文件)和edits log(编辑日志)。
    2. 在namenode 发生故障时, 可以从secondary namenode恢复数据。

3. NN和DN的区别和联系?

  1. 从角色来看:
    1. NN是master,承担管理者的角色,
    2. DN 是slave, 承担具体执行者的角色。
  2. 从工作内容:
    1. NN管理HDFS的名称空间,数据块的映射信息,处理客户端读写请求。
    2. DN 存储实际的数据块, 执行数据块的读/写操作。

4. HDFS在HA模式下的工作流程?

相较于非HA模式,多了3部分:

  1. 负责负载均衡的ZK集群。
  2. Edits log文件管理系统Qjournal。
  3. ZKFailoverController负责监测NN是否健康。
    在这里插入图片描述

5. ZKFailoverController的作用?(HA NameNode的工作模式)

  1. 健康监测: 周期性的向它监控的NN发送健康探测命令,从而确定某个NN是否处于健康状态,如果机器宕机,心跳失败,zkfc就会标记该NN处于一个不健康的状态。
  2. 会话管理: 如果NN是健康的,zkfc就会在zk 中保持一个打开的会话,如果NN同时还是Active状态,那么zkfc还会在Zookeeper中占有一个类型为短暂类型的znode,当这个NN挂掉后,znode也将会被删掉,然后备用的NN,将会得到这把锁,升级为主NN,同时标记状态为Active。
  3. 当宕机的NN新启动时,会再次注册zk, 发现已有znode锁,会自动变为standby状态(防止脑裂,出现两个active node)
  4. master选举:通过在zk中维持一个短暂类型的znode, 来实现抢占式的锁机制,从而判断哪个NameNode为Active状态。

6. HDFS的存储机制

写数过程:

  1. 客户端通过 Distributed FileSystem模块向NN发其文件上传请求, NN检查目标文件是否已存在,父目录是否存在
  2. NN返回是客户端是否可以上传
  3. 客户端请求第一个block上传到哪几个dn服务器上
  4. NN返回3个dn节点,分别为dn1,dn2, dn3,表示采用这个三个节点存储数据。
  5. 客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3, 将这个通信管道建立完成。
  6. dn1, dn2, dn3逐级应答客户端
  7. 客户端开始往dn1上传第一个block, 以packet为单位,dn1收到一个packet就会传给dn2,dn2传给dn3; dn1每传一个packet会放入一个应答队列等待应答。
  8. 当一个block传输完成后, 客户端再次请求NameNode上传第二个block的服务器。
    在这里插入图片描述

读数过程:

  1. 客户端通过 Distribued FileSystem 向NameNode请求文件,NameNode通过查询元数据,找到文件所在的DataNode地址。
  2. 挑选一台DataNode(就近原则)服务器,请求读取数据。
  3. DataNode开始传输数据给客户端(从磁盘里读取数据输入流,以packet为单位来做校验)
  4. 客户端以packet为单位接收,现在本地缓存,然后写入目标文件。
    在这里插入图片描述

7. Secondary NN 和 HA模式下的StandbyNN的区别

  1. 首先强调,SecondaryNN 不是NN的备份,只能算是辅助,负责定期合并fsimage和edits log,形成新的fsimage 以替换旧的fsimage。简单理解:Secondry NN负责的是定期存档,方便那天NN异常退出,可以快速回复。
  2. HA下的Standby NN可以理解为是Active的备份,实时合并fsimage和edits log,将合并后的fsimage 替换旧的fsimage。一旦Active NN挂了,Standby NN 就可以转正,继续提供服务,无需等待,即高可用性的含义
  3. 对比,secondary nn 架构简单,但是存在元数据丢失的问题;HA架构复杂,但是元数据不会丢失。

8. HDFS中负责存储的是哪一部分

DateNode,DN 负责具体的数据存储操作

9. HDFS中的Block默认大小是多少?为什么这么设计?

Block默认大小:
1.X版本是64MB,2.X和3.X是128MB。
Block的大小是不能太大,也不能太小,这样做的目的是尽量减少寻址时间在总时间中的占比。
这么理解:

  • 文件块越大,寻址时间越短,但磁盘传输时间越长;
  • 文件块越小,寻址时间越长,但磁盘传输时间越短。

至于为什么是128M,根据统计,HDFS中平均寻址时间大概为10ms,经过测试,寻址时间为传输时间的1%时,为最佳状态
那么按照公式计算:
最佳传输时间为10ms/0.01=1000ms=1s
目前磁盘的传输速率普遍为100MB/s:
最佳block大小:100MB/s x 1s = 100MB
处于对2进制的执着,block设计为128MB。


http://www.niftyadmin.cn/n/1036821.html

相关文章

iOS开发那些事-Passbook详解与开发案例(附视频)

Passbook是iOS 6的新功能,只能在iPhone和iPod touch设备中使用。它可以帮助我们管理商家发放的电子会员卡、积分卡、优惠券等。这将对未来电子商务产生深远的影响。商家通过发放会员卡、积分卡、优惠券等,提高与消费者的互动,吸引人们更多消费…

iOS开发那些事-如何编译iOS程序

我们从编写到发布应用会经历3个阶段:模拟器上运行调试、设备上运行调试和发布编译,苹果为了防止非法设备和非开发人员调试和发布应用,使用配置概要文件(Provisioning Profiles)控制在设备上运行调试和发布编译阶段&…

iOS开发那些-如何打包iOS应用程序

我们把应用上传到App Store之前需要把编译的二进制文件和资源文件打成压缩包,压缩格式是zip。 首页找到编译到什么地方,这个很重要也不太好找,我们可以看看编译日志,找到其中的Create universal binary HelloWorld…的内容&#x…

R<每日一题>优化内存版

题目: 题目链接:登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的…

vue将项目中的图片转成base64字符串

我们先来创建一个vue项目 然后在src目录下的assets文件夹中有一个logo.png 如果没有 你就找一找图片放这里就好了 然后来到App.vue 编写代码如下 <template><div id"app"><button click "imageUrlToBase64()">截取图片</button>…

《iOS开发指南》正式出版-源码-样章-目录,欢迎大家提出宝贵意见

我的最新作品&#xff1a;《iOS开发指南-从0基础到AppStore上线》正式出版了 iOS架构设计、iOS性能优化、iOS测试驱动、iOS调试、iOS团队协作版本控制。。。。。。应有尽有 京东销售地址&#xff1a;http://item.jd.com/11288969.html 当当销售地址&#xff1a;http://product.…

MySQL在sql语句中给表设置别名

有些时候如果一个表单作用比较复杂 那么为了命名规范 形容他的作用 我们就会给他去很长的名字 例如这样 select * from staff,department where staff.departmentid department.id;department表再去点字段 就感觉太长了 MySQL别名的语法就是 表名 空格 别名 例如这段语句我们…

iOS开发那些事-iOS应用本地化-文本信息本地化

文本信息本地化在本地化工作中占有很大的比例。包括了&#xff1a;应用名称本地化、系统按钮和信息本地化&#xff0c;以及静态文本信息本地化。 系统按钮和信息本地化 还记得天气预报应用背后的“完成”按钮吗&#xff0c;它在中文环境下是“完成”&#xff0c;在英语环境下是…