一种Hadoop分布式文件系统及其管理方法_3

文档序号:8299032阅读:来源:国知局
ublic int CountNumOfAvaiIableNodes(String scope,
[0101]String excludedScope,
[0102]Collect1n〈Node>excludedNodes)
[0103]该API 用于获得在 scope 内但不在 excludedScope 和 excludedNodes 中的DataNode节点的个数。基于新的网络拓扑结构树,可以将scope指定为机房dl,excludedScope指定为机房dl中的机架rackl, excludedNodes表不scope范围内块副本不应存放的DataNode。
[0104].public Node chooseRandom(String scope, String excludedScope)
[0105]该API用于选择在scope范围内但不在excludedScope中的一个DataNode,其中的参数scope、excludedScope均可以为机房。
[0106].public void pseudoSortByDistance(Node reader, Node[]nodes)
[0107]该API用于根据读取者(reader)在 local node> local rack与 local datacenter对nodes数组进行排序,其中,local node表示:reader和datanode在同一个节点上。local rack 表不:reader 和 datanode 在同一个机架上。local datacenter 表不:reader和datanode在同一个机房内。local datacenter为新增参数。
[0108]相应地,本实施例还提供了一种跨机房的Hadoop分布式文件系统,如图4所示,包括:
[0109]拓扑管理模块11,用于在创建HDFS的树形网络拓扑结构时,在代表集群的根节点和代表机架的第二层节点之间增加代表机房的第一层节点。
[0110]副本配置模块12,用于在创建跨机房文件时,配置多个机房存放该文件的块副本,并为其中的每一机房配置存放的副本数。
[0111]副本存放模块13,用于在多个机房存放跨机房文件时,对其中的每一机房,按照为该机房配置的所述副本数,选择相同数目的数据节点存放所述块副本。
[0112]较佳地,副本配置模块12指定多个机房来存放该文件的块副本,包括:配置该文件的文件路径对应的多个机房,使用所述文件路径对应的多个机房存放该文件的块副本。
[0113]较佳地,副本配置模块12指定多个机房来存放该文件的块副本时,优先指定用户所在的机房;
[0114]较佳地,副本配置模块12为其中的每一机房配置存放的副本数,包括:在创建该文件时或调用DFSClient.setReplicat1n时指定主机房存放的副本数,通过配置文件指定其他机房存放的副本数。
[0115]可选地,本实施例的Hadoop分布式文件系统还可以包括:
[0116]编程接口模块,用于基于所述树形网络拓扑结构,在已有应用程序编程接口 API中将机房作为新增参数,并增加以下API中的一种或多种以感知机房信息:
[0117]获得机房包含的机架个数的API ;
[0118]判断一个机房是否包含某一节点的API ;
[0119]获得一个机房包含了多少个数据节点的API ;
[0120]获得数据节点所在的机房的名称的API ;
[0121]检测两个数据节点是否在同一个机房的API。
[0122]本实施例在创建HDFS网络拓扑结构树时,增加了代表机房的一层节点,可以根据可靠性、节约带宽资源等策略,选择合适的机房配置跨机房文件的副本数并和存放块副本。
[0123]实施例二
[0124]在HDFS运行过程中,存放副本的DataNode可能死掉,死掉后又可能重启,因而块副本的个数可能会小于或多于配置的要求。如块副本个数小于要求的个数,block为under状态,如块副本个数大于要求的个数,block为over状态。对块副本维护时,当实际存放的块副本的个数小于配置的副本数时要复制块副本,当实际存放的块副本的个数大于配置的副本数时要将多出的块副本进行删除。
[0125]已有HDFS方案中判断block是否为under或over状态时,是根据集群中块副本的总个数来判断的,不能满足机房内副本数的配置要求。
[0126]基于实施例一的网络拓扑结构树和对跨机房文件的块副本进行配置、存放的方法,本实施例提供了一种对所述跨机房文件的块副本进行维护的方法,如图5所示,包括:
[0127]步骤210,确定存放有所述块副本的所有机房和其中每一机房的实际存放数;
[0128]存放块副本的数据节点和所属的机房可以根据存放时的记录来确定。
[0129]步骤220,对每一机房,如实际存放数不等于为该机房配置的所述副本数,在该机房内对所述块副本进行复制或删除,使实际存放数等于配置的所述副本数。
[0130]为机房配置的所述副本数见实施例一中的说明。本步骤中,在机房内对所述块副本进行复制时,为了减少跨机房的带宽的占用,较佳选择同一个机房内存放有所述块副本的DataNode作为源进行复制工作。
[0131]下面通过一个示例进行说明:
[0132]假定,配置内容为”/group/user, txt dc2:3”,即机房dc2存放该文件的3个块副本,另外,为主机房del配置的块副本个数为3。则期望的块副本总个数为6,维护时要分别判断每个机房内存放的块副本个数是否达到配置的要求。
[0133]如机房del和dc2都实际存放有3个块副本,并且存储的块副本总数也为6,则block的块副本分布是满足要求的。
[0134]如del中实际存放的块副本个数为3,dc2中实际存放的块副本个数小于3,则block为under状态,需要在dc2中复制一个新的块副本。
[0135]如del中实际存放的块副本个数大于3,dc2中实际存放的块副本个数为3,则block为over状态,需要对del机房内多余的副本进行删除。
[0136]如del中实际存放的块副本个数为4,dc2中实际存放的块副本个数为2,虽然块副本总数为6,但del多存放了一个副本,dc2少存放了一个副本,则该block即是over状态也是under状态,需要从del中删除一个块副本,并且在dc2中复制一个新的块副本。
[0137]相应地,本实施例HDFS系统在实施例一包含的模块的基础上,还包括:
[0138]副本维护模块,用于对所述跨机房文件的块副本进行维护时,先确定存放有所述块副本的所有机房和其中每一机房的实际存放数;对每一机房,如实际存放数不等于为该机房配置的所述副本数,则在该机房内对所述块副本进行复制或删除以使实际存放数等于配置的所述副本数。较佳地,对所述块副本进行复制时,优先将同一个机房内存放有所述块副本的数据节点作为源。
[0139]实施例三
[0140]本实施例在实施例一的基础上,提供了一种用户读取数据的方法,要尽量选择与用户同一个机房内的块副本进行数据读取,以便减少跨机房网络带宽的占用。这个过程需要考虑存放块副本的DataNode与用户之间的距离,选择一个离用户最近的DataNode进行数据读取。
[0141]选取DataNode的顺序如下:
[0142]如果用户所在DataNode存放有要读取的块副本,则选择本地的DataNode ;
[0143]如果用户所在机架内的DataNode存放有所述块副本,则随机选择这个机架内存放有所述块副本的一个DataNode。
[0144]如果用户所在机房内的DataNode存放有所述块副本,则随
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1