CN117931764A - 提供分布式文件存储服务的方法、装置和系统 - Google Patents

提供分布式文件存储服务的方法、装置和系统 Download PDF

Info

Publication number
CN117931764A
CN117931764A CN202410139108.2A CN202410139108A CN117931764A CN 117931764 A CN117931764 A CN 117931764A CN 202410139108 A CN202410139108 A CN 202410139108A CN 117931764 A CN117931764 A CN 117931764A
Authority
CN
China
Prior art keywords
storage
distributed
rados
data
storage pool
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202410139108.2A
Other languages
English (en)
Inventor
于胜强
汪卫国
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Big Data Technologies Co Ltd
Original Assignee
New H3C Big Data Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by New H3C Big Data Technologies Co Ltd filed Critical New H3C Big Data Technologies Co Ltd
Priority to CN202410139108.2A priority Critical patent/CN117931764A/zh
Publication of CN117931764A publication Critical patent/CN117931764A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种提供分布式文件存储服务的方法、装置和系统,用于解决分布式对象存储系统不能高效提供分布式文件存储服务的技术问题。本发明在分布式对象存储系统中部署分布式文件系统的元数据节点和扩展数据节点,扩展数据节点支持读/写Rados集群中的存储池,将分布式文件系统的数据块读/写转换为基于Librados协议读/写Rados存储集群中的存储池的对象。通过本发明能够使分布式对象存储系统直接提供分布式文件存储能力,有效地解决上层大数据计算框架组件使用分布式对象存储系统进行数据处理和分析时,效率低、性能和稳定性较差的技术问题。

Description

提供分布式文件存储服务的方法、装置和系统
技术领域
本发明涉及通信及存储技术领域,尤其涉及一种提供分布式文件存储服务的方法、装置和系统。
背景技术
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)是一个具有高容错性的分布式文件系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。
HDFS采用分而治之的设计思想,将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析。在大数据生态系统系统中为各类分布式运算框架(如:mapreduce,spark,tez等)提供数据存储服务。
HDFS非常适合大文件的存储,HDFS采用分块存储方式,将大文件分块存储存储到不同节点上,读取文件时可同时从多个节点取不同区块的文件,具有很高的读取效率。
HDFS中包括名称节点、数据节点、管理节点等。名称节点NameNode负责文件和目录的创建、删除和重命名等,同时管理数据节点与文件块的映射关系。数据节点DataNode负责数据的存储和读取。HDFS客户端读数据会先访问名称节点,获取数据块对应数据节点的位置,进而读取数据。写入数据也会由名称节点分配存储位置,再向对应数据节点写入数据。HDFS中的文件按块存储,每个块默认大小是128M,远远大于普通文件系统,这样可以减少寻址开销。
Ceph是一个支持对象(object)存储的分布式存储系统,它能够把每一个待管理的数据流(文件等数据)切分为一到多个固定大小的数据块(默认4兆)以对象方式存储,并以对象为原子单元完成数据的读写。对象数据的底层存储服务是由多个存储主机(host)组成的存储集群,该集群也被称之为RADOS(Reliable Automatic Distributed Object Store)集群,即可靠的、自动化的、分布式的对象存储集群。Librados是RADOS存储集群的API,支持多种编程语言的客户端。
一个Ceph集群的组成部分通常包括若干运行对象存储守护进程(Object StorageDaemon,OSD)的对象存储设备、至少需要3个Monitors监视器(简称Mon)、两个或以上的Managers管理器(简称Mgr),在提供文件系统功能时还会包括元数据服务(MetadataServer,简称Mds)。OSD用于处理Ceph集群数据复制、恢复、重新平衡,并通过检查其他CephOSD守护程序的心跳来向Ceph监视器和管理器提供一些监视信息。Mgr负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载等。Mon用于维护集群状态映射,比如Ceph集群中有多少存储池、每个存储池有多个PG以及存储池和PG的映射关系等,这些映射是Ceph守护程序相互协调所需的关键群集状态。Mds元数据服务代表Ceph文件系统(NFS/CIFS)存储元数据。Ceph块设备和Ceph对象存储不使用元数据服务。Ceph对象存储的元数据是通过元数据池来管理,其中包括关于用户对象和写时重定向ROW对象之间的映射关系,并且这些元数据是由Ceph存储集群中的多个OSD承载和管理的。
Ceph存储系统支持对象存储(RADOSGW)、块存储(RDB)、文件系统(CephFS),这三种存储功能都是基于Librados协议之上封装实现的,然而在当前大数据处理分析场景中,通常使用很多基于Hadoop生态的大数据平台组件,例如Hive/Spark/HBase等,而Hive几乎成了企业大数据建仓的标准。基于Hadoop生态的数据存储是基于Hadoop的HDFS服务的,其采用的是HDFS协议,在面对第三方对象存储系统中的数据进行处理分析时,往往需要把数据迁移到Hadoop的存储服务HDFS中,数据迁移的成本很高,在折中情况下采用Hadoop生态提供的Hadoop-aws插件则不用迁移数据,然而却存在着诸多的问题,例如依赖第三方的存储系统管理元数据、数据网络传输链路长、Hadoop生态组件兼容性不好存在使用限制等。
发明内容
有鉴于此,本发明提供一种提供分布式文件存储服务的方法、装置和系统,用于解决分布式对象存储系统不能高效提供分布式文件存储服务的技术问题。
基于本发明实施例的一方面,本发明提供了一种提供分布式文件存储服务的方法,该方法应用于分布式对象存储系统(Ceph)当中,该方法包括:
通过部署于分布式对象存储系统(Ceph)中的元数据节点(NameNode)为客户端提供基于分布式文件系统(HDFS)协议的元数据服务;
通过部署于分布式对象存储系统(Ceph)中的扩展数据节点(DataNode)为客户端提供基于分布式文件系统(HDFS)协议的数据服务,所述扩展数据节点负责将分布式文件系统(HDFS)协议的数据块读/写转换为对分布式对象存储系统(Ceph)存储池中对象的读/写。
进一步地,所述扩展扩展数据节点(DataNode)基于分布式文件系统(HDFS)底层文件系统接口(FsVolumeSpi)扩展实现分布式对象存储系统(Ceph)的存储池访问接口(RadosVolumeImpl);
所述存储池访问接口(RadosVolumeImpl)通过读取扩展数据节点(DataNode)中配置的分布式对象存储系统(Ceph)中可靠自动分布式对象存储集群即Rados集群的连接信息实现对Rados集群的连接。
进一步地,所述存储池访问接口(RadosVolumeImpl)从所述扩展数据节点(DataNode)的服务数据目录配置中获取要连接的存储池名称,创建用于操作所连接的存储池中对象的I/O上下文控制接口(ioCtx);
所述存储池访问接口(RadosVolumeImpl)根据文件系统I/O的输入流和输出流的标准抽象类(InputStream和OutputStream)分别实现操作Rados集群对象I/O的输入字节流和输出字节流类(RadosInputStream和RadosOutputStream类),通过输入字节流和输出字节流类封装所述I/O上下文控制接口(ioCtx)读/写对象数据的细节。
进一步地,基于分布式文件系统(HDFS)数据集接口(FsDatasetSpi)扩展实现操作Rados集群中存储池的数据集工厂类(RadosDatasetFactory)和具体实现操作Rados集群中存储池的数据集执行类(RadosDatasetImpl)类;
所述数据集执行类(RadosDatasetImpl)实例内部初始化时会根据所述扩展数据节点(DataNode)服务数据目录配置的存储池创建对应的Ceph存储池访问接口(RadosVolumeImpl)实例,所述存储池访问接口实例与配置的Rados集群存储池一一对应。
进一步地,所述元数据节点(NameNode)部署于分布式对象存储系统(Ceph)中的管理节点(Mgr)或监控节点(Mon)中;
所述扩展数据节点(DataNode)部署于分布式对象存储系统(Ceph)中的对象存储设备(OSD)所在主机中。
基于本发明实施例的另一方面,本发明还提供一种提供分布式文件存储服务的装置,该装置应用于分布式对象存储系统(Ceph)当中,该装置包括:
元数据节点(NameNode),用于为客户端提供基于分布式文件系统(HDFS)协议的元数据服务;
扩展数据节点(DataNode),用于为客户端提供基于分布式文件系统(HDFS)协议的数据服务,所述扩展数据节点负责将分布式文件系统(HDFS)协议的数据块读/写转换为对分布式对象存储系统(Ceph)存储池中对象的读/写。
进一步地,所述扩展数据节点基于分布式文件系统底层文件系统接口扩展实现分布式对象存储系统的存储池访问接口,通过存储池访问接口读取配置的分布式对象存储系统中可靠自动分布式对象存储集群即Rados集群的连接信息实现对Rados集群的连接。
进一步地,所述扩展数据节点通过所述存储池访问接口从服务数据目录配置中获取要连接的存储池名称,创建用于操作所连接的存储池中对象的I/O上下文控制接口;
所述存储池访问接口根据文件系统I/O的输入流和输出流的标准抽象类分别实现操作Rados集群对象I/O的输入字节流和输出字节流类,通过输入字节流和输出字节流类封装所述I/O上下文控制接口读/写对象数据的细节。
进一步地,所述扩展数据节点存储池访问接口由数据集执行类实例在内部初始化时根据服务数据目录配置的存储池创建,所述存储池访问接口实例与配置的Rados集群存储池一一对应;
具体实现操作Rados集群中存储池的数据集执行类由所述基于分布式文件系统数据集接口扩展实现的操作Rados集群中存储池的数据集工厂类创建。
进一步地,所述元数据节点部署于分布式对象存储系统中的管理节点或监控节点中;所述扩展数据节点部署于分布式对象存储系统中的对象存储设备所在主机中。
基于本发明实施例的另一方面,本发明还提供一种提供分布式文件存储服务的系统,该系统包括:
分布式对象存储系统(Ceph),用于基于可靠自动分布式对象存储集群即Rados集群提供分布式对象存储能力;
元数据节点(NameNode),部署于所述分布式对象存储系统(Ceph)中的管理节点或监控节点中,用于为客户端提供基于分布式文件系统(HDFS)协议的元数据服务;
扩展数据节点(DataNode),部署于所述分布式对象存储系统(Ceph)中的对象存储设备(OSD)所在主机中,用于为客户端提供基于分布式文件系统(HDFS)协议的数据服务,所述扩展数据节点负责将分布式文件系统(HDFS)协议的数据块读/写转换为对分布式对象存储系统(Ceph)存储池中对象的读/写。
进一步地,所述扩展数据节点基于分布式文件系统底层文件系统接口扩展实现分布式对象存储系统的存储池访问接口,通过存储池访问接口读取配置的分布式对象存储系统中Rados集群的连接信息实现对Rados集群的连接。
基于本发明实施例的另一方面,本发明还提供一种电子设备,该电子设备包括处理器、通信接口、存储介质和通信总线,其中,处理器、通信接口、存储介质通过通信总线完成相互间的通信;
存储介质,用于存放计算机程序;
处理器,用于执行存储介质上所存放的计算机程序时,实施本发明实施例提供的提供分布式文件存储服务的方法中的一个或多个方法步骤。
本发明提供的装置可以以软件、硬件或软硬结合的方式实现。当以软件模块方式实现时,该软件模块的程序代码被加载到设备的存储介质中,由处理器读取存储介质中的程序代码并执行。
本发明在分布式对象存储系统中部署分布式文件系统的元数据节点和扩展数据节点,扩展数据节点支持读/写Rados集群中的存储池,将分布式文件系统的数据块读/写转换为基于Librados协议读/写Rados存储集群中的存储池的对象。通过本发明能够使分布式对象存储系统直接提供分布式文件存储能力,有效地解决上层大数据计算框架组件使用分布式对象存储系统进行数据处理和分析时,效率低、性能和稳定性较差的技术问题。
附图说明
为了更加清楚地说明本发明实施例或者现有技术中的技术方案,下面将对本发明实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本发明实施例的这些附图获得其他的附图。
图1为通过Hadoop-aws插件读/写Ceph对象存储的层次结构示意图;
图2为本发明一实施例提供的Ceph分布式存储系统基于HDFS协议为上层大数据计算框架组件提供分布式存储服务的框架结构示意图;
图3为本发明一实施例中扩展部署在Ceph中的DataNode及NameNode结构及大数据上层计算框架组件与扩展服务和Rados集群之间交互关系的示意图;
图4为本发明一实施例提供的一种提供分布式文件存储服务的方法流程示意图;
图5为本发明一实施例提供提供分布式文件存储服务的装置结构示意图;
图6为本发明一实施例提供分布式文件存储服务的系统结构示意图,该系统;
图7为本发明一实施例提供的用于实施提供分布式文件存储服务方法的电子设备结构示意图。
具体实施方式
在本发明实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本发明实施例。本发明实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。应当理解,尽管在本发明实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用于区别类似的信息、实体或步骤,而不是用于描述特定的顺序或先后次序。例如,在不脱离本发明实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。本发明中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。并且,在本发明的描述中,除非另有说明,“多个”是指两个或多于两个。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
图1为通过Hadoop-aws插件读/写Ceph对象存储的层次结构示意图。Hadoop官方提供Hadoop-aws插件基于对象存储S3 API扩展了一个Hadoop文件系统类S3AFileSystem,该类在Hadoop生态上层计算框架Hive数据仓库工具、Spark大数据计算框架等以s3a协议提供读写Ceph对象存储的能力。插件的S3Guard模块提供了对象存储元数据管理能力,维护了Hadoop文件元数据与对象存储元数据的映射关系,来解决文件操作如:重命名、移动等性能低的问题。HDFS客户端通过Hadoop-aws插件读写文件需要首先创建S3AFileSyetem文件系统管理对象,文件系统管理对象写入文件时,从S3Guard中获取文件对象的元数据信息,若不存在同名文件则将该文件元数据信息写入到MetaDataStore中,接着通过S3 API将文件内容写入到对象存储网关,对象存储网关采用Librados协议库写入Rados存储集群的存储池,进而写入到存储节点对应的OSD中。文件系统管理对象读文件时,从S3Guard中获取文件对象的元数据信息,接着通过S3 API将读请求发送到对象网关,对象网关根据文件对象元数据信息通过Librados协议读取Rados存储集群中存在OSD中的数据,最后返回给客户端。
发明人经过分析发现,上述方法存在很多缺陷,例如在HDFS客户端实现的基于S3API的对象存储文件操作类与原生HDFS架构不兼容,上层计算框架Hive、Spark等使用配置工作过程繁杂;该插件的S3Guard模块需要单独部署第三方数据库来管理元数据信息,对客户端使用侵入过多,维护困难;Ceph采用对象存储为插件提供存储服务,对象存储方式不适合Hadoop中大文件应用场景,因为存放一个大文件在对象存储的代价非常高,读取时也无法充分利用分布式并发读的优点,性能非常低。另外,由于客户端需要同时在S3Guard中写入元数据和对象存储中写入数据,有可能会导致数据不一致的问题,两者之间的元数据同步代价过高。
为解决上述技术问题,本发明的发明目的是提供一种基于HDFS协议向客户端提供分布式文件存储服务的方案,本发明的关键技术特征包括:在分布式对象存储系统(例如Ceph)中部署分布式文件系统(例如HDFS)的元数据节点(例如NameNode),在分布式对象存储系统的Rados集群中部署扩展的数据节点(例如DataNode,简称扩展数据节点),扩展DataNode支持读/写Rados集群中的存储池中的对象,能够将分布式文件系统的数据块读/写转换为基于Librados协议读/写Rados集群存储池中的对象。通过本发明能够使分布式对象存储系统直接提供分布式文件存储能力,有效地解决大数据上层计算框架组件使用分布式对象存储进行数据处理和分析时,效率低、性能和稳定性较差的技术问题。
本发明实施例中虽然以分布式对象存储系统Ceph和分布式文件系统HDFS为例进行描述,但本发明提供的技术方案并不局限于具体的分布式对象存储系统和分布式文件系统,基于本发明提供的思路,本发明同样适用于类似于Ceph分布式对象存储系统和类似于HDFS的分布式文件系统。
基于本发明的基本思想,本发明提供如下实施例,其中,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图2为本发明一实施例提供的Ceph分布式存储系统基于HDFS协议为上层大数据计算框架组件提供分布式存储服务的框架结构示意图。本发明提供的Ceph分布式存储系统在文件系统(CephFS)、对象存储(RDOSRGW)、块存储(RBD)三种存储功能之外,新扩展了一种通过Librados实现支持HDFS协议的存储功能,以满足在存算分离场景下,高效稳定地支持Hadoop生态组件的大数据处理和分析的需求。本发明在Ceph存储集群中的Mgr管理节点扩展部署HDFS的元数据服务即名称节点NameNode,在Ceph集群的存储节点(Node1,…,NodeN)中部署经扩展的HDFS的数据服务即数据节点DataNode。
Ceph存储集群中的多个存储节点(Node1、Node2、…、NodeN)组成存储Rados集群,Rados集群为上层提供存储资源池(Pool1、Pool2、…、PoolN)。归置组(Placement Group,PG)由多个OSD组成,多个归置组PG组成存储池pool,多个存储池构成Rados集群的存储资源池。
基于本发明扩展后的Ceph框架结构,大数据上层计算框架组件(例如Hive、Spark等)能够直接通过HDFS协议与Ceph中的元数据服务NameNode交互读/写文件元数据信息,与Ceph中的数据服务DataNode交互读/写文件数据块。DataNode可配置对应的存储池pool,通过访问存储池来实现将HDFS的数据块的读/写转换为对存储池中对象的读/写。
需要说明的是,将NameNode部署于Ceph的管理节点只是一种示例,也可将NameNode部署于Ceph存储集群中的其它节点上,例如Mon节点,由于NameNode是元数据管理服务,其对存储要求不高,部署在OSD所在的存储节点容易受到存储节点I/O热点的影响,导致元数据服务受到影响,因此优选部署在管理节点。
图3为本发明一实施例中扩展部署在Ceph中的DataNode及NameNode结构及大数据上层计算框架组件与扩展服务和Rados集群之间交互关系的示意图。通过图3可清楚地看出Hadoop的上层大数据计算框架组件如何与Ceph存储系统中扩展部署的NameNode和DataNode交互的,以及本发明对原生HDFS的DataNode进行改造的示例。
在Ceph的Rados存储集群在创建完成后,可通过Shell命令“ceph osd pool<存储池名><pg_num><pgp_num>{replicated|erasure}”来创建多个存储池如:Pool1、Pool2、…、PoolN。
完成上述操作后,在Rados集群的Mgr管理节点部署HDFS的元数据节点NameNode,在Rados集群的对象存储设备OSD所在主机中部署经过扩展的DataNode,在DataNode中基于HDFS底层文件系统接口FsVolumeSpi扩展实现Rados存储池访问接口RadosVolumeImpl类,RadosVolumeImpl用于实现对Ceph集群存储池Pool的访问,通过支持读/写Rados集群存储池的数据服务DataNode为基于Hadoop生态的大数据应用提供完整的HDFS语义的HDFS分布式文件系统功能支持。
扩展DataNode中的DataXceiverServer为DataNode内部数据接收分发器,主要负责接收客户端或其他数据节点DataNode读/写本数据节点的数据请求。本发明对DataNode内部服务进行扩展,尽可能复用原生的HDFS组件的功能。图中RadosVolumeImpl类采用了Ceph的librados提供的Java语言访问接口API即maven仓库中的rados-0.6.0.jar,RadosVolumeImpl通过读取扩展DataNode中配置的Ceph Rados集群的连接信息,例如:Rados集群标识(RadosId)、监视器Mon主机地址和Rados集群密钥(Rados Key)等,来完成对Rados集群的连接,另外由于在DataNode中新扩展了一种rados存储类型,因此可通过在DataNode服务数据目录配置存储池时,指定存储类型前缀“[rados]”来标识数据目录的存储类型为rados存储类型,配置示例如下:
dfs.datanode.data.dir=[rados]pool1,[rados]pool2,
RadosVolumeImpl从该配置中获取要连接的存储池名称,进而可以创建一个可以操作存储池中对象的I/O上下文控制接口ioCtx:
cluster=new Rados(radosId);//根据Rados集群Id创建Rados对象实例
cluster.confSet("mon_host",radosMonHost);//设置Rados集群mon节点主机列表
cluster.confSet("key",radosKey);//设置Rados集群的key
cluster.connect();//连接到Rados集群
LOG.debug("Connected to the cluster");
ioCtx=cluster.ioCtxCreate(radosPoolName);//根据存储池名创建对应的存储池IO上下文
通过ioCtx可以完成对存储池pool中对象的操作,如读、写、查看对象状态以及获取存储池的资源使用情况等操作。
为了实现对象存储系统中对象到文件系统中文件的数据读/写方式的转换,RadosVolumeImpl根据文件系统I/O的输入流和输出流的标准抽象类InputStream和OutputStream分别实现了操作Rados集群对象的I/O输入字节流RadosInputStream类和I/O输出字节流RadosOutputStream类,通过这两个类封装ioCtx读/写对象数据的细节,如:指定位置读写、追加写、删除对象、清空数据等。
本发明将HDFS的文件数据块的存储方式转换为以对象存储方式存放到Rados集群的某个存储池中,文件的元数据复用NameNode进行存储和管理。
另外,数据服务DataNode的数据目录配置是支持同时配置多个存储池进行读写的,因此依据原生的数据集接口FsDatasetSpi接口扩展实现了能够操作rados集群中存储池的数据集工厂类RadosDatasetFactory和具体实现操作Rados集群中存储池的数据集执行类RadosDatasetImpl类。FsDatasetSpi接口是Hadoop HDFS中的文件系统数据集接口,它定义了对数据块的管理、读/写、复制等操作的通用接口,允许不同的HDFS实现来根据实际情况进行自定义实现。RadosDatasetFactory类继承自FsDatasetSpi.Factory,用于创建RadosDatasetImpl实例。
RadosDatasetFactory在创建一个RadosDatasetImpl实例时,会传入数据节点DataNode服务实例(datanode)、Rados存储池pool实例(storage)和配置信息(conf)作为参数。
RadosDatasetFactory类的实现方式示例如下:
RadosDatasetImpl类扩展实现了FsDatasetSpi接口,用于对Rados集群某存储池对象进行操作(读、写、删除等),RadosDatasetImpl类的实现方式示例如下:
其中RadosDatasetFactory工厂类的实例是通过修改配置dfs.datanode.fsdataset.factory=org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.RadosDatasetFactory来让DataNode服务启动时加载的,该工厂类加载时根据配置的Rados集群存储池信息去创建RadosDatasetImpl实例。
RadosDatasetImpl实例内部初始化时会根据DataNode服务数据目录配置的存储池创建对应的RadosVolumeImpl实例,RadosVolumeImpl实例与配置的Rados集群存储池一一对应,配置多个Rados集群存储池时,RadosDatasetImpl实例内部会维护多个RadosVolumeImpl实例。
RadosDatasetImpl实例内部维护了RadosVolumeImpl实例列表,RadosDatasetImpl默认会采用原生RoundRobinVolumeChoosingPolicy轮询策略选择RadosVolumeImpl实例去写数据块,进而将数据块均衡地写入到了多个Rados集群的存储池中,同样读取时通过客户端请求的数据块信息中所属的存储信息来选择对应的RadosVolumeImpl实例连接到对应的存储池中去进行读取对象。
Hive/Spark等计算客户端与NameNode服务交互读/写元数据(数据节点及存储信息等)的流程,Hive/Spark等计算客户端与DataNode服务之间交互读/写数据块的流程,NameNode与DataNode之间心跳保活流程、DataNode与DataNode之间的数据块拷贝/替换流程可复用原生HDFS协议交互流程,上层业务应用客户端的使用方式完全不用改变,从而可以在存算分离场景下很好地兼容基于Hadoop生态的大数据计算框架组件。
在Ceph存储集群部署时,在安装和创建好Rados存储集群后,利用Ceph集群管理工具创建多个存储池,在Hive/Spark等计算客户端应用侧所在Hadoop计算集群的配置文件core-site.xml中,可将默认文件系统配置为Ceph中新扩展的HDFS分布式文件系统。core-site.xml是Hadoop计算集群的配置文件之一,用于指定全局的Hadoop核心组件的配置参数,包括文件系统配置、集群信息配置、网络通信配置等。为了实现高可用性,可采用命名空间的方式将默认文件系统配置为扩展的Ceph集群,配置示例如下:
HDFS中的配置文件hdfs-site.xml用于定义HDFS的各种配置参数,包括文件系统的设置、数据节点和名称节点的配置、安全认证和授权等,是Hadoop集群中逐节点的配置文件。在Hadoop集群启动时,所有的节点都会加载hdfs-site.xml中的配置,并根据配置参数来决定其对应角色(数据节点、名称节点)的行为和功能。可在hdfs-site.xml中配置Ceph集群提供的HDFS文件系统中相应元数据服务NameNode的地址(主机名和端口),若HDFS文件系统部署了3个NameNode即1主2备,配置示例如下:
Hive/Spark等计算框架的采用原生HDFS Client即可连接改进后的Ceph集群进行正常的读/写文件,而对于底层存储位置以及基于什么样的存储方式实现没有感知,完全兼容上层应用。
基于本发明扩展的Ceph框架,客户端基于HDFS协议写文件数据块过程如下:
步骤S01.客户端请求部署于管理节点的NameNode创建文件信息如:/tmp/1.txt,NameNode查询已存储的元数据,若未创建过同名的文件,则创建相应的元数信息后,返回成功响应给客户端;
步骤S02.文件创建成功后,客户端写数据时请求NameNode分配数据块信息(如:DataNode节点及其存储池等);
步骤S03.客户端连接到部署于Ceph的存储集群中的扩展DataNode节点后,向扩展DataNode内服务DataXceiverServer发送数据包;
步骤S04.DataXceiverServer内部DataXceiver接收到数据信息后,通过RadosDatasetImpl实例选择具体的RadosVolumeImpl实例进行创建RadosOutputStream实例,该实例创建初始化时通过librados-java-API在Rados集群对应存储池中创建以数据块标志ID为对象关键字Key的对象。
步骤S05.RadosOutputStream实例接收到数据包后以二进制字节流的方式追加写入到所创建的对象中;
步骤S06.后续重复步骤S03至步骤S05,待数据块所有数据包写入完成后,调用RadosOutputStream的关闭close方法,完成针对所创建文件的对应数据块的写入操作并返回客户端。
步骤S07.客户端接收到写入成功后关闭连接。
基于本发明扩展的Ceph框架,客户端基于HDFS协议读文件数据块过程如下:
步骤S11.客户端首先请求部署于Ceph中管理节点的NameNode,获取所读取文件的元数据,如:/tmp/1.txt的元数据;
步骤S12.NameNode根据客户端请求读取的数据返回该数据所在的数据块元数据信息(DataNode节点及存储池等);
步骤S13.客户端连接到部署于Ceph的存储集群中的对应的DataNode节点后,向DataNode内的服务DataXceiverServer中的DataXceiver读取数据;
步骤S14.DataXceiver接收到读取数据请求后,通过RadosDatasetImpl实例选择具体的RadosVolumeImpl实例,创建RadosInputStream实例(仅首次读取数据时创建,后续读取的直接使用)
步骤S15.RadosInputStream实例通过librados-java-API以二进制字节流的方式读取Rados集群存储池中对应对象的数据并发送给客户端;
步骤S16.重复执行步骤S13至S15,直至请求读取的数据块的数据读取完毕后,RadosInputStream调用close方法关闭文件;
步骤S17.客户端读取完成后关闭与NameNode和DataNode的连接。
基于上述实施例可知,本发明对Ceph存储集群进行了改进,在Ceph集群中新增经过扩展的数据服务DataNode和元数据服务NameNode,使Ceph集群能够直接对接Hadoop生态Hive/Spark等计算框架组件,更加易用且读写性能不降低,另外元数据重命名、移动等操作的性能近似于原生HDFS系统。本发明在Ceph存储后端部署经过改进的支持Rados对象存储系统的HDFS的DataNode服务能够很好的进行本地读写,数据交互流转链路短,数据传输效率高。本发明技术方案将DataNode服务读/写本地磁盘改造成基于Librados协议读写Rados存储集群中存储池,减少了对Ceph存储集群的侵入,耦合性更强,便于Rados存储集群和HDFS协议的分布式系统各自按需扩展。
图4为本发明一实施例提供的一种提供分布式文件存储服务的方法流程示意图,该方法应用于分布式对象存储系统(如Ceph)当中,该方法用于为存储客户端提供基于分布式文件系统(如HDFS)协议的文件存储服务,该方法包括:
步骤401.通过部署于分布式对象存储系统(如Ceph)中的元数据节点(如NameNode)为客户端提供基于分布式文件系统(如HDFS)协议的元数据服务;
步骤402.通过部署于分布式对象存储系统中的扩展数据节点(如DataNode)为客户端提供基于分布式文件系统协议的数据服务,所述扩展数据节点负责将分布式文件系统协议的数据块读/写转换为对分布式对象存储系统存储池中对象的读/写。
其中的元数据节点(NameNode)可部署于分布式对象存储系统(Ceph)中的管理节点(Mgr)或监控节点(Mon)中,扩展数据节点(DataNode)可部署于分布式对象存储系统(Ceph)中的对象存储设备(OSD)所在主机中。
图5为本发明一实施例提供提供分布式文件存储服务的装置结构示意图,该装置500应用于分布式对象存储系统(如Ceph)当中,该装置500包括:
元数据节点501(如NameNode),用于为客户端提供基于分布式文件系统(如HDFS)协议的元数据服务;
扩展数据节点502(如DataNode),用于为客户端提供基于分布式文件系统协议的数据服务,所述扩展数据节点负责将分布式文件系统协议的数据块读/写转换为对分布式对象存储系统存储池中对象的读/写。
其中的元数据节点501可部署于分布式对象存储系统中的管理节点或监控节点中,扩展数据节点502可部署于分布式对象存储系统中的对象存储设备所在主机中。
图6为本发明一实施例提供分布式文件存储服务的系统结构示意图,该系统,该系统600包括:
分布式对象存储系统601(如Ceph),用于基于可靠自动分布式对象存储集群即Rados集群提供分布式对象存储能力;
元数据节点501(如NameNode),部署于所述分布式对象存储系统中的管理节点或监控节点中,用于为客户端提供基于分布式文件系统协议的元数据服务;
扩展数据节点502(如DataNode),部署于所述分布式对象存储系统中的对象存储设备(OSD)所在主机中,用于为客户端提供基于分布式文件系统(如HDFS)协议的数据服务,所述扩展数据节点负责将分布式文件系统协议的数据块读/写转换为对分布式对象存储系统存储池中对象的读/写。
图7为本发明一实施例提供的用于实施提供分布式文件存储服务方法的电子设备结构示意图,该设备700包括:诸如中央处理单元(CPU)的处理器710、通信总线720、通信接口740以及存储器730。其中,处理器710与存储器730可以通过通信总线720相互通信。存储器730内存储有计算机程序,当该计算机程序被处理器710执行时即可实施本发明实施例提供的提供分布式文件存储服务方法中的一个或多个方法步骤的功能。
存储器是指基于某种存储介质用于存储计算机程序和/或数据的装置,它可以是易失性存储器(Volatile Memory,VM,常称为内存),也可以是非易失性存储器(Non-Volatile Memory,NVM)。内存是指与处理器直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,作为操作系统和其它运行程序的临时数据的存储介质。内存可以是同步动态随机存取内存(Synchronous Dynamic Random Access Memory,SDRAM)、动态随机存取内存(Dynamic Random Access Memory,DRAM)等。非易失性存储器是指采用持久化存储介质的存储器,具有容量大和可持久保存数据的特性,可以是存储级存储器(StorageClass Memory,SCM)、固态硬盘(Solid State Disk,SSD)、NAND闪存、磁盘等。SCM是业界对介于内存与闪存之间的新存储介质的统称,是一种同时结合持久化存储特性与内存特性的复合型储存技术,存取速度慢于DRAM快于SSD硬盘。
处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性(或称为非持久性)存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术,包括配置有计算机程序的非暂时性存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。此外,可按任何合适的顺序来执行本发明描述的过程的操作,除非本发明另外指示或以其他方式明显地与上下文矛盾。本发明描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本发明所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。
以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (13)

1.一种提供分布式文件存储服务的方法,其特征在于,该方法应用于分布式对象存储系统当中,该方法包括:
通过部署于分布式对象存储系统中的元数据节点为客户端提供基于分布式文件系统协议的元数据服务;
通过部署于分布式对象存储系统中的扩展数据节点为客户端提供基于分布式文件系统协议的数据服务,所述扩展数据节点负责将分布式文件系统协议的数据块读/写转换为对分布式对象存储系统存储池中对象的读/写。
2.根据权利要求1所述的方法,其特征在于,
所述扩展扩展数据节点基于分布式文件系统底层文件系统接口扩展实现分布式对象存储系统的存储池访问接口;
所述存储池访问接口通过读取扩展数据节点中配置的分布式对象存储系统中可靠自动分布式对象存储集群即Rados集群的连接信息实现对Rados集群的连接。
3.根据权利要求2所述的方法,其特征在于,
所述存储池访问接口从所述扩展数据节点的服务数据目录配置中获取要连接的存储池名称,创建用于操作所连接的存储池中对象的I/O上下文控制接口;
所述存储池访问接口根据文件系统I/O的输入流和输出流的标准抽象类分别实现操作Rados集群对象I/O的输入字节流和输出字节流类,通过输入字节流和输出字节流类封装所述I/O上下文控制接口读/写对象数据的细节。
4.根据权利要求3所述的方法,其特征在于,
基于分布式文件系统数据集接口扩展实现操作Rados集群中存储池的数据集工厂类和具体实现操作Rados集群中存储池的数据集执行类;
所述数据集执行类实例内部初始化时会根据所述扩展数据节点服务数据目录配置的存储池创建对应的Ceph存储池访问接口实例,所述存储池访问接口实例与配置的Rados集群存储池一一对应。
5.根据权利要求1所述的方法,其特征在于,
所述元数据节点部署于分布式对象存储系统中的管理节点或监控节点中;
所述扩展数据节点部署于分布式对象存储系统中的对象存储设备所在主机中。
6.一种提供分布式文件存储服务的装置,其特征在于,该装置应用于分布式对象存储系统当中,该装置包括:
元数据节点,用于为客户端提供基于分布式文件系统协议的元数据服务;
扩展数据节点,用于为客户端提供基于分布式文件系统协议的数据服务,所述扩展数据节点负责将分布式文件系统协议的数据块读/写转换为对分布式对象存储系统存储池中对象的读/写。
7.根据权利要求6所述的装置,其特征在于,
所述扩展数据节点基于分布式文件系统底层文件系统接口扩展实现分布式对象存储系统的存储池访问接口,通过存储池访问接口读取配置的分布式对象存储系统中可靠自动分布式对象存储集群即Rados集群的连接信息实现对Rados集群的连接。
8.根据权利要求7所述的装置,其特征在于,
所述扩展数据节点通过所述存储池访问接口从服务数据目录配置中获取要连接的存储池名称,创建用于操作所连接的存储池中对象的I/O上下文控制接口;
所述存储池访问接口根据文件系统I/O的输入流和输出流的标准抽象类分别实现操作Rados集群对象I/O的输入字节流和输出字节流类,通过输入字节流和输出字节流类封装所述I/O上下文控制接口读/写对象数据的细节。
9.根据权利要求7所述的装置,其特征在于,
所述扩展数据节点存储池访问接口由数据集执行类实例在内部初始化时根据服务数据目录配置的存储池创建,所述存储池访问接口实例与配置的Rados集群存储池一一对应;
具体实现操作Rados集群中存储池的数据集执行类由所述基于分布式文件系统数据集接口扩展实现的操作Rados集群中存储池的数据集工厂类创建。
10.根据权利要求6所述的装置,其特征在于,
所述元数据节点部署于分布式对象存储系统中的管理节点或监控节点中;
所述扩展数据节点部署于分布式对象存储系统中的对象存储设备所在主机中。
11.一种提供分布式文件存储服务的系统,其特征在于,该系统包括:
分布式对象存储系统,用于基于可靠自动分布式对象存储集群即Rados集群提供分布式对象存储能力;
元数据节点,部署于所述分布式对象存储系统中的管理节点或监控节点中,用于为客户端提供基于分布式文件系统协议的元数据服务;
扩展数据节点,部署于所述分布式对象存储系统中的对象存储设备所在主机中,用于为客户端提供基于分布式文件系统协议的数据服务,所述扩展数据节点负责将分布式文件系统协议的数据块读/写转换为对分布式对象存储系统存储池中对象的读/写。
12.根据权利要求11所述的系统,其特征在于,
所述扩展数据节点基于分布式文件系统底层文件系统接口扩展实现分布式对象存储系统的存储池访问接口,通过存储池访问接口读取配置的分布式对象存储系统中Rados集群的连接信息实现对Rados集群的连接。
13.一种电子设备,其特征在于,包括处理器、通信接口、存储介质和通信总线,其中,处理器、通信接口、存储介质通过通信总线完成相互间的通信;
存储介质,用于存放计算机程序;
处理器,用于执行存储介质上所存放的计算机程序时,实施权利要求1-5中任一项所述的方法步骤。
CN202410139108.2A 2024-01-31 2024-01-31 提供分布式文件存储服务的方法、装置和系统 Pending CN117931764A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410139108.2A CN117931764A (zh) 2024-01-31 2024-01-31 提供分布式文件存储服务的方法、装置和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410139108.2A CN117931764A (zh) 2024-01-31 2024-01-31 提供分布式文件存储服务的方法、装置和系统

Publications (1)

Publication Number Publication Date
CN117931764A true CN117931764A (zh) 2024-04-26

Family

ID=90759492

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410139108.2A Pending CN117931764A (zh) 2024-01-31 2024-01-31 提供分布式文件存储服务的方法、装置和系统

Country Status (1)

Country Link
CN (1) CN117931764A (zh)

Similar Documents

Publication Publication Date Title
US11226847B2 (en) Implementing an application manifest in a node-specific manner using an intent-based orchestrator
CN109344000B (zh) 区块链网络服务平台、恢复工具及其故障处理方法、存储介质
US9971823B2 (en) Dynamic replica failure detection and healing
US11392497B1 (en) Low latency access to data sets using shared data set portions
CN107797767B (zh) 一种基于容器技术部署分布式存储系统及其存储方法
WO2019226602A1 (en) Managing hosted resources across different virtualization platforms
US11080253B1 (en) Dynamic splitting of contentious index data pages
WO2022062304A1 (zh) 在容器云上部署图像识别服务的方法与设备
CN111857873A (zh) 一种实现云原生容器网络的方法
US11550713B1 (en) Garbage collection in distributed systems using life cycled storage roots
CN111338854A (zh) 基于Kubernetes集群快速恢复数据的方法及系统
US11593270B1 (en) Fast distributed caching using erasure coded object parts
CN103237046A (zh) 支持混合云存储应用的分布式文件系统及实现方法
CN109165206B (zh) 基于容器的hdfs高可用实现方法
US10203976B2 (en) Virtual appliance management in a virtualized computing environment based on operational modes associated with virtual appliance
CN107465709B (zh) 分布式镜像构建任务方法及装置、系统
CN115086166A (zh) 计算系统、容器网络配置方法及存储介质
EP4137957A1 (en) File sharing method and terminal device
CN105468643A (zh) 分布式文件系统的访问方法和系统
CN117931764A (zh) 提供分布式文件存储服务的方法、装置和系统
CN114661246A (zh) 一种存储控制的方法和装置
JP2010237742A (ja) 仮想マシンサーバ、仮想マシン制御方法及び仮想マシン制御プログラム
CN111708626A (zh) 数据访问方法、装置、计算机设备和存储介质
US11853783B1 (en) Identifying hosts for dynamically enabling specified features when resuming operation of a virtual compute instance
US11221799B2 (en) Techniques for clustering compute nodes in distributed storage

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination