一种分布式基础框架中的数据存取方法及装置与流程

文档序号:22313591发布日期:2020-09-23 01:34阅读:93来源:国知局
一种分布式基础框架中的数据存取方法及装置与流程

本发明涉及大数据技术领域,尤其涉及一种分布式基础框架中的数据存取方法及装置。



背景技术:

hdfs(hadoopdistributedfilesystem,hadoop分布式文件系统),它是一个高度容错性的分布式存储系统。hdfs采用分而治之的设计思想,将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析。在大数据生态系统系统中为各类分布式运算框架,例如mapreduce、spark、tez等,提供数据存储服务。

在传统hadoop集群架构中,数据存储节点和计算节点部署在同一物理机上,当存储或计算资源不够时需要增加物理服务器,扩展的物理服务器既包括计算资源也包括存储资源,这样有时会造成资源的浪费,例如在计算资源够用而存储资源不够用时,同时增加计算和存储资源会带来计算资源的浪费。在传统hadoop集群架构中,计算组件如spark、mapreduce通过hdfsclient与hdfs文件系统进行交互。hdfsclient从namenode中获取文件及datanode节点映射关系,然后与对应的datanode交互读写数据。

存储计算分离是一种分层架构思想,即将存储能力和计算能力分开,各自服务化,通过高速网络连接。在传统hadoop的分布式集群中,存储与计算密不可分,hdfs为了实现数据的高可用,将数据的每个单元(block)保存多个副本(replica),不同的副本保存在不同的节点上,分布式计算也同时切分为多个任务,每个任务都分配给在本地具有该数据副本的节点上去执行,这样就大大减少了网路带宽的使用,不需要频繁将数据从一个节点传输到另一个节点。然而,随着近些年处理器计算能力和网络带宽的大幅提升,数据中心的带宽和计算资源的紧张情况得到缓和,反而海量数据的膨胀使得多副本保存数据的机制大大增加了系统成本,进而使得计算和存储绑定的传统hadoop集群架构的实用性变差,产生资源浪费、不能实现云计算场景下资源的弹性伸缩等问题。



技术实现要素:

有鉴于此,本发明提供一种分布式基础框架中的数据存取方法,用于实现分布式基础框架中的存储于计算分离。

基于本发明实施例,提供了一种分布式基础框架中的数据存取方法,该方法包括:

分布式文件系统客户端hdfsclient获取待写入云存储系统的文件,将文件按预设块大小切分为一个或多个数据块;

hdfsclient向管理节点namenode发送所述文件与被切分的数据块之间的映射关系,由namenode管理所述待写入文件的元数据信息;其中,所述元数据信息至少包括所述文件的文件名、访问控制信息、存储位置信息及所述文件与被切分的数据块之间的映射关系;

hdfsclient将被切分的数据块存储于云存储系统中;

hdfsclient基于所述namenode所管理的元数据信息从所述云存储系统中读取所述文件。

进一步地,所述hdfsclient将文件按预设块大小切分为一个或多个数据块之前,还包括如下写入验证和鉴权步骤:

hdfsclient向namenode发送写文件请求,写文件请求中包括文件名、存储位置信息、访问控制信息;

namenode基于管理的元数据信息验证发起写文件请求的用户是否有访问权限,并进行是否允许写入的写入验证;

若写入验证和鉴权通过,则执行所述hdfsclient将被切分的数据块存储于云存储系统中的步骤,若未通过则向hdfsclient发送写入失败的响应。

进一步地,所述hdfsclient基于所述namenode所管理的元数据信息从所述云存储系统中读取所述文件的方法为:

hdfsclient与namenode建立连接,发起读文件请求,所述读文件请求中至少包括文件名、访问控制信息、存储位置信息;

namenode检查文件是否存在并进行鉴权检测,若文件存在且鉴权通过,则向hdfsclient返回所要读取的文件和数据块之间的映射关系,若文件不存在或鉴权未通过,则向hdfsclient返回文件读取失败响应;

hdfsclient根据文件和数据块之间的映射关系,从云存储系统中读取数据块。

进一步地,分布式计算框架通过所述hdfsclient读取文件时,根据所述文件对应的数据块个数启动多个任务并行从所述云存储系统读取所述文件的多个数据块。

进一步地,所述云存储系统为云端部署的ceph存储系统。

基于本发明实施例,本发明还提供一种分布式基础框架中的数据存取装置,该装置包括位于分布式文件系统客户端hdfsclient中的验证模块、获取模块、映射模块、上传模块、读取模块和管理节点namenode:

验证模块,用于在获取待写入云存储系统的文件之前,对文件进行写入验证和鉴权;

获取模块,用于在写入验证和鉴权通过时获取待写入云存储系统的文件,将文件按预设块大小切分为一个或多个数据块;

映射模块,用于向管理节点namenode发送所述文件与被切分的数据块之间的映射关系;

上传模块,用于将被切分的数据块存储于云存储系统中;

读取模块,用于基于所述namenode所管理的元数据信息从所述云存储系统中读取所述文件;

namenode,用于管理所述待写入文件的元数据信息;其中,所述元数据信息至少包括所述文件的文件名、访问控制信息、存储位置信息及所述文件与被切分的数据块之间的映射关系。

进一步地,所述验证模块与namenode建立连接后,向namenode发送写文件请求,写文件请求中包括文件名、存储位置信息、访问控制信息;

所述namenode基于管理的元数据信息验证发起写文件请求的用户是否有访问权限,并进行是否允许写入的写入验证;若写入验证和鉴权通过,则反馈成功响应消息给验证模块,验证模块通知获取模块执行所述hdfsclient将被切分的数据块存储于云存储系统中的步骤,若未通过则向验证模块反馈失败响应消息。

进一步地,所述读取模块与namenode建立连接,发起读文件请求,所述读文件请求中至少包括文件名、访问控制信息、存储位置信息;

所述namenode检查文件是否存在并进行鉴权检测,若文件存在且鉴权通过,则向所述读取模块返回所要读取的文件和数据块之间的映射关系,若文件不存在或鉴权未通过,则向所述读取模块返回文件读取失败响应;

所述读取模块根据文件和数据块之间的映射关系,从云存储系统中读取数据块。

基于本发明实施例,hdfsclient将待存储于云存储系统的文件切分成数据块,使用namenode作为元数据管理服务管理文件与数据块之间的映射关系,将数据块存储于云存储系统中,当需要从云存储系统中读取文件时,根据namenode管理的文件与数据块的映射关系可开启多个任务并行从云存储系统中读取多个数据块。本发明实现了分布式基础框架中计算资源与存储资源的分离部署,不需要对上层的分布式并行计算框架进行修改,提高了兼容性的同时解决了分布式文件系统与云存储系统权限管理模型不一致导致鉴权过程复杂的问题,还能够避免文件重命名产生不必要的数据移动。

附图说明

为了更加清楚地说明本发明实施例或者现有技术中的技术方案,下面将对本发明实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本发明实施例的这些附图获得其他的附图。

图1为本发明一实施例提供的存储计算分离架构示意图;

图2为本发明实施例提供的一种分布式基础框架中的数据存取方法;

图3为本发明一实施例提供的将文件写入云存储系统的过程示意图;

图4为本发明一实施例中提供的hdfsclient从云存储系统读取文件的流程示意图;

图5为本发明一实施例提供的一种分布式基础框架中的数据存取装置结构示意图。

具体实施方式

在本发明实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本发明实施例。本发明实施例和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。本发明中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本发明实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本发明旨在解决hadoop的存储计算分离问题,使得hadoop生态的计算框架mapreduce、spark能够读写位于云中的存储系统的数据,更加符合云原生大数据发展趋势。

图1为本发明一实施例提供的存储计算分离架构示意图,在存储计算分离架构中,计算和存储资源将统一由云平台进行管理,hadoop计算组件将被安装在云平台所创建的虚拟机中,可基于业务负载进行弹性伸缩,比如在进行复杂计算时,可以随时扩展多个虚拟机进行计算,任务完成后计算资源可随时释放。存储计算分离架构中存储资源将由云存储提供,位于云端的云存储系统可以是ceph、s3或其他云存储,根据实际存储容量申请存储资源,并且可以随时扩展。

本发明通过改造hdfs架构,基于原生的namenode实现元数据管理、鉴权等服务,由hdfs的namenode负责维护文件的元数据信息,包括文件存储位置、文件名与云端对象存储中的对象key值映射关系、容量信息、权限信息等。hdfs客户端通过namenode获取文件元数据信息,并与文件对应的对象存储交互进行读写数据。

图2为本发明实施例提供的一种分布式基础框架中的数据存取方法,该方法应用于hadoop分布式基础框架,用于实现基于管理节点namenode的存储计算分离,该方法包括:

步骤201.分布式文件系统客户端hdfsclient获取待写入云存储系统的文件,将文件按预设块大小切分为一个或多个数据块;

hdfsclient在向云存储系统写入文件之前,需要先从hdfs中或以流的方式读取待写入云存储系统的文件,根据文件的大小,可以将文件一次性切分成多个数据块,也可以分步骤局部读取后切分。

步骤202.hdfsclient向管理节点namenode发送所述文件与被切分的数据块之间的映射关系,由namenode管理所述待写入文件的元数据信息;其中,所述元数据信息至少包括所述文件的文件名、访问控制信息、存储位置信息及所述文件与被切分的数据块之间的映射关系;

步骤203.hdfsclient将被切分的数据块存储于云存储系统中;

当文件很大时,上述切分、映射关系保存和数据块存储于云存储系统的步骤可以分步骤循环进行,可先读入部分文件数据,打包成一个数据块后在本地缓存,然后将映射关系保存到namenode后,再将数据块存储到云存储系统中,循环执行上述步骤直到完成所有文件数据块的处理。

步骤204.hdfsclient基于所述namenode所管理的元数据信息从所述云存储系统中读取所述文件。

图3为本发明一实施例提供的将文件写入云存储系统的过程示意图,如果所示,在hdfsclient将文件按预设块大小切分为一个或多个数据块之前,还包括写入验证和鉴权步骤,实现方法为:

hdfsclient向namenode发送写文件请求,写文件请求中包括文件名、存储位置信息、访问控制信息。其中,所述存储位置信息可以是文件系统的目录信息,访问控制信息可以是但不限于发起写入请求的用户名或账号。

namenode基于管理的元数据信息验证发起写文件请求的用户是否有访问权限,并进行是否允许写入的写入验证。例如,namenode检查目标文件是否已经存在,父目录是否存在,并检查发起写入文件请求的用户是否有相应的目录访问权限等。

若写入验证和鉴权通过,则执行hdfsclient将被切分的数据块存储于云存储系统中的步骤,若未通过则向hdfsclient发送写入失败的响应。

本发明不需要对原生的namenode的文件访问过程进行修改,很好的保证了与原生namenode的兼容性。

如图3所示,本发明一实施例中,在执行所述将文件按预设块大小切分为一个或多个数据块之前,还包括获取所述文件的步骤:

hdfsclient读取所述文件数据,当读取的文件数据达到预设的包大小后,例如64k后,构造一个packet数据包对象,并将packet数据包对象缓存在本地的dataqueue数据缓存队列中;

所述hdfsclient将文件按预设块大小切分为一个或多个数据块的步骤为:

hdfsclient启动数据块处理线程datastreamer,数据块处理线程从数据缓存队列中读取数据包对象并按预设块大小,例如按128m字节,拼装成数据块,为每一个数据块向namenode申请生成数据块对象,以数据块标识blockid为文件名将数据块缓存于本地;

所述hdfsclient将被切分的数据块存储于云存储系统中的方法为:

hdfsclient基于数据块标识从本地缓存中读取数据块,并以数据块标识作为名称将所述数据块上传并存储于云存储系统中。

如果上传数据块到云存储系统失败,hdfsclient会进行重试,如果重试超过预设次数后,则删除已上传的数据块,并且namenode中不会保存该文件的元数据,以保证云存储系统与namenode元数据的同步一致。

本发明一实施例中,所述云存储系统为支持简单存储服务协议(simplestorageservice,s3)的云存储系统,例如在云端部署的ceph存储系统。

图4为本发明一实施例中提供的hdfsclient从云存储系统读取文件的流程示意图,hdfsclient基于所述namenode所管理的元数据信息从所述云存储系统中读取所述文件的方法为:

步骤s1、hdfsclient与namenode建立连接,发起读文件请求,所述读文件请求中至少包括文件名、访问控制信息(例如用户名)、存储位置信息(例如目录信息系);

步骤s2、namenode检查文件是否存在并进行鉴权检测,若文件存在且鉴权通过,则向hdfsclient返回所要读取的文件和数据块之间的映射关系,若文件不存在或鉴权未通过,则向hdfsclient返回文件读取失败响应。

步骤s3、hdfsclient根据文件和数据块之间的映射关系,从云存储系统中读取数据块。

在本发明一实施例中,若所述文件被切分为多个数据块存储于所述云存储系统中,则分布式计算框架通过所述hdfsclient读取文件时,根据所述文件对应的数据块个数启动多个任务并行从所述云存储系统读取所述文件的多个数据块,以提高文件的读取效率。

根据上述本发明提供的分布式基础框架中的数据存取方法,能够基于hadoop本身的namenode实现分布式基础框架中计算资源与存储资源的分离部署,减小分布式基础框架中计算与存储之间的耦合。本发明提供的hadoop存储计算分离方案不需要针对上层的mapreduce、spark等计算框架进行功能适配修改,避免对上层组件的影响,具有很好的兼容性。另外,使用namenode作为hadoop计算存储分离的元数据管理服务,不仅能够解决hdfs和对象存储系统中对文件的权限管理模型不一致的问题,还能够避免文件重命名产生不必要的数据移动导致性能差的问题。例如,当需要对文件进行重命名时,如果没有元数据管理服务,在对象存储系统中需要将原对象移动为新对象,涉及到数据移动,影响文件重命名的性能,而基于本发明的技术方案,在对文件进行重命名时,仅需要更新namenode中的文件与数据块的映射关系,对于底层对象存储系统中数据块对象不需要进行移动,从而提高重命名的性能。

图5为本发明一实施例提供的一种分布式基础框架中的数据存取装置结构示意图,该装置可以应用于hadoop等分布式架构中,可以在一个硬件设备上执行,也可以由不同的硬件设备分别完成前述分布式基础框架中的数据存取方法中的一个或多个步骤。该装置500包括分布式文件系统客户端510即hdfsclient及管理节点520即namenode,其中hdfsclient中包括验证模块511、获取模块512、映射模块513、上传模块514、读取模块515。

验证模块511,用于在获取待写入云存储系统的文件之前,对文件进行写入验证和鉴权;

获取模块512,用于在写入验证和鉴权通过时获取待写入云存储系统的文件,将文件按预设块大小切分为一个或多个数据块;

映射模块513,用于向管理节点namenode发送所述文件与被切分的数据块之间的映射关系;

上传模块514,用于将被切分的数据块存储于云存储系统中;

读取模块515,用于基于所述namenode所管理的元数据信息从所述云存储系统中读取所述文件;

管理节点520,用于管理所述待写入文件的元数据信息;其中,所述元数据信息至少包括所述文件的文件名、访问控制信息、存储位置信息及所述文件与被切分的数据块之间的映射关系。

所述验证模块511与管理节点520建立连接后,向管理节点520发送写文件请求,写文件请求中包括文件名、存储位置信息、访问控制信息;

所述管理节点520基于管理的元数据信息验证发起写文件请求的用户是否有访问权限,并进行是否允许写入的写入验证;若写入验证和鉴权通过,则反馈成功响应消息给验证模块511,验证模块511通知获取模块512执行所述hdfsclient将被切分的数据块存储于云存储系统中的步骤,若未通过则向验证模块511反馈失败响应消息。

所述读取模块515与namenode建立连接,发起读文件请求,所述读文件请求中至少包括文件名、访问控制信息、存储位置信息;

所述namenode检查文件是否存在并进行鉴权检测,若文件存在且鉴权通过,则向所述读取模块515返回所要读取的文件和数据块之间的映射关系,若文件不存在或鉴权未通过,则向所述读取模块515返回文件读取失败响应;

所述读取模块515根据文件和数据块之间的映射关系,从云存储系统中读取数据块。

在本发明一实施例中,分布式计算框架通过所述hdfsclient读取文件时,根据所述文件对应的数据块个数启动多个任务并行从所述云存储系统读取所述文件的多个数据块。

在本发明一实施例中,所述云存储系统为云端部署的ceph存储系统。

以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1