栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hadoop源码分析(八)

Hadoop源码分析(八)

2021SC@SDUSC

1.NameNode中的文件操作

public void abandonBlock(Block b, String src, String holder
 ) throws IOException;
abandonBlock 用于放弃一个数据块。当客户端通过类似addBlock方法获取LocatedBlock 后,可以打开到一个 block 的输出流,由于从DataNode 出错到 NameNode 发现这个信息,需要有一段时间,导致打开输出流时可能出错,这 时客户端可以向 NameNode 请求放弃这个数据块。 abandonBlock 的处理不是很复杂,首先检查租约(调用 checkLease 方法。block 对应的文件存在,文件处于构造状态,租约拥有者匹配),如果通过检查,调用 FSDirectory 的 removeBlock,从INodeFileUnderConstruction/BlocksMap/CorruptReplicasMap 中删除 block,然后通过 logOpenFile()记录变化。
public LocatedBlock addBlock(String src, String clientName) throws IOException;
如果数据块被写满,客户端可以通过 addBlock 创建新的数据块。allocateBlock 创建一个新的 Block 对象,然后调用 addBlock,检查参数后把数据块加到 BlocksMap 对象和对应的 INodeFile 对象中。allocateBlock 返回后,getAdditionalBlock 还会继续更新一些需要记录的信息,最后返回一个新构造的 LocatedBlock。
 public boolean complete(String src, String clientName) throws IOException;
当客户端完成对数据块的写操作后,调用 complete 完成写操作。方法 complete 如果返回是 false,那么,客户端需要继续调用 complete 方法。
public void reportBadBlocks(LocatedBlock[] blocks) throws IOException;

调用reportBadBlocks.

2.目录树

public boolean rename(String src, String dst) throws IOException;
更改文件名。调用 FSNamesystem 的 renameTo方法。  
 public void finalizeUpgrade() throws IOException;
finalize 一个升级,确认客户端有超级用户权限以后,调用 FSImage.finalizeUpgrade()。
public void fsync(String src, String client) throws IOException;
将文件信息持久化。调用 FSDirectory 的 persistBlocks,将文件的原信息通过 logOpenFile(path, file)写日志。
public DatanodeRegistration register(DatanodeRegistration nodeReg
 ) throws IOException
用于 DataNode 向 NameNode 登记。输入和输出参数都是 DatanodeRegistration。
public DatanodeCommand sendHeartbeat(DatanodeRegistration nodeReg,
 long capacity,
 long dfsUsed,
 long remaining,
 int xmitsInProgress,
 int xceiverCount) throws IOException
DataNode收送到 NameNode 的心跳信息。 DataNode Command支持的命令: DNA_TRANSFER :拷贝数据块到其他 DataNode DNA_INVALIDATE :删除数据块 DNA_SHUTDOWN :关闭 DataNode DNA_REGISTER :DataNode 重新注册 DNA_FINALIZE :提交升级 DNA_RECOVERBLOCK :恢复数据块

FSNamesystem.handleHeartbeat 的处理过程: 调用 getDatanode 方法找对应的 DatanodeDescriptor,保存在变量 nodeinfo(可能为 null) 中,如果现有 NameNode 上记彔的 StorageID 和请求的不一样,返回DatanodeCommand.REGISTER,让DataNode重新注册。 如果发现当前节点需要关闭(已经 isDecommissioned),抛异常 DisallowedDatanodeException。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/613292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号