Hdfs写入方法及装置的制造方法

文档序号:10488112
Hdfs写入方法及装置的制造方法
【专利摘要】本发明实施例提供一种HDFS写入方法及装置。第一服务器发起数据写入请求,将所述数据的第一个副本写入所述第一服务器;读取所述第一服务器的预设分组标签,并根据所述分组标签判断所述第一服务器所属的分组;将所述数据的第二个副本写入第二服务器上,将所述数据的第三个副本写入第三服务器上;其中,第二服务器与所述第一服务器为跨接入交换机的同一分组服务器,所述第三服务器与所述第二服务器为接入同一个接入交换机的同一分组服务器;将所述第二个副本或所述第三个副本中的任意一个迁移至第四服务器,其中所述第四服务器与所述第一服务器为不同分组服务器。实现了高效率、低代价的HDFS数据写入。
【专利说明】
HDFS写入方法及装置
技术领域
[0001]本发明实施例涉及数据处理技术领域,尤其涉及一种HDFS写入方法及装置。
【背景技术】
[0002]基于HDFS(HadoopDistributed File System,Hadoop分布式文件系统)的大数据分布式存储集群,服务器连接接入交换机,接入交换机连接核心交换机。接入交换机有48个下行端口,最多可以连接48台服务器,带宽为lOGbits/s。接入交换机有2个上行端口,分别连接两个核心交换机,以防止单个核心交换机故障导致整个集群不可用,每个上行端口带宽为40Gbits/s,共80Gbits/s。核心交换机有48个下行口。这样一套核心交换机下最多有48*48 = 2304台服务器。这一套包含两台核心交换机的流量最大为3840Gbits/s。
[0003]Hadoop的默认的架构中,数据打到Hadoop集群上时,默认在第一个交换机下选择一台服务器进行数据的存储,在第二个交换机上选择两台服务器进行数据的存储。其目的在于,平衡数据的安全性和效率。如果数据写入线程所在的服务器是一台数据节点,并且数据副本数为3,基于安全和效率的考虑如下:
[0004]如果数据只存储在一台服务器的3块硬盘上,不产生网络流量,这样效率最高,但是如果这台服务器发生故障,那么数据不能读出。
[0005]如果数据存储在同一交换机下的3台服务器上,那么只有接入交换机产生流量,不会产生跨交换机流量。这样效率也较高,能容忍任何2台服务器故障,但是如果接入交换机发生故障,数据还是不能读出。
[0006]数据存储在3个交换机下的3台服务器上,能够容忍任何2台接入交换机故障,安全性最高。但是产生的跨交换机流量是存储数据量的2倍,效率较低。
[0007]数据存储在2个交换机下的3台服务器上,第一个交换机下的服务器存储第一个副本,第二个交换机下的2台服务器存储第2和第3个副本。这样能够容忍任何两台服务器故障,或者任意I台接入交换机故障,产生的跨交换机流量是存储数据量的I倍,效率和安全性达到平衡。这一方案是现有技术中,Hadoop的默认实现方式。
[0008]然而,对于远远超过2304台的超大规模的HDFS集群,肯定存在超过两套核心交换机。按照现有的Hadoop的默认实现方式中,数据存储在2个交换机下的3台服务器上,第一个交换机下的服务器存储第一个副本,第二个交换机下的2台服务器存储第2和第3个副本,则第二个副本和第三个副本有很大的可能性是保存在跨核心交换机的接入交换机下的,即第一个交换机和第二个交换机之间可能是跨核心交换机的,这种跨核心交换机的概率取决于两台核心交换机下接入交换机的数量,若两台核心交换机下的接入交换机数量相同,则这种跨核心交换机的概率可能是50%。而跨核心交换机的网络带宽远低于3840Gbits/s,因此数据存储时因跨核心交换机概率的存在而可能导致数据写入效率低,因此,上述方式中将数据存储在2个接入交换机下的3台服务器上并不适用于超大规模的HDFS集群。

【发明内容】

[0009]本发明实施例提供一种HDFS写入方法及装置,用以解决现有技术中HDFS集群包含多个核心交换机时,数据的写入存在一定概率写入跨核心交换机服务器的低效率缺陷,实现高效率、低代价的HDFS数据写入。
[0010]本发明实施例提供一种HDFS写入方法,包括:
[0011 ]第一服务器发起数据写入请求,将所述数据的第一个副本写入所述第一服务器;
[0012]读取所述第一服务器的预设分组标签,并根据所述分组标签判断所述第一服务器所属的分组;
[0013]将所述数据的第二个副本写入第二服务器上,将所述数据的第三个副本写入第三服务器上;其中,第二服务器与所述第一服务器为跨接入交换机的同一分组服务器,所述第三服务器与所述第二服务器为接入同一个接入交换机的同一分组服务器;
[0014]将所述第二个副本或所述第三个副本中的任意一个迀移至第四服务器,其中所述第四服务器与所述第一服务器为不同分组服务器。本发明实施例提供一种HDFS写入方法装置,包括:
[0015]写数据模块,用于当第一服务器发起数据写入请求,将所述数据的第一个副本写入所述第一服务器;
[0016]分组判断模块,用于读取所述第一服务器的预设分组标签,并根据所述分组标签判断所述第一服务器所属的分组;
[0017]写数据模块,用于将所述数据的第二个副本写入第二服务器上,将所述数据的第三个副本写入第三服务器上;其中,第二服务器与所述第一服务器为跨接入交换机的同一分组服务器,所述第三服务器与所述第二服务器为接入同一个接入交换机的同一分组服务器;
[0018]迀移模块,用于将所述第二个副本或所述第三个副本中的任意一个迀移至第四服务器,其中所述第四服务器与所述第一服务器为不同分组服务器。
[0019]本发明实施例提供的HDFS写入方法及装置,在HDFS集群中包含至少两台核心交换机时,通过将数据存储在同一核心交换机的2个接入交换机下的3台服务器,并在数据存储完成后启动线程将存储于同一接入交换机下的两个数据副本之一迀移到跨核心交换机的另一服务器,改变了现有技术中,进行HDFS写入时有可能将数据写入跨核心交换机的三台服务器的低效率,实现了高效率、低代价的HDFS数据写入。
【附图说明】
[0020]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0021]图1为本申请实施例一的技术流程图;
[0022]图2为本申请实施例二的技术流程图;
[0023]图3为本申请实施例三的装置结构示意图。
【具体实施方式】
[0024]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0025]图1是本申请实施例一的技术流程图,结合图1,本申请实施例一种HDFS写入方法,可由如下的步骤实现:
[0026]步骤S110:第一服务器发起数据写入请求,将所述数据的第一个副本写入所述第一服务器;
[0027]步骤S120:读取所述第一服务器预设分组标签,并根据所述分组标签判断所述第一服务器所属的分组;
[0028]步骤S130:将所述数据的第二个副本写入第二服务器上,将所述数据的第三个副本写入第三服务器上;
[0029]步骤S140:将所述第二个副本或所述第三个副本中的任意一个迀移至第四服务器,其中所述第四服务器与所述第一服务器为不同分组服务器。
[0030]本申请实施例的技术方案尤其适用于以下场景,即数据写入线程所在的服务器是一台数据节点服务器(datanode),且数据的副本数量为3。
[0031]需要说明的是,HDFS是一个主从结构,一个HDFS集群包含一个名字节点(namenode),它是一个管理文件命名空间和调节客户端访问文件的主服务器,当然还有一些数据节点(datanode),通常是一个节点一个机器,它来管理对应节点的存储。HDFS对外开放文件命名空间并允许用户数据以文件形式存储。
[0032]HDFS集群的内部机制是将一个文件分割成一个或多个块,这些块被存储在一组数据节点中。名字节点用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。它同时确定块与数据节点的映射。数据节点负责来自文件系统客户的读写请求以及执行块的创建,删除,和来自名字节点的块复制指令。
[0033]具体的,在步骤SllO中,当检测到HDFS集群中的任意一个服务器发起数据写入请求时,首先将这一数据请求的第一个副本写入发起请求的服务器本身。
[0034]在步骤S120中,所述预设分组标签是预先根据HDFS集群的结构进行分组然后标签化处理得到的分组标签。具体分组规则是,按照每一服务器接入的核心交换机对HDFS集群中的每一所述服务器进行分组,并按照所述分组的结果对每一所述服务器进行分组标签化处理。
[0035]例如,某一机房中,包含有两套核心交换机,每套核心交换机下分别接入一定数量的接入交换机以及服务器,则按照核心交换机的数量以及接入关系,可以将所有的服务器分为两个分组,即接入第一套核心交换机的服务器为一个分组,接入第二套核心交换的服务器为另一个分组。本申请实施例中,分别为每一个分组中的服务器进行标签化处理,例如,一个分组中,将每一服务器的分组标签设为LabelA,另一分组中,将每一服务器的分组标签设为Labe IB。
[0036]当HDFS集群中,任意一个服务器发起数据写入请求时,首先读取发起数据写入请求的服务器所带有的分组标签,根据这一服务器所属的分组确定其所接入的核心交换机是哪一个。
[0037]具体的,在步骤S130中,第二服务器与所述第一服务器为跨接入交换机的同一分组服务器,所述第三服务器与所述第二服务器为接入同一个接入交换机的同一分组服务器。
[0038]所述第一服务器、所述第二服务器以及所述第三服务器具有相同的分组标签,即所述第一服务器、所述第二服务器以及所述第三服务器接入在同一套核心交换机下。所述第一服务器、所述第二服务器以及所述第三服务器中都存有所述数据的一个副本,在不跨核心交换机的情况下节省了数据传输流量。
[0039]承接步骤S120中的例子,假设发起数据写入请求的第一服务器的分组标签为LabelA,且其接入在接入交换机A下,则将所述第二个副本写入分组标签为LabelA,且没有接入在所述接入交换机A下的任意一个服务器,此处假设本实施例中,第二个副本写入所述接入交换机B的任意一台服务器中,此服务器作为第二服务器,将所述第三个副本写入所述接入交换机B的任意一台服务器中,此服务器作为第三服务器。这样数据写入时,不会产生跨核心交换机流量,写入效率高,同时也能容忍传统方式的任何一台接入交换机出现故障。
[0040]在步骤S140中,将第三个副本或者第四个副本中的任意一个迀移至第四服务器,具体实现过程如下:
[0041]启动线程从预先建立的异步队列里读取数据块,并查询所述数据块的第二个副本或第三个副本对应的服务器以及所述服务器对应的接入交换机;
[0042]将所述接入交换机下的存有的所述第二个副本或所述第三个副本中的任意一个转移至另一分组的所述第四服务器。
[0043]其中,所述预先建立的异步队列中,根据名字节点将所述数据对应的数据块以及所述第一个副本的存储地址、所述第二个副本的存储地址、所述第三个副本的存储地址存入所述预先建立的异步队列。
[0044]所述第四服务器和所述第一服务器、第二服务器、第三服务器具有不同的分组标签,即所述第四服务器属于另一套核心交换机,承接上述例子,第四服务器的分组标签可以是Label-B0
[0045]需要说明的是,本申请实施例中,选择第二个副本或三个副本中的其中一个进行迀移而不是选择第一个副本进行迀移,其优势在于,若选择第一个副本,那么第一个副本迀移走后,剩余的第二个副本和第三个副本将存储在Iabel-A标签的同一个接入交换机下,当这个接入交换机发生故障,并且Iabel-A中的服务器有读此数据块的请求时,只能够从Iabel-B标签的服务器中读取,跨核心交换机读取数据花费的代价非常大。
[0046]本申请实施例中,启动线程从预先建立的异步队列里读取数据块,具体还需根据HDFS集群中的每一所述服务器的带宽以及跨核心交换机的带宽进行线程数量的设置。
[0047]通常,服务器的带宽为lOGbit/s,由于接入交换机到核心交换机的带宽总和远远大于跨核心交换机的带宽,所以接入交换机到核心交换机不会产生瓶颈。由于跨核心交换机的带宽为160Gbit/s,所以在线程池中设置16个线程即可充分使用跨核心交换机带宽进行副本的迀移。
[0048]本实施例中,在HDFS集群中包含至少两台核心交换机时,通过服务器的标签强制将数据存储在同一核心交换机的2个接入交换机下的3台服务器,并在数据存储完成后启动线程将存储于同一接入交换机下的两个数据副本之一迀移到跨核心交换机的另一服务器,改变了现有技术中,进行HDFS写入时有可能将数据写入跨核心交换机的三台服务器的低效率,实现了高效率、低代价的HDFS数据写入。
[0049]图2是本申请实施例二的技术流程图,结合图2,本申请实施例一种HDFS写入方法,可由如下的步骤实现:
[0050]步骤S210:按照每一服务器接入的核心交换机对HDFS集群中的每一所述服务器进行分组,并按照所述分组的结果对每一所述服务器进行分组标签化处理;
[0051]步骤S220:第一服务器发起数据写入请求,将所述数据的第一个副本写入所述第一服务器;
[0052]步骤S230:读取所述第一服务器的预设分组标签,并根据所述分组标签判断所述第一服务器所属的分组;
[0053]步骤S240:将所述数据的第二个副本写入第二服务器上,将所述数据的第三个副本写入第三服务器上;
[0054]步骤S250:启动线程从预先建立的异步队列里读取数据块,并查询所述数据块的第二个副本或第三个副本对应的服务器以及所述服务器对应的接入交换机;
[0055]步骤S260:将所述接入交换机下的存有的所述第二个副本或所述第三个副本中的任意一个转移至另一分组的所述第四服务器,其中所述第四服务器与所述第一服务器为不同分组服务器。
[0056]本实施例中,在HDFS集群中包含至少两台核心交换机时,通过服务器的标签强制将数据存储在同一核心交换机的2个接入交换机下的3台服务器,并在数据存储完成后启动线程将存储于同一接入交换机下的两个数据副本之一迀移到跨核心交换机的另一服务器,改变了现有技术中,进行HDFS写入时有可能将数据写入跨核心交换机的三台服务器的低效率,实现了高效率、低代价的HDFS数据写入。
[0057]图3是本申请实施例三的装置结构示意图,结合图3,本申请一种HDFS写入装置,包括如下的模块:
[0058]写数据模块310,用于当第一服务器发起数据写入请求,将所述数据的第一个副本写入所述第一服务器;
[0059]分组判断模块320,用于读取所述第一服务器的预设分组标签,并根据所述分组标签判断所述第一服务器所属的分组;
[0060]写数据模块310,还用于将所述数据的第二个副本写入第二服务器上,将所述数据的第三个副本写入第三服务器上;其中,所述第二服务器与所述第一服务器为跨接入交换机的同一分组服务器,所述第三服务器与所述第二服务器为接入同一个接入交换机的同一分组服务器;
[0061]迀移模块330,用于将所述第二个副本或所述第三个副本中的任意一个迀移至第四服务器,其中所述第四服务器与所述第一服务器为不同分组服务器。
[0062]其中,所述装置还包括预处理模块340,所述预处理模块340用于:按照每一服务器接入的核心交换机对HDFS集群中的每一所述服务器进行分组,并按照所述分组的结果对每一所述服务器进行分组标签化处理。
[0063]其中,所述迀移模块330具体用于:启动线程从预先建立的异步队列里读取数据块,并查询所述数据块的第二个副本或第三个副本对应的服务器以及所述服务器对应的接入交换机;将所述接入交换机下的存有的所述第二个副本或所述第三个副本中的任意一个转移至另一分组的所述第四服务器。
[0064]其中,所述迀移模块330具体用于:预先建立异步队列,根据名字节点将所述数据对应的数据块以及所述第一个副本的存储地址、所述第二个副本的存储地址、所述第三个副本的存储地址存入所述预先建立的异步队列。
[0065]图3所示装置可以执行图1以及图2所示实施例的方法,实现原理和技术效果参考图1或图2所示实施例,不再赘述。
[0066]应用实例
[0067]以下部分结合一个具体的应用场景,以一个实际的例子对本申请实施例进行进一步地阐述。
[0068]在一个超大规模的HDFS集群中,存在有4608台服务器,即存在两套套核心交换机,每一套核心交换机包含两台核心交换机,每一套核心交换机下接入48台接入交换机,每一台计入交换机下连接48台台服务器。
[0069]把所有的服务器按所在的核心交换机进行分组,每一组的服务器打相同的标签,如现在有4608台服务器,分布在2套核心交换机下,每套核心交换机下有2304台服务器,两套核心交换机之间的带宽为160Gbit/s。第一套核心交换机下的服务器的标签都为Iabel-A,第二套核心交换机下的标签都为label-B。
[0070]假如现在Iabel-A的一台服务器发出写数据请求,则将数据的第一个副本写在本服务器,第二个副本写在标签为Iabel-A的另一台接入交换机下面的一台服务器上,第三个副本也在和第二个副本同一个交换机下的另一台服务器上。这样数据写入时,不会产生跨核心交换机流量,写入效率高,同时也能容忍传统方式的任何一台交换机故障。
[0071 ]在数据块写入完成后,该数据块以及它的3个副本的地址被namenode (名字节点)放以一个异步队列(wait_replicate_queue)里。建立线程池,启动线程一次从wait_replicate_queue队列里取一个数据块,并找到数据块对应的3个副本对应的服务器,然后找出服务器对应的交换机。把交换机下有2个副本中的一个副本移动后Iabel-B的任意一台服务器上,即完成了 HDFS的数据写入。
[0072]以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0073]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)执行各个实施例或者实施例的某些部分所述的方法。
[0074]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
【主权项】
1.一种HDFS写入方法,其特征在于,包括如下的步骤: 第一服务器发起数据写入请求,将所述数据的第一个副本写入所述第一服务器; 读取所述第一服务器的预设分组标签,并根据所述分组标签判断所述第一服务器所属的分组; 将所述数据的第二个副本写入第二服务器上,将所述数据的第三个副本写入第三服务器上;其中,所述第二服务器与所述第一服务器为跨接入交换机的同一分组服务器,所述第三服务器与所述第二服务器为接入同一个接入交换机的同一分组服务器; 将所述第二个副本或所述第三个副本中的任意一个迀移至第四服务器,其中所述第四服务器与所述第一服务器为不同分组服务器。2.根据权利要求1所述的方法,其特征在于,所述预设分组标签包括: 按照每一服务器接入的核心交换机对HDFS集群中的每一所述服务器进行分组,并按照所述分组的结果对每一所述服务器进行分组标签化处理。3.根据权利要求1所述的方法,其特征在于,将所述第二个副本或所述第三个副本中的任意一个迀移至第四服务器,具体包括: 启动线程从预先建立的异步队列里读取数据块,并查询所述数据块的第二个副本或第三个副本对应的服务器以及所述服务器对应的接入交换机; 将所述接入交换机下的存有的所述第二个副本或所述第三个副本中的任意一个转移至另一分组的所述第四服务器。4.根据权利要求3所述的方法,其特征在于,所述方法还包括: 预先建立异步队列,根据名字节点将所述数据对应的数据块以及所述第一个副本的存储地址、所述第二个副本的存储地址、所述第三个副本的存储地址存入所述预先建立的异步队列。5.根据权利要求3所述的方法,其特征在于,启动线程从预先建立的异步队列里读取数据块,具体包括: 根据HDFS集群中的每一所述服务器的带宽以及跨核心交换机的带宽进行线程数量的设置。6.一种HDFS写入装置,其特征在于,包括如下的模块: 写数据模块,用于当第一服务器发起数据写入请求,将所述数据的第一个副本写入所述第一服务器; 分组判断模块,用于读取所述第一服务器的预设分组标签,并根据所述分组标签判断所述第一服务器所属的分组; 所述写数据模块,还用于将所述数据的第二个副本写入第二服务器上,将所述数据的第三个副本写入第三服务器上;其中,所述第二服务器与所述第一服务器为跨接入交换机的同一分组服务器,所述第三服务器与所述第二服务器为接入同一个接入交换机的同一分组服务器; 迀移模块,用于将所述第二个副本或所述第三个副本中的任意一个迀移至第四服务器,其中所述第四服务器与所述第一服务器为不同分组服务器。7.根据权利要求6所述的装置,其特征在于,所述装置还包括预处理模块,所述预处理模块用于: 按照每一服务器接入的核心交换机对HDFS集群中的每一所述服务器进行分组,并按照所述分组的结果对每一所述服务器进行分组标签化处理。8.根据权利要求6所述的装置,所述迀移模块具体用于: 启动线程从预先建立的异步队列里读取数据块,并查询所述数据块的第二个副本或第三个副本对应的服务器以及所述服务器对应的接入交换机; 将所述接入交换机下的存有的所述第二个副本或所述第三个副本中的任意一个转移至另一分组的所述第四服务器。9.根据权利要求8所述的装置,其特征在于,所述迀移模块具体用于: 预先建立异步队列,根据名字节点将所述数据对应的数据块以及所述第一个副本的存储地址、所述第二个副本的存储地址、所述第三个副本的存储地址存入所述预先建立的异步队列。10.根据权利要求8所述的装置,其特征在于,所述迀移模块具体用于: 根据HDFS集群中的每一所述服务器的带宽以及跨核心交换机的带宽进行线程数量的设置。
【文档编号】H04L29/08GK105847392SQ201610262433
【公开日】2016年8月10日
【申请日】2016年4月25日
【发明人】侯志贞
【申请人】乐视控股(北京)有限公司, 乐视网信息技术(北京)股份有限公司
再多了解一些
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1