目录

一、HDFS切分Block如果一个单词被切分为一半会有什么影响。(分布式文件系统结构PDF第二块知识点)

二、Hadoop1.X系统架构

三、HDFS启动流程

四、HDFS的写数据流程

五、HDFS的读数据流程

六、Hadoop1的困境

七、Hadoop-HA

八、Hadoop-Federation联邦机制

九、Hadoop3.X新特性

一、HDFS切分Block如果一个单词被切分为一半会有什么影响。(分布式文件系统结构PDF第二块知识点)

  1. 字节数组是文件在磁盘真实存储文件的抽象概念,数组可以进行拆分和组装,源文件不会受到影响,通过下表便宜量可以很快定位数据。

  2. 数据存储的原理: 不管文件的的大小,所有的文件都是由字节数组构成 如果我们要切分文件,就是将一个字节数组分成多份 我们将切分后的数据拼接到一起,数据可以继续使用 我们需要根据数据的偏移量将他们重新拼接到一起

  3. 引出Block切分标准

    • 拆分的数据块需要等大,通过文件大小变知道切分为几个块,块与块之间差了几个块,通过偏移量定位块在文件的位置。等大方便计算切分等等。

    • HDFS中一旦文件被存储,数据不允许被修改

    • 一个Block有多个副本

二、Hadoop1.X系统架构

1.NameNode功能作用

  • 存放信息,文件的元数据信息,文件与Block块的映射信息,块与DataNode的映射关系。其中关闭集群时,文件的元数据信息和文件和Block块的映射会被实例化到磁盘上。都是固定的内容。但是Block块玉DataNode的映射关系不会被持久化保存,因为并不能保证每次重启的时候每个DN都能正常启动,有可能客户端访问NN得到文件Block对应DN地址是失效的。为了解决这个问题,为保证每一个Block块与DataNode的映射是有效的,每次集群启动,DN都会汇报当前节点信息给NN节点,当所有DN都成功启动后,NN也就收集好了Block与DN的有效映射关系。如果启动中由部分DN失败了,导致有的Block副本数达不到最小要求,NN会将Block复制到其他DN上。

  • 心跳机制

    • 当集群启动完毕后,NN与DN保存心跳机制,每3秒发送一次,如果超过三次本次心跳失败,暂时标记当前DN节点不可用,当DN超过10分钟+30S,那么NN会将DN存储的数据转存到其他DN节点上。

  • 接受客户的请求,客户端访问与上传文件都会询问NN并得到对应的DN位置。

  • 存放日志文件,NN为了追寻效率,所有数据都存放在内存中。

2.DataNode功能作用

  • 存储数据,Block都会存放在DN节点上。

    • HDFS特别害怕小文件,因为小文件可能还没有映射文件大。

  • 心跳机制,DN启动后,检测当前节点Block的信息及完整性,如果没有问题,就将其汇报给NN节点。

3.SecondaryNameNode功能作用

  • 帮助NN,进行日志的合并于拍摄快照。

4.SNN进行日志文件合并的过程

  • 当NN日志文件达到64MB或者经过3600S之后,会创建新的日志文件。SNN会拉取最新的日志文件和上一次的快照信息,然后对快照进行日志的操作,并拍摄新的快照,并复制到NN节点。

三、HDFS启动流程

1.安全模式

  • 是集群启动中的一个中间状态,安全模式是HDFS的一种工作状态,处于安全模式的状态下,只向客户端提供文件的只读视图,不接受对命名空间的修改;同时NameNode节点也不会进行数据块的复制或者删除

  • 各个DataNode会向NameNode发送自身的数据块列表

  • NameNode有足够的数据块信息后,便在30秒后退出安全模式

  • NameNode发现数据节点过少会启动数据块复制过程

2.机架感知策略

  • 为了保证副本在集群的安全性

  • 第一个节点

    • 集群内部(优先考虑和客户端相同节点作为第一个节点)

    • 集群外部(选择资源丰富且不繁忙的节点为第一个节点)

  • 第二个节点 选择和第一个节点不同机架的其他节点

  • 第三个节点 与第二个节点相同机架的其他节点

  • 第N个节点 与前面节点不重复的其他节点

四、HDFS的写数据流程

复述流程

  1. HDFS的写入过程,首先客户端向NameNode发送一个请求,NN检测请求的合法性,是否有足够的空间创建这个文件,是否有权限上传文件,上传的文件夹路径是否存在,文件是否存在等问题,如果问题又问题返回一个异常给客户端。如果没有问题,在NN上创建一个文件对应的entry文件用来保存文件的元数据信息,文件与Block块的映射信息,Block块与DataNode节点的映射信息,给客户端创建一个输出流用来向HDFS传递文件数据。

  2. 客户端向NN,询问第一个Block存放的位置信息,NN通过机架感知策略,返回Block及其副本存放的DN的信息。【机架感知策略,为了保证副本在集群中的安全性,第一个节点[ (如果集群内,优先考虑与客户端同节点),(集群外,选择一个资源丰富且不忙碌的节点)] 第二个节点 选择与第一个节点不同机架上的其他节点。 第三个节点 选择与第二个节点相同机架的其他节点 )其它节点 与前面不充分的节点】 客户端通过得到的DN信息与DN节点之间创建管道,客户端连接DN1,DN1连接DN2,DN2连接DN3。减少客户端带宽,增加传输速率。

  3. 管道(管道本质就算Socket连接)建立之后,按packet包发送数据。好处是,如果发送数据的过程中出现了错误了,只需要重写发送失败的packet包,不需要重新发送整个Block块。

  4. 讲一下packet包是 什么 ,由什么构成的。packet数据分为两类。一类是header,packet头信息,存放packet 的的数据长度,在Block中的偏移量,packet序列号,是否为最后一个packet等等信息,另一类是实际的数据包,由若干个chunk 与 checksum构成,一个chunk512B,存放文件数据,一个checksum4B,存放chunk的检验文件,检验chunk数据片段是否合法正确。

  5. 当chunk与checksum填满一个packet后,这个packet会被挂载到DataQueue队列上,等待守护线程DataStreamer取出发送给管道,当packet取出后不会被删除,而是挂载到了AckQueue应答队列上,如果传输中packet出现错误,会将packet重新加载到DataQueue中等待重新发送。那如何判断成功失败的呢?

  6. Packet Ack机制是这样子的,举个例子,一主两备,当客户端传递packet到第一个节点后,同时给予节点一 1个ack状态,第一个节点接受数据后将数据继续发送给第二个节点,同时给予节点二1个ack状态,第二个节点接受数据后将数据继续发送给第三个节点,第三个节点接受成功后,向节点二响应一个成功的ack状态,然后节点二接到到节点三成功的应答后,向节点一响应一个成功的ack状态,然后节点一接受到节点二成功的应答后,向客户端响应一个成功的ack状态,当客户端接到到成功的ack状态时,就认为这个packet发送成功,接受发送下一个packet。如果由一个ack状态为失败,则表示此packet发送失败,将应答队列中的所有packet重新挂载到发送队列,放在发送队列首位,因为要按顺序进行packet的发送。

  7. 当所有packet发送成功后,表示当前block发送成功。所有的chunk文件 形成了block 的mate文件,所有checksum文件形成了 block的校验文件。

  8. 然后重复上述过程将block全部传输成功,则此文件保存到HDFS中

五、HDFS的读数据流程

复述流程

  1. 客户端发送消息给NameNode,申请读取一个文件,NN先判断有没有权限,有没有此文件。

  2. 如果没有返回异常,如果有则返回成功并为客户端创建一个输入流,用来读取文件。

  3. 客户端获得文件第一个Block的信息,从主备Block中选一个最近进行读取,我查了一下读取过程,也是按packet为单位读取的。

  4. 读取完一个block之后,对这个block进行一次checksum的验证,验证这个block的数据总量是否正确,如果不一致,说明这个block产生损坏,客户端会通知namenode,再从其他节点上读取该block,NameNode收到消息从新备份一次,发指令给这个DataNode让他把这个坏的删除。

  5. 以此类推将所有的block块全部读出,合并成一个文件,就完成了读取过程。

六、Hadoop1的困境

  1. 单点故障

  2. 水平扩展

  3. NameNode内存随着时间占满问题

  4. 业务隔离性差

  5. 项目后期namenode的吞吐量将会是集群的瓶颈

    解决方法 HA高可用框架 与 联邦机制的引入

七、Hadoop-HA

1.HA解决的问题(好处)

  • 解决了单点故障的问题,启用主备切换模式,当主节点宕机后,集群直接将备用节点切换成主节点。

2.ANN的功能作用

  • Active NameNode 的功能和原理的NN的功能是一样的

    • 接受客户端请求,查询数据块DN信息

    • 存储数据的元数据信息,文件于Block的映射关系,Block与DN的映射关系

    • 启动时:接受DN的block汇报 运行时:和DN保持心跳(3s,10m30s)

    • 完全基于内存 优点:数据处理效率高 缺点:数据的持久化(日志edits+快照fsimage)

3.SNN的功能作用

  • Standby NameNode:NN的备用节点

  • 他和主节点做同样的工作,但是它不会发出任何指令

  • 替代了SNN,并接替了合并日志的工作。

4.DataNode的功能作用

  • 存储,文件的Block数据

  • 启动时:同时向两个NN汇报Block信息

  • 运行中:同时和两个NN节点保持心跳机制

5.QJM的功能作用

  • Quorum JournalNode Manager 共享存储系统,NameNode通过共享存储系统实现日志数据同步。

  • JournalNode是一个独立的小集群,它的实现原理和Zookeeper的一致( Paxos)

  • ANN产生日志文件的时候,就会同时发送到 JournalNode的集群中每个节点上

  • JournalNode不要求所有的jn节点都接收到日志,只要有半数以上的(n/2+1)节点接受收到日志,那么本条日志就生效

  • SNN每间隔一段时间就去QJM上面取回最新的日志

    • SNN上的日志有可能不是最新的,因为不上所有jn节点都是全部的最新数据

  • 在原来的模式下,这些日志文件都是放在active的NameNode(NN) 中,又starndy 的NN 定期来合并这些日志文件(压缩等待),然后将合并后的文件合并到active 的NN,关键问题是,如果这个NN挂掉了那么整个集群就挂掉了,为了解决这个问题。

    • 将日志文件由NN写到几台机器上journalnode,几台的原因是担心有机器挂掉.

    • 设置两个NN,一个是active的,一个是backup的,如果active的挂掉了,通过zookeeper,让backup的NN变成active的NN,通过重播journalnode上的日志,让backup的NN的数据同步到active NN 挂掉的状态, 这样集群的容错能力更强。

6.ZKFC作用

  • Failover Controller(故障转移控制器)

  • 对 NameNode 的主备切换进行总体控制,能及时检测到 NameNode 的健康状况

    • 在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换

    • 为了防止因为NN的GC失败导致心跳受影响,ZKFC作为一个deamon进程从NN分离出来

  • 启动时

    • 当集群启动时,主备节点的概念是很模糊的

    • 当ZKFC只检查到一个节点是健康状态,直接将其设置为主节点

    • 当zkfc检查到两个NN节点是的健康状态,发起投票机制

    • 选出一个主节点,一个备用节点,并修改主备节点的状态

  • 运行时

    • 当主节点选举成功后,zookeeper中创建一个临时数据并watch,但主节点出现异常问题时,会被watch到,然后回进行主备切换

    • 当宕机的主节点上线后,会转变为备用节点

7.Zookeeper

  • 辅助投票,辅助NN节点的主备切换

  • 和ZKFC保持心跳机制,确定ZKFC的存活

8.脑裂问题解决办法

解决脑裂的核心是隔离,将旧的主节点进行隔离操作

方法一

  • 每次NN发生指令时,会携带一个序列号

  • 每次选举,ANN都会将序列号发送给DN

  • 出现脑裂后,多个NN发送指令,DN只以最新的指令为准

方法二

  • 每次ANN选举后,都会在Zookeeper生成一个临时节点和一个正常节点。

  • 当ANN正常下线,临时与正常节点都会被删除

  • 当ANN被动下线时,只有临时节点会被删除

  • SNN发现临时与正常节点都不在,放心的切换为主节点

  • SNN发现只有临时节点不在时,可能是发生了脑裂现象。

    • 首先会联系以前的ANN,PRC调用ANN的ActiveBreadCrumb方法,尝试主切换为备。

    • 如果切换失败,会执行预定义的隔离措施 sshfence或者shellfence将ANN杀死 然后SNN调用BecomeActive成为主节点,开始对外提供服务。并在Zookeeper上创建临时与正常节点。

    • 核心 就是先杀旧主,在立新主

八、Hadoop-Federation联邦机制

1.联邦机制解决的问题

  • 单NN局限性

    • 整个HDFS文件系统的吞吐量受限于单个Namenode的吞吐量

    • 资源的隔离性,HDFS上的一个实验程序就很有可能影响整个HDFS上运行的程序

    • 纵向扩展目前的Namenode不可行

    • 单点故障,Namenode的宕机无疑会导致整个集群不可用。

    • 后期NN节点内存会被占满

2.联邦机制的实现

  • 允许一个集群中有多个NN节点,并且每一个NN节点都是HA高可用的。

  • 所有的nn共享dn,但是每一个namespace会单独管理自己的块,会创建一个管理块的机制:blocks pool

  • 每个NN节点有一个命名空间,每个命名空间有对应的块池

    • 块池Block Pool,存放该NN节点管理的Block块与DN的映射关系

    • 块池是一个逻辑概念

  • 通过多个namenode/namespace把元数据的存储和管理分散到多个节点中

  • namenode/namespace可以通过增加机器来进行水平扩展

九、Hadoop3.X新特性

  • EC技术,减少文件的存储空间,但执行远程读取时数据重建带来额外的开销,所有用于不太频繁访问的数据。

  • 在Hadoop3中允许用户运行多个备用的NameNode。

  • 早些时候,多个Hadoop服务的默认端口位于Linux端口范围以,因此,具有临时范围冲突端口已经被移除该范围

  • DataNode可能会因为文件的添加或者替换导致节点存储出现偏移,但3.X会平衡功能来处理这种情况

||

V

  • Hadoop3中,最低版本要求是JDK8

十、面试题

1 请说下 HDFS 读写流程
2 HDFS 在读取文件的时候,如果其中一个块突然损坏了怎么办
3 HDFS 在上传文件的时候,如果其中一个 DataNode 突然挂掉了怎么办
4 NameNode 在启动的时候会做哪些操作
5 Secondary NameNode 了解吗,它的工作机制是怎样的
6 Secondary NameNode 不能恢复 NameNode 的全部数据,那如何保证 NameNode 数据
存储安全
7 在 NameNode HA 中,会出现脑裂问题吗?怎么解决脑裂
8 小文件过多会有什么危害,如何避免
9 请说下 HDFS 的组织架构


Hadoop-HFDS知识点总结相关推荐

  1. hadoop---(1)hadoop核心知识点总结

    hadoop核心知识点总结 1.  安装hadoop需要配置的hadoop中的配置文件有哪些? hadoop-env.sh yarn-env.sh core-site.xml hdfs-site.xm ...

  2. Hadoop小知识点

    hdfs命令行 上传  hadoop fs -put 文件名 hdfs://主机名:9000/... 下载  hadoop fs -get hdfs://主机名:9000/... 文件名 /hadoo ...

  3. Hadoop HFDS 的 Shell 操作

    调用文件系统(FS)Shell命令应使用 bin/hadoop fs 的形式. 所有的的FS shell命令使用URI路径作为参数.URI格式是scheme://authority/path.对HDF ...

  4. Hadoop常备知识点

    1.hadoop中的InputSplit是什么? 如果分配一个Mapper给块1,在这种情况下,Mapper不能处理第二条记录,因为块1中没有完整第二条记录.因为HDFS不知道文件块中的内容,它不知道 ...

  5. 详细解释什么是hadoop和spark,及其工作原理

    目录 一.hadoop一些知识点: 1.HDFS知识: 1.1 HDFS工作机制 1.2 HDFS 写数据流程 1.3 HDFS 读数据流程 2.MapReduce原理 2.1 什么是 MapRedu ...

  6. Day04:分布式计算存储平台Hadoop

    优秀是一种习惯 知识点01:回顾 知识点02:目标 知识点03:Zookeeper的存储结构 知识点04:Zookeeper的常用命令 知识点05:Zookeeper特性:节点类型 知识点06:Zoo ...

  7. hadoop初体验Linux指令学习

    知识点一 Hadoop简介 知识点二 Hadoop简介2 知识点三 HDFS和MapReduce简介 知识点四 Linux命令回顾 查看网卡信息 ifconfig 查看文件(不包括隐藏) ls 查看文 ...

  8. 打怪升级之小白的大数据之旅(五十九)<Hadoop优化方案>

    打怪升级之小白的大数据之旅(五十八) Hadoop优化方案与扩展知识点 上次回顾 上一章,我们对Hadoop的扩展知识HA进行了学习,本章是我们在使用Hadoop过程中的一些优化方案和其他几个需要了解 ...

  9. java为什么需要网络编程,2022最新

    跪求!阿里P9手写的这份1530页的Java核心编程技术手册的实现原理?否想知道对象关系映射(ORM)框架的实现原理?首线程池如何实现?先给大家展示一下这份手册的目录部分,需要获取的小伙伴可以直接转发 ...

  10. 运行python程序的两种方式交互式和文件式_教你如何编写、保存与运行 Python 程序...

    第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...

最新文章

  1. C/S架构应用程序开发培训笔记
  2. 2011寒假-操作系统学习笔记
  3. [学习笔记]stm32
  4. jack对海量数据库的一些总结
  5. 解决VC6中error LNK2001 _WinMain@16错误
  6. 大端和小端的判断及转换
  7. CDN技术之--流媒体CDN系统的组成
  8. 店招模块终于可以进行后台换图片了
  9. c语言循环嵌套说课,C语言FOR循环说课稿.doc
  10. MySql-Mysql技术内幕~SQL编程学习笔记(N)
  11. 登陆模块邮箱用例设计_邮箱注册模块测试用例.doc
  12. 【ArcGIS教程03】基础知识(建议收藏)
  13. 【LeetCode - 1258】近义词句子
  14. 新媒传信Java_新媒小课堂——多媒体、流媒体、富媒体
  15. 完美Vista 自动激活安装版下载
  16. 帝国CMS7.2管理员密码重置
  17. Android Studio 基础控件飘红 处理办法
  18. 打怪物小游戏,无聊打发时间
  19. Vue中用Three.js创建一个3D会议室(三)拖动与旋转
  20. 【CTF WriteUp】2023数字中国创新大赛网络数据安全赛道决赛WP(1)

热门文章

  1. 算法偏见是什么_处理人工智能的偏见如何使算法公平公正
  2. 北京新世纪计算机学校地,石家庄新世纪电脑学校
  3. [工作积累] TAA Ghosting 的相关问题
  4. python怎么编写重复程序,python重复执行怎么写
  5. mc服务器tps优化,[教程] 使用Openj9大幅降低MC的内存占用,提高FPS和TPS
  6. HDU 2121 Ice_cream’s world II(最小树形图+虚根)
  7. 微信小程序:用wxs进行过滤处理
  8. android如何使用ios14组件,iOS14如何添加和删除小组件 iOS14添加和删除小组件的方法...
  9. python 爬取微博展开全文数据 BeautifulSoup
  10. Yii Framework 开发教程(22) UI 组件 Zii组件简介