分享

Hadoop_NameNode_代码分析_FSNameSystem(4)

 Chi_Way 2011-07-11

(1)FSNameSystem中的defaultPermission是创建文件时的默认设置,缺省用户为fsOwner(可以通过hadoop.job.ugi设置,否则通过whoami获得,缺省用户组为supergroup,缺省权限为0777,可以通过dfs.upgrade.permission修改。blocksMap:保存数据块到INodeDataNode的映射关系。dir:指向系统使用的FSDirectory对象,操作命名空间。datanodeMap :保存了StorageID -> DatanodeDescriptor的映射,用于保证DataNode使用的Storage的一致性。corruptReplicas :保存损坏(如:校验没通过)的数据块到对应DataNode的关系。recentInvalidateSets:保存了每个DataNode上无效但还存在的数据块(StorageID  -> ArrayList<Block>)。excessReplicateMap:保存了每个DataNode上有效,但需要删除的数据块(StorageID -> TreeSet<Block>),这种情况可能发生在一个DataNode故障后恢复后,上面的数据块在系统中副本数太多,需要删除一些数据块。neededReplications:需要进行复制的Block,多优先级队列。pendingReplications:保存正在被复制的Block,有一个线程检查复制超时的block,并把这些block放入成员timeOutItems中,超时的复制项在FSNamesystemprocessPendingReplications方法中被删除,并从新复制。

(2)Hadoop使用层次树的方式定义节点的物理位置,叶子节点作为一个数据节点,内部节点可能是一个数据中心(datacenter)或者是一个机架(rack),Node接口含有节点名和位置名,节点名使用hostname+port,比如某个节点在dog数据中心的orange机架上,那么节点的位置名就是/dog/orange,类似文件目录的命名。Hadoop中机架是最深的内部节点,机架的孩子都是叶子。getDistance返回两个Node之间的距离,Node到其父亲节点的距离定义为1,返回两个节点到最近公共祖先的距离和(因为节点上保留了层次信息,所以容易实现)。

chooseRandom接受两个String表示选择范围和排除范围,在指定范围内随机选择一个节点。DNSToSwitchMapping接口定义了从节点名到位置名转化的方法。HDFS的Block冗余策略是,第一个Block放在本地,如果writer是DataNode,否则随机放在一个DataNode上。第二个Block放在不同于第一块所在rack的DataNode上。第三个Block放在第一个Block所在rack的另外一个DataNode上。ReplicationTargetChooser用来按冗余数选择一系列的DataNode排序形成Pipe返回。

(3)NameNode实现了许多供客户远程调用的方法,方法被调用时可以通过线程本地变量来获得是谁调用了这个方法的信息。这个变量就是Server的ThreadLocal<Call>变量。

(4)getBlockLocations返回LocatedBlock信息,这个类表明一个Block是不是corrupt的,以及Block的第一个byte在文件中的offset,还有所在DataNode的数组。函数根据文件路径,offset,length返回范围内的Block,如果这个Block还有OK的备份或者全部都corrupt了。

(5)create用来创建一个新文件,权限参数的用户名是Subject.doAs方法穿过来的主体名字,而访问位是指定的,但是组为NULL。创建的是文件,如果文件的路径已经存在并且还是一个目录,则悲剧。用来做9bit位判断的主体是通过Subject.doAs方法穿过来的主体名字生成的UserGroupInformation类,如何生成的UserGroupInformation将是很重要的课题。如果用户是fsOwner或者用户组包含supergroup,那么他就是超级用户。如果对于创建操作,会通过FSDirectory的addFile往目录树上添加一个文件并在租约管理器里添加一条记录。对于append操作,执行的是构造一个新的INodeFileUnderConstruction并替换原有的节点,然后在租约管理器里添加一条记录。总的来说,最简单的create流程就是在目录树上创建一个INodeFileUnderConstruction对象并往租约管理器里添加一条记录。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多