Hadoop之HDFS基础理论



Hadoop__HDFS

1.      HDFS保存文件过程

1.1.       文件切块(Block

1.2.       HDFS将Block备份(副本replication 默认为3个)

2.      HDFS特点

2.1.       存储超大文件(切块)

2.2.       快速检测故障并应对(心跳)

2.3.       数据节点高可用(副本)

2.4.       可动态构建(随时增加删除节点)

2.5.       一次写入多次读取

2.6.       不支持事务

2.7.       不建议存储小文件

3.      HDFS组件分类

3.1.       Block

3.1.1.    大小

·         2.X版本中默认为128M

·         可以通过 dfs.blocksize(hdfs-site.xml)属性(字节)来设置Block的大小

·         灵活切割

•      文件超过128M就切快,文件小于128M有多少存多少

•      129M的文件,128M作为一个Block存储起来,余下的1M作为另一个Block

3.1.2.    为什么要切块

·         存储大文件

·         快速备份

3.1.3.    副本数量

·         在完全分布式下,一个Block三个备份

·         在伪分布式下,一个Block一个备份

3.1.4.    Block存储

·         可能存储在相同机器节点或者机器不节点上

3.1.5.    编号ID

·         每一个Block都有一个全局递增BlockID

3.2.       元数据

3.2.1.    基本特征

·         内容

•      对上传数据的描述

•      文件存储路径

•      文件操作权限

•      文件副本数量

•      文件和Block关系(切分为几块,文件大小,Block大小)

•      Block与DataNode映射关系

·         格式

•      FileName replicas block-Ids id2host
例如: /test/a.log,3,{b1,b2},[{b1:[h0,h1,h3]},{b2:[h0,h2,h4]}]

·         大小

•      每一条大概150B

·         存储位置

•      内存

•      用于快速查询

•      磁盘

•      持久化文件位置

•      NameNode节点下的磁盘空间

•      默认:/temp路径下 (/tmp/dfs/name/current

•      配置:core-site.xml 文件中的 dfs.tmp.dir属性

•      持久化文件分类以及作用

•      edits_inprogress_XXX

•      记录所有操作

•      edits_XXX

•      记录写操作

•      fsimage_XXX

•      NameNode内存数据快照

•      作用

•      用于崩溃回复数据持久化

3.2.2.    内存和持久化文件更改先后顺序

·         问题描述:为何接受写操作后要先修改磁盘Edit文件而不是更改内存

·         问题答案:更改内存后,在数据写入磁盘前有可能会发生机器宕机,数据此时可能会不一致

3.2.3.    写操作的处理

·         图解工作流程


·         *1.NameNode将接受到的写操作记录到edits_inprogress
*2.
记录成功后修改内存中的元数据
*3.
修改成功后返回修改成功信号
*4.fsimage
一定条件下更新数据

3.2.4.    镜像文件更新问题

·         问题描述

由于fsimage的持久化是定时执行的,所以edits文件和fsimage文件存在数据不一致的问题

·         解决方案:定时更新fsimage

•      更新流程

•      1.将edits_inprogress文件滚动为edits_xxx文件

•      2.将edits_XX文件转化为命令执行到fsimage

•      更新条件

•      时间

•      周期性更新

•      缺省

•      3600s一小时

•      配置

•      core-site.xml
fs.chechpoint.period

•      空间

•      edist_inprogress文件内容(初始为1M)到达指定大小后会触发更新

•      缺省

•      64M

•      配置

•      core-site.xml
fs.checkpoint.size

•      强制更新

•      命令:Hadoop dfsadmin -rollEdits

•      重启更新

•      NameNode 重新启动的时候会触发更新(少见)

•      更新结果

•      会生成一个新的edits_inprogress文件

3.3.       节点分类

3.3.1.    NameNode

·         作用

•      管理DataNode

•      存储元数据

·         启动NameNode时的安全模式

•      进入条件

•      集群启动

•      校验流程

•      NameNode

•      1.将Edits文件中记录的操作更新到Fsimage镜像文件中

•      2.将Fsimage中的元数据加载到内存中

•      3.DataNode发送心跳信息给NameNode

•      4.NameNode收起了心跳后校验各个DataNodeBlock的数据和备份数据,保证数据的完整性,如果数据丢失了要重新备份数据

•      5.如果有的DataNode无法心跳即为Lost NameNode会备份该DataNode的信息到另一个DataNode

•      注意要点

•      完成所有校验后才能退出安全模式对外服务

•      集群越大故障可能性越大处于安全模式下的时间越久

•      强制退出命令

•      Hadoop dfsadmin -safemode leave

•      有可能会由于数据丢失,无法找回副本,试图恢复数据而导致HDFS久处安全模式不退出,会一直重写校验数据,超过一定时间后强制退出安全模式

·         DataNode和NameNode沟通的心跳机制

•      原理

•      RPC请求发送心跳

•      心跳方向

•      DataNode->NameNode

•      心跳信息

•      当前DataNode中的Block信息(BlockID组成的队列)

•      当前DataNode节点状态信息

•      心跳间隔

•      缺省3s

•      配置:hdfs-site.xml
dfs.heartbeat.interval

•      节点丢失(Lost

•      问题发生

•      在指定时间(默认时间10mins/200次心跳)内没有收到心跳(网络问题),就会认为该节点Lost

•      数据处理

•      NameNode会将Lost节点的数据迁移到另一个DataNode节点上,保证集群中Block数量足够

·         高可用的NameNode

•      允许分布式中存在两台NameNode

•      机制

•      舍弃机制

•      HD2.0版本 完全分布式只能有1一个NN

•      NameNode是HDFS集群中的效率瓶颈

•      加强NameNode配置

•      联邦Hdfs

•      DN 对应一类 数据

•      一类DataNode 对应一个NameNode

•      缺陷

•      目录结构固化

•      一个访问路径对应一个节点

3.3.2.    DataNode

·         DataNode副本放置策略

•      完全分布式默认3

•      有固定位置的副本

•      第一副本

•      内部上传数据

•      哪个DataNode上传到NameNode的就保存在哪个DataNode上(DataNode作为客户端上传数据给NameNode

•      外部上传数据

•      找相对空闲(空间)DataNode来存储副本

•      第二副本

•      2.7之前

•      第二副本放置在第一副本不同机架节点上

•      2.7之后

•      第二副本放置在与第一副本相同的机架节点上

•      第一第二副本已经形成了数据的保证
第二第三副本避免跨机架传输数据以提高速度

•      第三副本

•      其他副本

•      往空闲节点上存放

•      伪分布式节点副本只能有1

•      第二第三副本有特定的位置但是当前只有一个节点
如果设置副本数量 >1 会一直保持在安全模式下 (找不到数据)

·         当前DataNode节点状态

•      服役

•      正在工作的节点

•      预服役

•      添加到白名单

•      预退役

•      将数据备份到其他节点

•      不再存储数据

•      添加到黑名单中

•      退役

•      不工作

3.4.       NameNode



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务