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

Hadoop源码分析(十)

Hadoop源码分析(十)

2021SC@SDUSC

1.NameNode上的线程

 Daemon hbthread = null; // HeartbeatMonitor thread
 public Daemon lmthread = null; // LeaseMonitor thread
 Daemon smmthread = null; // SafeModeMonitor thread
 public Daemon replthread = null; // Replication thread
 private Daemon dnthread = null;
PendingReplicationBlocks 中也有一个线程:
Daemon timerThread = null;
心跳线程用于对 DataNode 的心态进行检查,以间隔 heartbeatRecheckInterval 运行 heartbeatCheck 方法。如果在一定时间内没收到 DataNode 的心跳信息,我们就认为该节点已经死掉,调用 removeDatanode将 DataNode 标记为无效。
void recoverCreate(Collection dataDirs,
 Collection editsDirs) throws IOException
和 FSImage.coverTransitionRead 类似,用于分析现有目录,创建目录并从可能的错误中恢复。
private void doMerge(CheckpointSignature sig) throws IOException
doMerge 被类 SecondaryNameNode 的同名方法调用。 2.Secondary NameNode 成员变量:
private CheckpointStorage checkpointImage;
Secondary NameNode 使用的 Storage
private NamenodeProtocol namenode;
和 NameNode 通信的接口
private HttpServer infoServer;
传输文件用的 HTTP 服务器 main 方法是 Secondary NameNode 的入口,它最终启动线程,执行 SecondaryNameNode 的 run。启动前的对SecondaryNameNode 的构造过程也简单,主要是创建和 NameNode 通信的接口和启动 HTTP 服务器。SecondaryNameNode 的 run 方法每隔一段时间执行 doCheckpoint(),从 NameNode 的主要工作都在这一个方法里。 newBlockReader 最复杂的请求:
 public static BlockReader newBlockReader( Socket sock, String file,
 long blockId, 
 long genStamp,
 long startOffset, long len,
 int bufferSize, boolean verifyChecksum,
 String clientName)
 throws IOException
其中,sock 为到 DataNode 的 socket 连接,file 是文件名(只是用于日志输出) 该方法会和 DataNode 进行对话,收送上面的读数据块的请求,处理应答并构造 BlockReader 对象。 DFSInputStream,它封装了 DFSClient 读文件内容的功能。在它的内部,不但要处理和 NameNode 的通信,同时通过 BlockReader,处理和 DataNode 的交互。 DFSInputStream 记彔 Block 的成员变量:
private LocatedBlocks locatedBlocks = null;
不但保持了文件对应的 Block 序列,还保持了管理 Block 的 DataNode 的信息,DFSInputStream 中最重要的成员变量。 DFSInputStream 的构造函数,通过类内部的 openInfo 方法,获取这个变量的值。openInfo 间接调用了 NameNode 的 getBlockLocations,获取 LocatedBlocks。
synchronized List getAllBlocks() throws IOException
 private LocatedBlock getBlockAt(long offset) throws IOException
 private synchronized List getBlockRange(long offset,
 long length)
 private synchronized DatanodeInfo blockSeekTo(long target) throws IOException
在打开到 DataNode 前, blockSeekTo 会调用 chooseDataNode,选择一个现在活着的 DataNode。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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