`
sid1211
  • 浏览: 50871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Namenode 与client通信

阅读更多
   在Hadoop中,是通过自己的代码来实现RPC机制的,而不是通过sun的实现。
   Namenode中存在与Datanode通信,与client通信,近期整理了一下与Namenode与client通信的一个流程,最主要的是熟悉Namenode类,FSNamespace类,FSDirectory类,以及Namespace树状结构和BlocksMap结构。以下一一说明。
   以下是基于Cloudera h3b2版本,所以以下的接口流程也请参考相应版本。
   由于visio图贴上来很麻烦,这次先不贴用例图了.
接口流程
以下各个接口,将根据用例图加用例说明加以解释。
1. mkdir
1) 用例图

2) 用例说明
用例名称:mkdir
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode在NameSpace中增加目录
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用mkdirs()方法
           3、调用FSNameSystem中的mkdir()方法,然后调用mkdirInternal()方法,主要检验访问权限
           4、mkdirInternal()调用FSDirectory,首先查询内存中NameSpace目录树,检查是否存在该目录,如没有则调用FSDirectory中的mkdir()方法,修改内存中目录树结构
           5、返回给client Boolean值,代表添加成功与否

2. create
1) 用例图

2) 用例说明

用例名称:create
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode在NameSpace中增加文件
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用create()方法
           3、调用FSNameSystem中的startFile()方法,然后调用startFileInternal()方法用来
           4、startFileInternal ()检查safemode、有效性以及读写锁和租约等条件,随后查询内存中NameSpace目录树,检查是否存在该文件
           5、如果不存在该文件,则获取租约、生成读写锁,调用FSDirectory中的addFile(),生成一个INodeFileUnderConstruction对象,并加入到内存中目录树结构

3. setReplication
1) 用例图


2) 用例说明
用例名称:setReplicaiton
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode修改指定的INodeFile副本个数
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用setReplication()方法
           3、调用FSNameSystem中的setReplication ()方法,然后调用setReplicationInternal()方法
           4、setReplicationInternal ()调用FSDirectory查询内存中NameSpace目录树中的对应的INodeFile对象
           5、FSDirectory根据INodeFile对象设置副本数,调用FSDirectory.setReplication()获得INodeFile对象对应的block[]数组
           6、如果新设置的副本数大于原副本数则将该block数组放置于需要进行复制块的队列中,如果新设置的副本小于原副本数,则将block数组防止与需要移除块的队列中
           7、返回给client Boolean值,代表修改成功与否
4. setPermission
1) 用例图

2) 用例说明
用例名称:setPermission
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode根据提供的文件名称和权限类型来对象应的INodeFile对象修改权限
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用setPermission()方法
           3、调用FSNameSystem中的setPermission ()方法,检查safemode状态
           4、调用FSDirectory的setPermission()方法,随后调用unprotectedSetPermission()方法
           5、unprotectedSetPermission ()从内存的NameSpace目录树中的获得对应的INode对象
           6、INode对象直接设置权限,调用INode.setPermission()

5. setOwner
1) 用例图


2) 用例说明
用例名称:setOwner
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode根据提供的文件名称和用户、用户组属性来修改对应的INodeFile对象属性
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用setOwner()方法
           3、调用FSNameSystem中的setOwner ()方法, 检查safemode状态
           4、调用FSDirectory的setOwner()方法,随后调用unprotectedSetOwner ()方法
           5、unprotectedSetPermission ()从内存的NameSpace目录树中的获得对应的INode对象
           6、INode对象直接设置user 和group,调用INode.setUser(),INode.setGroup()


6. delete
1) 用例图

2) 用例说明
用例名称:delete
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode根据提供的文件名称在NameSpace中删除INode对象,并将对应的block从blocksMap中删除
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用delete()方法
           3、调用FSNameSystem中的delete ()方法,随后调用deleteInternal ()方法,检查safemode状态
           4、deleteInternal ()调用FSDirectory的delete()方法,随后调用unprotectedDelete()方法
           5、unprotectedDelete()方法递归的删除所在路径下的所有子目录和文件,调用removeChild()将对应的所有INode对象从NameSpace中删除
           6、调用FSNameSystem.removePathAndBlocks()方法将上一步INode对象对应的Block从BlocksMap中删除
           7、将所有删除的block数组放入失效数组队列中,下次心跳响应时发送给DataNode删除相应块
           8、返回boolean值提示client删除是否成功


7. rename
1) 用例图

2) 用例说明
用例名称:rename
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode根据提供的参数修改相应的目录或文件名称
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用rename()方法
           3、调用FSNameSystem中的renameTo ()方法,调用FSNameSystem的renameToInternal()方法,检查safemode和权限
           4、随后调用FSDirectory的renameTo()方法,调用unprotectedRenameTo ()方法,从内存的NameSpace目录树中的获得对应的修改文件或文件夹的父INode对象
           5、调用removeChild()方法从父INode对象中移除欲修改的文件名称对应的INode对象,并刷新原父节点INode对象存储信息
           6、调用addChild()方法将5中移除的INode对象在NameSpace建立新的目录结构
           7、返回boolean值提示client删除是否成功


8. setTimes
1) 用例图

2) 用例说明
用例名称:setTimes
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode根据提供的文件名称修改文件对应的存取时间和修改时间
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用setTimes()方法
           3、调用FSNameSystem中的setTimes ()方法, 检查safemode和权限并从NameSpace中获取对应名称的INode对象
           4、调用FSDirectory的setTimes()方法,随后调用unprotectedSetTimes ()方法
           5、unprotectedSetTimes ()根据前面获得的INode对象直接修改accessTime和ModificationTime


9. setQuota
1) 用例名

2) 用例说明
用例名称:setQuota
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode根据参数值设置目录的Quota值
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用setQuota()方法
           3、调用FSNameSystem中的setQuota ()方法,调用FSDirectory的setQuota()方法,随后调用unprotectedSetQuota()方法
           4、unprotectedSetQuota()从NameSpace中获得INode对象修改,判断是否是INodeDirectory等条件
           5、如果INodeDirectory存在quota属性,调用INodeDirectory.setQuota()方法设置,如果不存在则转化为具有quota属性INodeDirectory对象


10. getListing
1) 用例图

2) 用例说明
用例名称:getListing
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode根据提供的文件名称在NameSpace中获取相应的目录列表,并将相关信息返回给用户
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用getListing()方法
           3、调用FSNameSystem中的getListing ()方法,随后调用FSDirectory的getListing()方法
           4、根据所要的是文件还是文件夹分别处理,文件夹递归调用。对文件,则从NameSpace中查询对应的INode对象
           5、调用createFileStatus()方法根据INode对象封装成FileStatus对象
           6、将FileStatus对象返回给用户


11. getStats
1) 用例图

2) 用例说明
用例名称:getStats
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode返回给用户集群使用情况
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用getStats()方法
           3、调用FSNameSystem中的getStats ()方法,直接获取集群使用情况
           4、封装为long[]数组后返回给client


12. setSafeMode
1) 用例图


2) 用例说明
用例名称:setSafeMode
简要说明:HDFS Client通过RPC与NameNode进行通信,手动对NameNode设置safemode状态
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用setSafeMode()方法
           3、调用FSNameSystem中的setSafeMode ()方法,根据参数判定
           4、如果参数为SAFEMODE_LEAVE,则调用leaveSafeMode()退出safemode状态,如果参数是SAFEMODE_ENTER,则调用enterSafeMode(),进入safemode状态
           4、返回client 目前是否处于safemode状态


13. getFileInfo
1) 用例图


2) 用例说明
用例名称:getFileInfo
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode根据提供的文件名称在NameSpace中获取相应文件状态并返回给用户
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用getFileInfo()方法
           3、调用FSNameSystem中的getFileInfo ()方法,随后调用FSDirectory的getFileInfo()方法
           4、从NameSpace中查询对应的INode对象
           5、调用createFileStatus()方法根据INode对象封装成FileStatus对象
           6、将FileStatus对象返回给用户


14. getContentSummary
1) 用例图


2) 用例说明
用例名称:getContentSummary
简要说明:HDFS Client通过RPC与NameNode进行通信,NameNode根据提供的名称在NameSpace中获取相应文件或目录的summary
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用getContentSummary()方法
           3、调用FSNameSystem中的getContentSummary ()方法,随后调用FSDirectory的getContentSummary ()方法
           4、从NameSpace中查询对应的INode对象,调用INode的computeContentSummary()方法获得contentSummary对象
           5、将contetntSummary对象返回给用户


15. distributedUpgradeProgress
1) 用例图


2) 用例说明
用例名称:distributedUpgradeProgress
简要说明:HDFS Client通过RPC与NameNode进行通信,对HDFS升级
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用distributedUpgradeProgress ()方法
           3、调用FSNameSystem中的distributedUpgradeProgress ()方法
           4、返回client UpgradeStatusReport表示升级状态


16. finalizeUpgrade
1) 用例图


2) 用例说明
用例名称:finalizeUpgrade
简要说明:HDFS Client通过RPC与NameNode进行通信,终止对HDFS升级
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用finalizeUpgrade ()方法
           3、调用FSNameSystem中的finalizeUpgrade ()方法
           4、最后调用FSImage中的finalizeUpgrade()方法,终止对HDFS升级


17. refreshNodes
1) 用例图


2) 用例说明
用例名称:refreshNodes
简要说明:HDFS Client通过RPC与NameNode进行通信,根据配置删除有关DataNode
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用refreshNodes ()方法
           3、调用FSNameSystem中的refreshNodes ()方法,重新检查配置文件,读取DataNode列表中白名单(dfs.hosts)和黑名单(dfs.hosts.exclude),将退役的DataNode从DatanodeMap中删除
           4、 调用updateNeededReplications()函数将删除的DataNode节点中的所有block放入需增加拷贝的队列中


18. getBlockLocations
1) 用例图

2) 用例说明
用例名称:getBlockLocations
简要说明:HDFS Client通过RPC与NameNode进行通信,根据文件名称,获取其对应的blocks信息
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用getBlockLocations ()方法
           3、调用FSNameSystem中的getBlockLocations ()方法,随后调用getBlockLocationInternal()方法
           4、 从NameSpace中获取文件名称对应的INode对象,并根据读取位置(long offset),读取长度(long length)定位到相应的block,从BlocksMap结构中查询所需的block对象
           5、最后将文件名称,block位置和大小等封装为LocatedBlocks对象,返回给用户


19. append
1) 用例图


2) 用例说明
用例名称:append
简要说明:HDFS Client通过RPC与NameNode进行通信,根据欲追加(append)的文件名称,返回给client对应文件最后一个块的信息
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用append ()方法
           3、调用FSNameSystem中的appendFile ()方法,随后调用startFileInternal()方法
           4、startFileInternal()根据文件名称,将该文件转化为INodeFileUnderConstruction状态,获取读写锁等
           5、调用FSDirectory的replaceINode()方法,改变NameSpace中该文件状态
           6、 随后appendFile()方法从blocksMap中获得该INode对象的block的相关信息,包括block location等
           7、最后将文件名称,block位置和大小等封装为LocatedBlocks对象,返回给用户


20. abandonBlock
1) 用例图

2) 用例说明
用例名称:abandonBlock
简要说明:HDFS Client通过RPC与NameNode进行通信,根据参数删除对应block对象
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用abandonBlock ()方法
           3、调用FSNameSystem中的abandonBlock ()方法,随后调用FSDirectory的abandonBlock()方法
           4、adandonBlock()从NameSpace中得到INodeFile对象,删除对应的block,同时从blocksMap中删除对应的block
           5、如果该block在corruptReplicas队列中,则从中移除


21. addBlock
1) 用例图

2) 用例说明

用例名称:addBlock
简要说明:HDFS Client通过RPC与NameNode进行通信,根据文件名称向已有的文件增加一个块
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用addBlock ()方法
           3、调用FSNameSystem中的getAdditionalBlock ()方法,对该INodeFile对象申请读写锁,转化为INodeFileUnderConstruction对象,调用ReplicationTargetChooser的chooseTarget为新增的block选择Datanode位置
           4、随后调用allocateBlock(),new 一个block,验证正确性,调用FSDirectory的addBlock()方法
           5、SDirectory的addBlock()方法更新内存中NameSpace和blocksMap状态即向blocksMap中注册该block及INodeFile,并将该block添加到INodeFile的block[]数组中,
           6、最后将该block信息,写入的datanode位置等封装为LocatedBlocks对象,返回给client,client接收后按照datanode位置直接与datanode通信


22. complete
1) 用例图

2) 用例说明
用例名称:complete
简要说明:HDFS Client完成写操作后,通过RPC与NameNode进行通信,将写入的文件状态从INodeFileUnderConstruction转换为INodeFile
流程说明: 1、client完成写操作后与NameNode进行RPC通信
           2、NameNode调用complete ()方法
           3、调用FSNameSystem中的completeFile ()方法,调用completeFileInternal()方法
           4、调用FSDirectory的getFileBlocks()方法,查询该文件的block是否存在
           5、如果block不存在则OPERATION_FAILED,如果正在复制中则返回STILL_WAITING,已经存在则返回COMPLETE_SUCCESS
           5、若复制成功,则将文件状态从INodeFileUnderConstruction转换为INode
           6、最后将该操作成功与否返回给client


23. reportBadBlocks
1) 用例图

2) 用例说明
用例名称:reportBadBlock
简要说明:HDFS Client通过RPC与NameNode进行通信,将损坏的block信息提交
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用reportBadBlocks()方法
           3、调用FSNameSystem中的markBlockAsCorrupt ()方法,从blocksMap中获得对应的blockInfo
           4、从NameSpace中查询该block对应的INode,如果该INode对象不存在,则调用addToInvalidates将该block放入失效队列中,如果该INode对象存在,则调用addToCorruptReplicasMap()放入损坏队列中


24. renewLease
1) 用例图

2) 用例说明
用例名称:reportBadBlock
简要说明:HDFS Client通过RPC与NameNode进行通信,续签租约
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用renewLease()方法
           3、调用FSNameSystem中的renewLease()方法,调用LeaseManager的renewLease()方法进行续签租约等操作


25. getDatanodeReport
1) 用例图

2) 用例说明
用例名称:getDatanodeReport
简要说明:HDFS Client通过RPC与NameNode进行通信,根据参数获得不同状态下的Datanode信息
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用getDatanodeReport ()方法
           3、调用FSNameSystem中的datanodeReport()方法,随后调用getDatanodeListForReport()方法
           4、首先从列表中获得所有白名单与黑名单中的datanode,然后遍历datanodeMap,根据参数选择返回的是live状态还是dead状态的datanode
           5、将Datanode的信息封装为DatanodeInfo,返回给用户


26. getPreferredBlockSize
1) 用例图

2) 用例说明
用例名称:getPreferredBlockSize
简要说明:HDFS Client通过RPC与NameNode进行通信,根据文件名称获得preferred block size
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用getPreferredBlockSize ()方法
           3、调用FSNameSystem中的getPreferredBlockSize()方法,随后调用FSDirectory的getPreferredBlockSize()方法
           4、FSDirectory的getPreferredBlockSize()方法从NameSpace中查询出该文件名称对应的INode对象,如果是目录则返回一场,如果是文件直接调用INodeFile的getPreferredBlockSize()方法
           5、将preferred block size返回给client


27. saveNamespace
1) 用例图

2) 用例说明
用例名称:saveNamespace
简要说明:HDFS Client通过RPC与NameNode进行通信,将内存中的目录树存储至硬盘
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用saveNamespace ()方法
           3、调用FSNameSystem中的saveNamespace ()方法,随后调用FSImage的saveFSImage ()方法
           4、FSImage的saveFSImage ()方法将内存中的目录是刷新到硬盘中生成新的editlog等操作


28. metaSave
1) 用例图


2) 用例说明
用例名称:metaSave
简要说明:HDFS Client通过RPC与NameNode进行通信,将NameNode中的一些元数据存储至硬盘
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用metaSave ()方法
           3、调用FSNameSystem中的metaSave()方法,根据指定文件名称或者默认的hadoop.log.dir配置中选择存储路径
           4、将以下信息:datanode信息,等待被复制的块队列,正在被复制的块队列,无效块队列中的所有块信息写入到硬盘中


29. fsync
1) 用例图

2) 用例说明
用例名称:fsync
简要说明:HDFS Client通过RPC与NameNode进行通信,将指定文件所有元数据包括块信息等写入editlog
流程说明: 1、client与NameNode进行RPC通信
           2、NameNode调用fsync ()方法
           3、调用FSNameSystem中的fsync()方法,从NameSpace中获得INode对象,调用FSDirectory的persistBlocks()方法,调用FSEditLog的logOpenFile
           4、将INode所有元信息写入editLog
分享到:
评论

相关推荐

    HDFS之NameNode分析

    大家都知道HDFS的架构由NameNode,SecondaryNameNode和DataNodes组成,其源码类图如下图所示:正如上图所示,NameNode和DataNode继承了很多的protocol用于彼此间的通信,其实nameNode还实现了...实现了ClientProtocol...

    大数据面试题-.docx

    DataNode 通过长连接与 NameNode 保持通信。( ) 23. Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。( ) 24. Slave 节点要存储数据,所以它的磁盘越大越好。( ) 25. hadoop dfsadmin –report 命令用于...

    大数据面试题.doc

    DataNode 通过长连接与 NameNode 保持通信。( ) 23. Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。( ) 24. Slave 节点要存储数据,所以它的磁盘越大越好。( ) 25. hadoop dfsadmin –report 命令用于...

    大数据面试题(1).doc

    DataNode 通过长连接与 NameNode 保持通信。( ) 23. Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。( ) 24. Slave 节点要存储数据,所以它的磁盘越大越好。( ) 25. hadoop dfsadmin –report 命令用于...

    大数据面试题.docx

    DataNode 通过长连接与 NameNode 保持通信。( ) 大数据面试题全文共16页,当前为第4页。23. Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。( ) 大数据面试题全文共16页,当前为第4页。 24. Slave 节点...

    大数据面试题(1).docx

    DataNode 通过长连接与 NameNode 保持通信。( ) 23. Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。( ) 24. Slave 节点要存储数据,所以它的磁盘越大越好。( ) 25. hadoop dfsadmin –report 命令用于...

    大数据平台常见面试题.pdf

    TaskTracker 主动与 JobTracker 通信,接收作业,并负责直接执⾏每⼀个任务。 TaskTracker 都需要运⾏在 HDFS 的 DataNode 上 4. HDFS 默认 Block Size a)32MB b)64MB c)128MB 注:旧版本是64MB 5. Client 端上传⽂...

    大数据开发技术.pdf

    跟 namenode 通信查询元数据,找到文件块所在的 datanode 服务 器 2.挑选一台 datanode(就近原则,然后随机)服务器,请求建立 socket 流 3.datanode 开始发送数据(从磁盘里面读取数据放入流, 以 packet 为单位...

    hdfs源码.zip

    1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 1.2.2 流式接口 20 1.3 HDFS主要流程 22 1.3.1 HDFS客户端读流程 22 1.3.2 HDFS客户端写流程 24 1.3.3 HDFS客户端追加写流程 25 1.3.4 Datanode启动、心跳...

    2017最新大数据架构师精英课程

    28_qq消息通信-群聊-手动刷新好友列表-下线通知0 P+ D" ]/ f. q* O! d9 Z& L 29_qq消息通信-群聊-私聊消息' a3 S6 a2 d+ Y6 s( Z 30_qq消息通信-群聊-私聊消息2 31_虚拟机内存结构-反射 32_虚拟机内存结构-JVM-$ j; ...

Global site tag (gtag.js) - Google Analytics