Hdfs四大原理

Hdfs运行原理

分布式存储数据。文件 节点 数据块!
HDFS的主节点,主要有两大作用:

NameNode:
是管理文件目录结构:一块元数据是文件与数据块之间的信息
/opt/workspace/hadoop/hdfs/name/current —hads-defaults.xml
静止持久化存储在磁盘上,通过fsimage edits文件维护

fsimage:目录和数据块信息以及edits的操作日志,比如文件增删操作,出错利用这个文件回滚处理;
edits:记录操作日志信息(关注目录结构);
为了方便减少fsimage(只需关注存储即可)的负担,所以有了edits.

是管理数据节点(namenode管理的datanode):一块元数据是数据块与节点之间的信息
不持久化存储这些信息,而是每次启动节点,重构这些信息。

DataNode:负责信息的存储和读取的节点,周期性的利用心跳机制向NameNode发送自己的状态。
Block:
1、一块默认128M,小于128的文件也为一块,占用空间!尽量避免小文件。
2、Block不宜过大,MapReduce的Map任务一次只能处理一个Block的数据,Block过大会使启动的Map数量过少,影响并行处理速度。
3、HDFS无法高效存储大量小文件

        块文件Block逻辑概念:只是记录块信息,不存储文件。
        core-site.xml
        dfs.block.size
        67108864

Heartbeat:RPC心跳机制通信:定期反馈给NameNode信息;

原理描述:
1. NameNode和DataNode初始化完成后,采用RPC心跳机制进行信息交换,即子节点定时反馈给主节点信息,如磁盘空间、异常、资源情况。
2. 主节点会将子节点的相关元数据信息缓冲到内存中中,对于第一个元数据会通过fsimage和edit持久化在磁盘上.
3. 主节点负责fsimage和edits元数据信息,但需要定期合并,则由secondNameNode进程对fsimage edits文件进行定期合并,再交给NameNode存储。

Hdfs元数据合并原理

SecondaryNameNode专门负责文件和数据库的fsimage和edits合并为一个元数据;

尽量将SecondaryNameNode和namenode放到一台机子,减少http带宽!!
1. 在初始化后,生成两个文件fsimage和edits,当fsimage达到阈值时,向SecondaryNameNode发出合并请求,同时NameNode会产生一个新的edits
文件替换掉旧的edits文件,这样以保证数据不会出现冗余;
2. SecondaryNameNode拿到两个文件,在内存中合并成一个fsimage.ckpt,再发给namenode,而namenode拿到后,将旧fsimage替换,改名为新的fsimage

Hdfs四大原理_第1张图片

Hdfs读原理

请求namenode,计算出距离client最近的副本,返回元数据信息;
以空间换时间来实现分布式读(鱼和熊掌不可兼得)
1. 提交写操作到NameNode,判断是否有权限。判断每个块计算最优(近)的DataNode,返回信息。
2. 依次读DataNode中的块信息,直到完毕。

Hdfs四大原理_第2张图片

Hdfs写原理

串行写入每个DataNode副本;

  1. 提交写操作到NameNode,判断是否有权限。返回信息。
  2. 进行数据交互,把数据分为三块,(相当于)然后串行写入:先写完第一个副本,拷贝到第二个节点,再到第三个节点;
  3. 随着所有副本写完后,客户端会收到数据节点反馈回来的一个成功状态,成功结束后,关闭与数据节点交互的通道,并反馈状态给NameNode,告诉NameNode文件已成功写入到对应的DataNode

Hdfs四大原理_第3张图片

Hdfs四大原理_第4张图片

你可能感兴趣的:(大数据基础,大数据基础)