CN113835870A - 数据处理方法及系统 - Google Patents

数据处理方法及系统 Download PDF

Info

Publication number
CN113835870A
CN113835870A CN202010581055.1A CN202010581055A CN113835870A CN 113835870 A CN113835870 A CN 113835870A CN 202010581055 A CN202010581055 A CN 202010581055A CN 113835870 A CN113835870 A CN 113835870A
Authority
CN
China
Prior art keywords
read
file
metadata
data
slice
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
CN202010581055.1A
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202010581055.1A priority Critical patent/CN113835870A/zh
Priority to PCT/CN2021/088588 priority patent/WO2021258831A1/zh
Publication of CN113835870A publication Critical patent/CN113835870A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]

Abstract

本申请提供了一种数据处理方法及系统,应用于数据处理系统,数据处理系统包括计算节点和存储节点,该数据处理方法包括以下步骤:计算节点获取待读取文件的元数据,然后,根据元数据中每个切片在待读取文件中的起始位置,并发读取每个切片的数据,最后按照每个切片在待读取文件中的起始位置的顺序,将每个切片的数据存储至内存空间。上述方法使得计算节点读取待读取文件时,可以根据待读取文件的元数据一次性申请能够容纳待读取文件的内存空间、并发读取待读取文件,提高数据读取的效率,进而提高整个AI或大数据任务的处理效率。

Description

数据处理方法及系统
技术领域
本申请涉及计算机领域,尤其涉及一种数据处理方法及系统。
背景技术
随着科学技术的不断发展,信息爆炸时代产生的海量数据已经渗透到当今每一个行业和业务职能领域,大数据(bigdata)和人工智能(artificial intelligence,AI)领域也随之得到了发展,成为两个非常热门的研究方向。
计算节点在执行大数据或者AI任务时,需要先将其他设备或者平台上的数据文件加载在计算节点的内存中,再由计算节点根据内存中的数据来完成大数据或者AI任务的相关运算处理。但是,由于数据量大且不能并发读取文件,计算节点读取文件的效率很低,而且计算节点将数据文件加载在内存中所需的时间甚至超过了计算节点根据内存中的数据完成大数据或者AI任务所需的时间,严重影响了大数据或者AI任务效率。
发明内容
本申请提供了一种数据处理方法及系统,可以提高计算节点读取文件的效率。
第一方面,提供了一种数据处理方法,应用于数据处理系统,该数据处理系统包括计算节点和存储节点,上述数据处理方法包括以下步骤:计算节点获取待读取文件的元数据,该元数据包括待读取文件的行数以及每个切片在待读取文件中的起始位置,然后,根据元数据中每个切片在待读取文件中的起始位置,并发读取每个切片的数据,最后按照每个切片在待读取文件中的起始位置的顺序,将每个切片的数据存储至内存空间,其中,内存空间是根据元数据中的行数申请得到的。
由于存储节点提前生成了待读取文件的元数据,使得计算节点读取待读取文件时,可以根据待读取文件的元数据获得待读取文件的行数以及每个切片在待读取文件中的起始位置,从而达到一次性申请内存空间,多个线程并发读取文件的目的,避免了由于无法确定待读取文件的行数导致多次扩充内存空间造成的资源浪费,又可以并发读取文件,使得计算节点读取文件的速度得到极大提升,进一步提升大数据和AI任务的处理效率。
在一种可能的实现方式中,待读取文件的元数据还可以包括切片数量,则在计算节点根据每个切片在待读取文件中的起始位置,并发读取每个切片的数据之前,计算节点可以根据切片数量创建多个线程,然后计算节点再调用多个线程并发读取每个切片的数据。简单来说,存储节点在生成元数据时,可以根据计算节点的硬件处理能力确定切片数量x,计算节点在读取元数据时,将根据该切片数量x与计算节点当前的处理能力,创建y个线程,并调用该y个线程并发读取x个切片。
可选地,多个线程的数量y可以等于切片数量x。此时每个线程处理一个切片,y个线程可以并行读取待读取文件,达到极佳的处理状态,使得计算节点读取文件的速度得到极大提升,进一步提升大数据和AI任务的处理效率。
可选地,多个线程的数量y可以小于切片数量x,创建的线程数量少于切片数量的情况下,可以先一个线程处理一个切片,然后在每个线程读取完1个切片后,继续从剩余切片中读取下一个切片,直至所有切片被读取完毕。还可以部分线程只处理一个切片,部分线程处理多个切片,对于需要处理p个切片的线程来说,可以直接从当前切片的起始位置读取至第p+1个切片的起始位置,从而达到一个线程处理多个切片的目的,进而实现线程数量少于切片数量的情况下并发读取待读取文件多个切片目的。
计算节点可以根据当前的处理能力灵活创建线程数量,如果处理器当前可创建的线程数量等于切片数量,此时可以调用多个线程并行读取待读取文件的多个切片,其中,一个线程只处理一个切,达到最佳的处理状态,极大地提升计算节点读取文件的效率;如果处理器当前可创建的线程数量低于线程数量,此时可以并发读取待读取文件的多个切片,一个线程可以处理多个切片,避免了由于计算节点当前负载重,处理能力降低导致并发读取失败的可能,线程数量减少也不会对并发读取文件产生影响,确保方案实现的可行性。在一种可能的实现方式中,待读取文件的元数据是存储节点根据待读取文件的数据类型确定待读取文件的元数据格式后,根据元数据格式和待读取文件生成的,其中,不同的数据类型的待读取文件的元数据格式不同。
存储节点提前对待读取文件进行解析,根据待读取文件的数据类型确定待读取文件的元数据格式,生成用于读取该待读取文件的元数据,然后将待读取文件的元数据存储下来,使得计算节点在读取文件时,可以根据待读取文件的元数据,有效初始化内存的数据结构,并发读取待读取文件,提高文件的读取效率。并且,元数据的可扩展性很强,可以根据各种类型的数据在读取时所需的各种信息,对元数据进行进一步的追加和丰富,使得本申请提供的方案的适用性非常广泛。
在另一种可能的实现方式中,待读取文件的元数据存储于待读取文件中,待读取文件的末尾包括元数据在待读取文件中的起始位置,这样,计算节点从存储节点获取待读取文件的元数据时,可以从待读取文件的末尾获得元数据在待读取文件中的起始位置,然后根据元数据在待读取文件中的起始位置,读取待读取文件的元数据。
可选地,待读取文件的元数据可以存储在该待读取文件的尾部,而在待读取文件的最尾端写有元数据头部偏移位置和校验掩码,其中,校验掩码位于元数据头部偏移位置之前,使得计算节点读取元数据时,可以将读取指针设置于文件尾部,然后逆向读取一定范围的内容,确定该范围内的数据是否存在校验掩码,如果存在校验掩码则将指针设置于校验掩码处,正向读取元数据头部偏移位置,然后将读取指针设置于该元数据头部偏移位置,正向读取数据获得该元数据。
将待读取文件的元数据存储于待读取文件中,计算节点可以从待读取文件的末尾获得元数据在待读取文件中的起始位置,然后进行元数据的读取,而无需存储节点额外划分资源来存储待读取文件的元数据,便于存储节点的文件管理,减轻存储节点的管理负担。
在另一种可能的实现方式中,待读取文件的元数据存储于存储节点的指定路径。
可选地,待读取文件的元数据存储位置与待读取文件的存储位置相同。
具体实现中,待读取文件和待读取文件的元数据包括共同标识,计算节点从存储节点获取待读取文件的元数据包括:计算节点从存储节点获取待读取文件的共同标识;计算节点根据待读取文件的共同标识,从指定路径或者待读取文件的存储位置获取待读取文件的元数据。
存储节点为待读取文件和对应的元数据设置共同标识后,将元数据存储在指定路径或者待读取文件的存储位置下,这样,计算节点在读取元数据时,可以根据共同标识从上述指定路径或者待读取文件的存储位置中获取元数据,而无需修改文件的读取逻辑,可适用于更多的计算节点。
在另一种可能的实现方式中,待读取文件的元数据包括校验信息,校验信息用于校验待读取文件的元数据存储至存储节点之后是否发生过变化,计算节点可以在根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片的数据之前,使用该校验信息对元数据进行校验,确认元数据在存储进存储节点之后,没有发生过数据丢失、损坏的情况下,再根据元数据并发读取待读取文件。具体地,计算节点可以在根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片的数据之前,上述方法还包括以下步骤:计算节点根据校验信息校验待读取文件的元数据在存储至存储节点后是否发生过变化,在待读取文件的元数据存储至存储节点之后未发生过变化的情况下,根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片的数据。
可选地,该校验信息可以包括校验掩码、元数据校验值、文件校验值、元数据格式版本以及文件格式版本等等,其中,校验掩码用于供计算节点确定此处为元数据头部,因此校验掩码通常位于元数据的头部。元数据校验值用于供计算节点确定元数据在存储至存储节点后是否发生过变化,如果发生变化说明元数据可能已损坏或丢失,计算节点可以使用其他业内通用的数据处理方法读取待读取文件。文件校验值用于供计算节点确定文件在存储至存储节点后是否发生过变化,如果发生变化说明文件可能已损坏或丢失,计算节点可以返回数据处理失败的消息。元数据格式版本用于供计算节点确定自身是否支持读取该格式版本的数据,如果不支持,计算节点可以使用其他业内通用的数据处理方法读取待读取文件。文件格式版本用于供计算节点确定自身是否支持读取该格式版本的文件,如果不支持,计算节点可以使用其他业内通用的数据处理方法读取待读取文件。应理解,上述校验信息还可以包括更多或更少的内容,本申请不作具体限定。并且,验证上述校验信息的方法可以使用业内通用的校验方法,比如哈希校验、sha256校验等等,本申请不作具体限定。
计算节点在根据元数据调用多个线程并发读取待读取文件之前,可以先读取元数据头部的校验信息,以确定该元数据在存储至存储节点之后是否发生过改变,在没有发生过改变的情况下,再使用元数据读取待读取文件,从而避免由于元数据发生改变导致计算节点根据错误的元数据信息来读取文件这一情况的发生,提高本申请提供方案的可行性。
在另一种可能的实现方式中,待读取文件的元数据还包括数据类型,在数据类型是稠密矩阵的情况下,元数据还包括特征值类型,特征值类型用于供计算节点初始化内存空间的数据结构,计算节点根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片的数据之前,还可以包括以下步骤:计算节点根据数据类型初始化内存空间的数据结构。计算节点可以根据元数据中的特征值类型初始化内存数据结构,确保待读取文件不会由于内存数据结构错误而导致数据处理失败,提高待读取文件的读取效率。
在另一种可能的实现方式中,数据类型是稀疏矩阵的情况下,由于稀疏矩阵的存储形式为:总共包括3行字符,每个数据都通过该3行字符来保存,一行字符表示每个数据对应的“数据列索引”,一行字符表示每个数据对应的“数据值”,一行字符表示每个数据对应的“行数据量”,因此,待读取文件的元数据还包括值数量,值数量用于申请用于存放数据值以及数据列索引的第一内存空间,计算节点根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片之前,上述方法还包括以下步骤:计算节点根据值数量申请用于存放数据值以及数据列索引的第一内存空间,根据行数申请用于存放行数据量的第二内存空间,根据第一内存空间和第二内存空间获得内存空间。
在待读取文件的数据类型是稀疏矩阵的情况下,计算节点可以根据元数据中的值数量和行数申请内存空间,确保数据类型为稀疏矩阵的待读取文件可以一次性申请内存空间,而无需多次扩充内存空间,避免了资源浪费,提高待读取文件的读取效率。
在另一种可能的实现方式中,数据类型是稀疏矩阵的情况下,每个切片在待读取文件中的起始位置包括每个切片的数据列索引起始位置、每个切片的数据值起始位置以及每个切片的行数据量起始位置,计算节点按照每个切片在待读取文件中的起始位置的顺序,将每个切片的数据存储至内存空间包括:计算节点根据每个切片的数据列索引起始位置的顺序以及每个切片的数据值的起始位置的顺序,将每个切片的数据列索引以及数据值存储至第一内存空间,根据每个切片的行数据量的起始位置的顺序,将每个切片的行数据量存储至第二内存空间。
在待读取文件的数据类型是稀疏矩阵的情况下,计算节点可以根据每个切片在待读取文件中的起始位置包括每个切片的数据列索引起始位置、每个切片的数据值起始位置以及每个切片的行数据量起始位置读取稀疏矩阵的三行数据,确保数据类型为稀疏矩阵的待读取文件也可以被并发读取,提高待读取文件的读取效率。
第二方面,提供了另一种数据处理方法,应用于数据处理系统,该数据处理系统包括计算节点和存储节点,上述数据处理方法包括以下步骤:存储节点获取待读取文件,然后根据待读取文件,获得待读取文件的元数据,其中,该待读取文件的元数据包括待读取文件的切片数量、行数、以及每个切片在待读取文件中的起始位置,其中,行数用于供计算节点申请用于存放待读取文件的内存空间,切片数量用于供计算节点创建多个线程,每个切片在待读取文件中的起始位置用于供计算节点调用多个线程,并发读取每个切片的数据,并按照每个切片在待读取文件在中的起始位置的顺序,将每个切片的数据存储至内存空间,最后存储节点存储待读取文件的元数据。
由于存储节点提前生成了待读取文件的元数据,使得计算节点读取待读取文件时,可以根据待读取文件的元数据确定待读取文件的长度、切片数量以及每个切片在待读取文件中的起始位置等信息,从而达到一次性申请内存空间,多个线程并发读取文件的目的,不仅避免了由于无法确定数据类型导致内存空间数据结构初始化有误、数据处理失败的问题,还避免了由于无法确定待读取文件的行数导致多次扩充内存空间造成的资源浪费,又可以并发读取文件,使得计算节点读取文件的速度得到极大提升,进一步提升大数据和AI任务的处理效率。
在一种可能的实现方式中,存储节点获得待读取文件的元数据的具体流程可以如下:存储节点对待读取文件进行解析,确定待读取文件的数据类型,然后根据待读取文件的数据类型,确定待读取文件的元数据格式,其中,不同的数据类型的待读取文件的元数据格式不同,最后根据待读取文件的元数据格式和待读取文件,生成待读取文件的元数据。
存储节点提前对待读取文件进行解析,根据待读取文件的数据类型确定待读取文件的元数据格式,生成用于读取该待读取文件的元数据,然后将待读取文件的元数据存储下来,使得计算节点在读取文件时,可以根据待读取文件的元数据,有效初始化内存的数据结构,并发读取待读取文件,提高文件的读取效率。并且,元数据的可扩展性很强,可以根据各种类型的数据在读取时所需的各种信息,对元数据进行进一步的追加和丰富,使得本申请提供的方案的适用性非常广泛。
在另一种可能的实现方式中,存储节点存储待读取文件的元数据的具体步骤可以如下:存储节点将待读取文件的元数据存储于待读取文件中,待读取文件的末尾包括元数据在待读取文件中的起始位置,使得计算节点从待读取文件的末尾获得元数据在待读取文件中的起始位置后,根据元数据在待读取文件中的起始位置,读取待读取文件的元数据。
待读取文件的元数据可以存储在该待读取文件的尾部,而在待读取文件的最尾端写有元数据头部偏移位置和校验掩码,其中,校验掩码位于元数据头部偏移位置之前,使得计算节点读取元数据时,可以将读取指针设置于文件尾部,然后逆向读取一定范围的内容,确定该范围内的数据是否存在校验掩码,如果存在校验掩码则将指针设置于校验掩码处,正向读取元数据头部偏移位置,然后将读取指针设置于该元数据头部偏移位置,正向读取数据获得该元数据。
将待读取文件的元数据存储于待读取文件中,计算节点可以从待读取文件的末尾获得元数据在待读取文件中的起始位置,然后进行元数据的读取,而无需存储节点额外划分资源来存储待读取文件的元数据,便于存储节点的文件管理,减轻存储节点的管理负担。
在另一种可能的实现方式中,存储节点存储待读取文件的元数据的具体步骤可以如下:存储节点将待读取文件的元数据存储于存储节点的指定路径。
在另一种可能的实现方式中,存储节点存储待读取文件的元数据的具体步骤可以如下:存储节点将待读取文件的元数据存储于待读取文件的存储位置。
在另一种可能的实现方式中,待读取文件和待读取文件的元数据包括共同标识,共同标识用于供计算节点根据共同标识从指定路径或者待读取文件的存储位置获取待读取文件的元数据。
存储节点为待读取文件和对应的元数据设置共同标识后,将元数据存储在指定路径或者待读取文件的存储位置下,这样,计算节点在读取元数据时,可以根据共同标识从上述指定路径或者待读取文件的存储位置中获取元数据,而无需修改文件的读取逻辑,可适用于更多的计算节点。
应理解,本申请提供了上述两种元数据存储的方式,具体实现中,可以根据应用环境来灵活确定元数据的存储方式,使得本申请提供的数据处理方法和数据处理方法应用更加广泛。
在另一种可能的实现方式中,待读取文件的元数据包括校验信息,校验信息用于供计算节点校验待读取文件的元数据在存储至存储节点后是否发生过变化。
可选地,该校验信息可以包括校验掩码、元数据校验值、文件校验值、元数据格式版本以及文件格式版本等等,其中,校验掩码用于供计算节点确定此处为元数据头部,因此校验掩码通常位于元数据的头部。元数据校验值用于供计算节点确定元数据在存储至存储节点后是否发生过变化,如果发生变化说明元数据可能已损坏或丢失,计算节点可以使用其他业内通用的数据处理方法读取待读取文件。文件校验值用于供计算节点确定文件在存储至存储节点后是否发生过变化,如果发生变化说明文件可能已损坏或丢失,计算节点可以返回数据处理失败的消息。元数据格式版本用于供计算节点确定自身是否支持读取该格式版本的数据,如果不支持,计算节点可以使用其他业内通用的数据处理方法读取待读取文件。文件格式版本用于供计算节点确定自身是否支持读取该格式版本的文件,如果不支持,计算节点可以使用其他业内通用的数据处理方法读取待读取文件。应理解,上述校验信息还可以包括更多或更少的内容,本申请不作具体限定。并且,验证上述校验信息的方法可以使用业内通用的校验方法,比如哈希校验、sha256校验等等,本申请不作具体限定。
存储节点将校验信息写入待读取文件的元数据头部,使得计算节点在根据元数据调用多个线程并发读取待读取文件之前,可以先读取元数据头部的校验信息,以确定该元数据在存储至存储节点之后是否发生过改变,在没有发生过改变的情况下,再使用元数据读取待读取文件,从而避免由于元数据发生改变导致计算节点根据错误的元数据信息来读取文件这一情况的发生,提高本申请提供方案的可行性。
在另一种可能的实现方式中,待读取文件的元数据还包括数据类型,数据类型是稠密矩阵的情况下,元数据还包括特征值类型,特征值类型用于供计算节点根据特征值类型初始化内存空间的数据结构。
存储节点将特征值类型放入稠密矩阵的元数据中,使得计算节点可以根据元数据中的特征值类型初始化内存数据结构,确保待读取文件不会由于内存数据结构错误而导致数据处理失败,提高待读取文件的读取效率。
在另一种可能的实现方式中,数据类型是稀疏矩阵的情况下,由于稀疏矩阵的存储形式为:总共包括3行字符,每个数据都通过该3行字符来保存,一行字符表示每个数据对应的“数据列索引”,一行字符表示每个数据对应的“数据值”,一行字符表示每个数据对应的“行数据量”,因此,待读取文件的元数据还包括值数量,数据类型是稀疏矩阵的情况下,待读取文件包括数据值、数据列索引以及行数据量,元数据还包括值数量,值数量用于供计算节点申请用于存放数据值以及数据列索引的第一内存空间,行数用于供计算节点申请用于存放行数据量的第二内存空间,待读取文件的内存空间包括第一内存空间和第二内存空间。
在待读取文件的数据类型是稀疏矩阵的情况下,存储节点将数据值放入稀疏矩阵的元数据中,计算节点可以根据元数据中的值数量和行数申请内存空间,确保数据类型为稀疏矩阵的待读取文件可以一次性申请内存空间,而无需多次扩充内存空间,避免了资源浪费,提高待读取文件的读取效率。
在另一种可能的实现方式中,数据类型是稀疏矩阵的情况下,每个切片在待读取文件中的起始位置包括每个切片的数据列索引起始位置、每个切片的数据值起始位置以及每个切片的行数据量起始位置。
在待读取文件的数据类型是稀疏矩阵的情况下,计算节点可以根据每个切片在待读取文件中的起始位置包括每个切片的数据列索引起始位置、每个切片的数据值起始位置以及每个切片的行数据量起始位置读取稀疏矩阵的三行数据,确保数据类型为稀疏矩阵的待读取文件也可以被并发读取,提高待读取文件的读取效率。
第三方面,提供了一种计算节点,包括用于执行第一方面或第一方面任一种可能实现方式中的数据处理方法的各个模块。
第四方面,提供了一种存储节点,包括用于执行第二方面或第二方面任一种可能实现方式中的数据处理方法的各个模块。
第五方面,提供了一种数据处理系统,包括计算节点和存储节点,计算节点用于实现如第一方面或第一方面任意一种可能的实现方式中所描述的方法的操作步骤,存储节点用于实现如第二方面或第二方面任意一种可能的实现方式中描述的方法的操作步骤。
第六方面,提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
第七方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍:
图1是本申请提供的一种多核处理器的架构示意图;
图2是本申请提供的一种数据处理系统的架构示意图;
图3是本申请提供的一种数据处理系统的结构示意图;
图4是本申请提供的一种数据处理方法的步骤流程示意图;
图5~图6是本申请提供的元数据格式的示意图;
图7是本申请提供的一种包含有元数据的待读取文件的格式;
图8是本申请提供的一种数据处理方法的步骤流程示意图;
图9是本申请提供的另一种数据处理方法的流程示意图;
图10是本申请提供的另一种数据处理方法的流程示意图;
图11是本申请提供的另一种数据处理方法的流程示意图;
图12是本申请提供的一种计算节点的结构示意图;
图13是本申请提供的一种服务器的结构示意图;
图14是本申请提供的一种存储阵列的结构示意图。
具体实施方式
为了便于理解本申请的技术方案,首先,对本申请涉及的部分术语进行解释说明。值得说明的是,本申请的实施方式部分使用的术语仅用于对本申请的具体实施例进行解释,而非旨在限定本申请。
大数据:无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。大数据技术的战略意义在于对海量数据进行专业化处理,处理后的数据可以应用于各个行业,包括金融、汽车、餐饮、电信、能源等等,举例来说,利用大数据技术和物联网技术的无人驾驶汽车,利用大数据技术分析客户行为进行商品推荐、利用大数据技术实现信贷风险分析等等。
人工智能:利用数字计算机或者数字计算机控制的计算节点模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。人工智能的应用场景十分广泛,比如人脸识别、车辆识别、行人重识别、数据处理应用等等。AI的底层模型是一种实现AI的数学方法集合,可以使用大量的样本对AI模型进行训练来使训练完成的AI模型获得预测的能力,其中,用于训练AI模型的样本可以是从大数据平台获取的样本。
并发:两个或多个事件在同一段时间内同时发生,在操作系统的任务处理中,并发则是指在一段时间内有多个线程操作相同资源处理相同或不同的任务。需要注意的是,并发包括多个线程在一段时间内同时操作(并行),也包括多个线程在一段时间内分时交替操作。
内核(core):处理器的内核又称为处理器的核心,是处理器的重要组成部分。内核可以理解为处理器的可执行单元,处理器所有的计算、接收/存储命令、数据处理等任务都由核心执行。
线程(thread):线程是操作系统能够进行运算调度的最小单位。一个内核至少对应一个线程,通过超线程技术,一个内核还可以对应两个及以上的线程,即同时运行多个线程。
多核处理器:处理器中可以部署有一个或多个内核。若处理器中部署的内核个数M不小于2,则处理器称为多核处理器。图1是一种多核处理器芯片的结构示意图,其中,图1以M=8为例进行描述,如图1所示,多核处理器100的八个内核分为第一内核101、第二内核102、第三内核103、第四内核104、第五内核105、第六内核106、第七内核107以及第八内核108。其中,第一内核为主内核,负责任务调度(task scheduling),比如根据每个内核适合处理的任务以及是否空闲等因素,将任务合理分配到其它内核进行处理。多核处理器中还包括用于存储数据的内存109,如双倍速率同步动态随机存储器(doubledata ratesynchronous dynamic random access memory,DDR SDRAM)。其中,每个内核与内存以总线(bus)110的方式进行连接,且每个内核可以通过共享内存的方式访问内存中的数据。应理解,并发处理是多核处理器的优势所在,多核处理器可以在特定的时钟周期内调用多个线程并发处理更多的任务。
多CPU多核处理器:又称为多片多核处理器,该处理器包含了多个如图1所示的多核处理器芯片。多个多核处理器芯片通过互连结构(interconnect)相连,互连结构可以通过多种实现方式实现,譬如总线。
下面结合附图进一步介绍本申请涉及的应用场景。
图2是一种大数据或者AI任务处理系统的架构示意图,图2也可以称为一种数据处理系统的架构示意图,该数据处理系统用于计算节点实现文件的读取过程和存储节点实现文件的存储过程。该系统包括计算节点210、存储节点220以及数据采集节点230,其中,计算节点210和存储节点220上的处理器通常为图1所示的多核处理器100或者多CPU多核处理器。存储节点220、数据采集节点230和计算节点210之间通过网络连接,该网络可以是有线网络,也可以是无线网络,还可以是二者的混合。
其中,计算节点210和存储节点220可以是物理服务器,比如X86服务器、ARM服务器等等;也可以是基于通用的物理服务器结合网络功能虚拟化(network functionsvirtualization,NFV)技术实现的虚拟机(virtual machine,VM),虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,比如云数据中心内的虚拟机,本申请不作具体限定。存储节点220还可以是其他具有存储功能的存储设备,如存储阵列。应理解,计算节点以及存储节点220可以是单个物理服务器或者单个虚拟机,还可以构成计算机集群,本申请不作具体限定。
数据采集节点230可以是一个硬件设备,例如,物理服务器或物理服务器组成的集群,还可以是软件,例如,服务器中部署的数据收集系统、虚拟机,数据收集系统可收集其他服务器中存储的数据,比如收集网站服务器中的日志信息,也可收集其他硬件设备采集的数据,应理解,上述举例仅用于说明,本申请不作具体限定。
值得注意的,附图2是本申请实施例提供的一种系统架构的示意图,图中所示节点、模块等之间的位置关系不构成任何限制。举例来说,图2中的计算节点210、存储节点220以及数据采集节点230均以独立的三个设备或者服务器集群为例进行了说明,具体实现中,计算节点210、存储节点220以及数据采集节点230还可以是同一个服务器集群或服务器,或者计算节点210和存储节点220是同一个服务器集群或服务器等等,本申请不作具体限定。
在图2所示的系统中,数据采集节点230采集各种原始数据,并将其发送至存储节点220,存储节点220对接收到的原始数据进行数据处理后,生成待读取文件并存储在存储节点220中,应理解,由于原始数据的来源十分广泛,数据结构十分复杂,因此存储节点220需要将原始数据“翻译”为一种统一且能够被处理器直接读写的格式进行存储,其中,数据处理可以包括数据清洗、特征提取、格式转换等等,本申请不作具体限定。计算节点210从存储节点220中读取各种待读取文件,将其加载在计算节点210的内存109中,计算节点210的多核处理器100根据内存109中的数据来完成大数据或者AI任务的相关运算。图2以第二内核102完成AI任务,第三内核103完成大数据任务为例进行了说明,具体实现中,多核处理器100可以并发处理多个任务,多个内核在特定的时钟周期内可以处理同一个AI任务、同一个大数据任务或者同一个数据处理的任务,本申请不对此进行具体限定。
举例来说,假设数据采集节点230为部署有特定服务(例如,Kafka和/或Flume)的云服务器,其中,Kafka用于提供高吞吐、高可扩展的分布式消息队列服务,而Flume是高可靠、高可用、分布式的海量日志采集、聚合和传输系统。存储节点220为部署有分布式文件系统(hadoop distributed file system,HDFS)的计算机集群,其中,存储节点220上还可以部署有数据处理系统,比如Spark,其中,Spark是一个用于大规模数据处理的统一分析引擎。计算节点210为部署有Spark-ML的计算机集群,其中,Spark-ML用于处理机器学习(machine learning,ML)任务。
在上述例子中,部署有Kafka和/或Flume的云服务器(数据采集节点230)可以先产生海量原始数据,并将原始数据保存在HDFS(存储节点220)中,存储节点220的Spark可以读取原始数据进行数据处理,比如对原始数据进行特征提取、格式转换等等,将原始数据转换为可以被机器学习或者大数据处理的数据格式,生成待读取文件并将其保存在HDFS中。最后,Spark-ML(计算节点230)从HDFS中读取待读取文件,将其加载在内存109中,多核处理器100根据内存109中的内存数据进行机器学习任务,比如k均值聚类算法(k-meansclustering algorithm,K-means)或者线性回归(linear regression)处理。
综上可知,计算节点210在进行大数据、机器学习等任务时,需要先从存储节点220读取待读取文件,将待读取文件加载在计算节点210的内存109中(图2中的步骤1),再由计算节点210根据内存109中的数据来完成大数据或者机器学习任务的相关运算(图2中的步骤2)。
接下来,结合附图3以数据处理方法为例进一步介绍本申请提供的数据处理方法。
本申请提供了如图3所示的一种数据处理系统400,应理解,使用图3所示的数据处理系统400在图2所示的应用场景中进行数据处理,可以大大提高计算节点210数据处理的速度,进而提高计算节点210处理大数据或者AI任务的效率。
如图3所示,该数据处理系统400包括计算节点210以及存储节点220,计算节点210和存储节点220的具体形态和连接方式可以参考图1实施,这里不重复赘述。
存储节点220包括元数据生成单元221,元数据生成单元221用于生成待读取文件的元数据,元数据记录有待读取文件的基础信息,该基础信息至少包括待读取文件的行数、最大切片数量以及每个切片在待读取文件中的起始位置,比如待读取文件的最大切片数量为3,行数为9,切片1的起始位置为待读取文件的第1行,切片2的起始位置为待读取文件的第4行,切片3的起始位置为待读取文件的第7行。具体实现中,元数据还可以包括更多的信息,比如特征值类型、列数等等,具体可以根据待读取文件的数据类型确定,本申请不作具体限定。
需要说明的,元数据生成单元221只记录待读取文件的最大切片数量和每个切片在待读取文件中的起始位置,不会对待读取文件进行真正的切片,待读取文件以未切片的状态完整存储在存储节点220中。并且,元数据可以是以一个单独文件的形态与待读取文件一同存储在存储节点中个,也可以是与待读取文件整合为一个数据处理在存储节点中,元数据具体的存储过程将在下文图4实施例中的步骤S520进行描述。
具体实现中,元数据生成单元221可以在存储节点220接收到原始数据时,根据该原始数据生成相应的元数据,也可以在存储节点220对原始数据进行数据处理(比如前述内容的数据清洗、特征提取以及格式转换等)之后,生成待读取文件之前,对数据处理后的数据生成相应的元数据,还可以在存储节点220已生成待读取文件之后,根据待读取文件生成对应的元数据,本申请不对元数据生成单元221的输入数据进行限定。
计算节点210包括元数据读取单元211和切片读取单元212,其中,元数据读取单元211用于读取待读取文件的元数据,切片读取单元212用于根据元数据确定待读取文件的行数、切片数量x以及每个切片在待读取文件中的起始位置,根据行数申请一段用于存放待读取文件的内存空间,然后向y个线程发送数据读取请求(y是小于或等于x的整数,比如切片数量为3,线程的数量可以是1或2或3,其中y等于x时多个线程可以并行读取待读取文件的多个切片),其中,每个数据读取请求都携带一个切片在待读取文件中的起始位置和之前申请的内存空间的地址,比如线程1接收到的数据读取请求携带切片1在待读取文件中的起始位置,线程2接收到的数据读取请求携带切片2在待读取文件中的起始位置,线程3接收到的数据读取请求携带切片3在待读取文件中的起始位置。最后,响应于该数据读取请求,y个线程根据接收到的切片的起始位置,并发读取待读取文件的切片,并按照每个切片在待读取文件中的起始位置的顺序,将读取到的切片写入上述内存空间。
值得注意的是,图3以一个内核对应一个线程为例(比如图3中的内核1对应线程1,内核2对应线程2,内核3对应线程3)进行了说明,具体实现中,如果计算节点210的多核处理器或者多片多核处理器使用了超线程技术,一个内核还可以对应多个线程,比如内核1对应线程1和线程2,内核2对应线程3,或者,内核1对应线程1~线程3等等,从而达到多个内核并发读取文件的目的,提高资源利用率,提高数据处理效率。
仍以前述例子为例,假设数据采集节点230为部署有Kafka和/或Flume的云服务器,存储节点220为部署有HDFS和Spark的计算机集群,计算节点210为部署有Spark-ML的计算机集群,那么上述元数据生成单元221可以部署于Spark,元数据读取单元211和切片读取单元212可以部署于Spark-ML。
在上述例子中,部署有Kafka和/或Flume的云服务器(数据采集节点230)可以先产生海量原始数据,并将原始数据保存在HDFS(存储节点220)中,存储节点220的Spark可以先读取原始数据进行数据处理,比如对原始数据进行特征提取、格式转换等等,然后根据数据处理后的数据,生成待读取文件和对应的元数据,再将待读取文件和对应的元数据保存在HDFS中,最后,Spark-ML(计算节点230)从HDFS中读取待读取文件时,先读取待读取文件的元数据,然后根据该元数据中的信息,申请一段连续的内存空间,再调用多个线程并发读取待读取文件,将其加载在之前申请的内存空间中,再根据内存109中的内存数据进行机器学习任务。计算节点230在读取待读取文件时,不但可以并发读取,还可以避免多次申请内存和多次拷贝数据造成的资源浪费,使得数据处理的效率得到极大提升。
需要说明的,元数据读取单元211在读取元数据之前,将会判断待读取文件是否存在对应的元数据,在待读取文件没有元数据的情况下,可以通知一个线程中的切片读取单元212按照当前业界已有的数据处理方法进行待读取文件的读取,本申请不对此进行限定。
综上可知,本申请提供的数据处理系统,该系统中的存储节点220在计算节点210读取待读取文件之前,提前生成了待读取文件的元数据,使得计算节点210读取待读取文件时,可以根据待读取文件的元数据确定待读取文件的长度、切片数量以及每个切片在待读取文件中的起始位置等信息,从而达到一次性申请内存空间,多个线程并发读取文件的目的,不仅避免了由于无法确定数据类型导致内存空间数据结构初始化有误、数据处理失败的问题,还避免了由于无法确定待读取文件的行数导致多次扩充内存空间造成的资源浪费,又可以并发读取文件,使得计算节点210读取文件的速度得到极大提升,进一步提升大数据和AI任务的处理效率。
下面对本申请提供的适用于上述数据处理系统400的数据处理方法以及数据处理方法进行解释说明。
参考前述内容可知,在计算节点210读取文件之前,存储节点220需要根据待读取文件生成对应的元数据,然后将待读取文件和对应的元数据存储在存储节点220中,因此下面先结合图5,对本申请提供数据处理方法进行详细说明。
如图5所示,元数据存储节点220生成元数据的具体流程可以包括以下步骤:
S510:从数据采集节点230获取待读取文件,并对待读取文件进行解析,获得待读取文件的元数据。
可以理解的,如果元数据的信息不足,计算节点210读取文件时仍可能出现数据处理效率低的问题,如果元数据过于丰富,又会增加计算节点210读取元数据所需的时间,降低元数据读取效率,元数据包含的信息对后续数据处理的效率有着很大影响,为此,本申请提供了多种元数据格式以适应各种应用场景。具体实现中,存储节点对待读取文件进行解析后,可以先确定待读取文件的数据类型,然后根据待读取文件的数据类型,确定待读取文件的元数据格式,其中,不同的数据类型的待读取文件的元数据格式不同,最后根据元数据格式和待读取文件的解析结果,生成所述待读取文件的元数据。
下面对本申请提供的元数据的格式进行简要说明。
参考前述内容可知,元数据记录有待读取文件的基础信息,该基础信息至少包括待读取文件的行数、最大切片数量、以及每个切片在待读取文件中的起始位置,因此,
示例性的,该元数据的格式可以如图5所示,其中,元数据的格式至少包括基础信息610,基础信息610包括:
(1)行数,用于标识待读取文件所包含的总行数,供计算节点210申请用于存放待读取文件的内存空间。
(2)切片数量,用于标识每个待读取文件所包含的切片的数量,供计算节点210申请多个线程来并发读取待读取文件。
需要说明的,该切片数量通常为待读取文件的最大切片数量,该最大切片数量是一个经验值。可以理解的,如果待读取文件的切片数量过多,将会导致待读取文件的元数据长度过大,影响计算节点210读取元数据的速度,如果待读取文件的切片数量过少,将会导致计算节点210在并发读取待读取文件时,有一部分内核仍处于空闲状态,造成资源浪费。因此,待读取文件的最大切片数量可以根据计算节点210的内核数量确定,比如最大切片数量等于计算节点210处理器核数量,或者最大切片数量与处理器核数量呈一定的比例关系,本申请不作具体限定。
(3)每个切片的起始位置,用于供每个线程并发读取待读取文件,每个线程可以根据一个切片在待读取文件中的起始位置,读取一个待读取文件的切片并将其放入之前申请的内存空间中,从而完成待读取文件的并发读取,提高待读取文件的读取效率。
具体实现中,每个切片的起始位置可以是每个切片在待读取文件中起始位置的偏移值和行号,每个线程可以根据该行号和下一个切片的起始位置的行号,确定该切片的长度l,然后将读指针设置为该偏移值,读取长度为l的切片。当然,每个切片的起始位置还可以包括更多或者更少的内容,比如只有每个切片在待读取文件中的起始位置的偏移值,或者每个切片的起始位置还包括每个切片的长度,本申请不对此进行限定。
在一实施例中,由于数据在存储节点220中可能会出现数据缺失或者改变的情况,比如元数据的信息部分缺失、或者待读取文件的数据内容发生了改变等等,从而影响计算节点210根据元数据并发读取文件的效率,因此元数据还可以包括校验信息,该校验信息用于提高元数据的可靠性。
可选的,如图5所示,元数据除了包括上述基础信息610,还可以包括校验信息620,其中,校验信息620包括:
(4)校验掩码,用于供计算节点210确认此处为元数据的头部,因此校验掩码位于元数据的头部,计算节点210从元数据头部开始读取元数据时,可以先对元数据头部的校验掩码进行校验,本申请不作具体限定。如果计算节点210对校验掩码校验成功,证明当前读指针所处的位置是元数据的头部,计算节点210可以开始读取元数据,并根据元数据调用多个线程并发读取待读取文件;如果计算节点210对校验掩码校验失败,则表示当前指针所处的位置不是元数据的头部,计算节点210可以不再使用元数据进行待读取文件的读取,而是调用切片读取单元212按照当前业界已有的数据处理方法进行待读取文件的读取,本申请不对此进行限。具体实现中,该校验掩码可以用二进制数值表示,加快处理效率;
(5)元数据校验值,用于检查元数据信息内容是否发生改变;
(6)文件校验值,用于检查待读取文件中的数据内容是否发生改变;
(7)元数据格式版本,用于记录当前元数据信息的格式版本,计算节点读取元数据时,如果不支持读取最新格式的元数据信息,还可以兼容旧版本的文件;
(8)文件格式版本,用于记录当前待读取文件的格式信息。
值得注意的是,计算节点210读取元数据时,可以先读取校验信息620,确认元数据和待读取文件的数据内容没有发生改变、且版本格式也兼容后,可以再读取基础信息610,然后调用多个线程并发读取待读取文件,因此,图5所示的元数据格式中校验信息620位于基础信息610之前,当然,也可以使用其他方式确保计算节点先读取校验信息620再读取元数据的其他信息,本申请不作具体限定。
应理解,图5中的校验信息(4)~(8)用于举例说明,元数据还可以包括更多或者更少种类的校验信息以确保元数据的可靠性,这里不作具体限定。而校验上述(4)~(6)使用的方法可以使用业内通用的校验方法,比如哈希(hash)校验、sha256校验等等,本申请不对此进行具体限定。
在一实施例中,计算节点在读取不同数据类型的待读取文件时所需的信息不同,比如在AI领域中,待读取文件的数据类型通常为稠密矩阵或者稀疏矩阵,当待读取文件的数据类型为稠密矩阵时,计算节点210需要根据稠密矩阵每列特征值的字符串类型来初始化内存数据结构,以保证待读取文件不会解析错误以及丢失;而当待读取文件的数据类型为稀疏矩阵时,计算节点210则不需要获取矩阵每列特征值,而要根据稀疏矩阵值的数量来申请用于分别保存“数据值”以及“数据列索引”的内存空间,因此不同类型的元数据格式也会有改变,下面以稠密矩阵这一数据类型为例,对元数据格式进行描述。
可选的,如图5所示,元数据除了包括上述基础信息610以及校验信息620,还可以包括类型信息630,应理解,不同数据类型的元数据有着不同的类型信息630,图5这里以数据类型为“稠密矩阵”为例进行说明,数据类型为稠密矩阵的情况下,该类型信息630包括:
(9)数据类型,用于描述待读取文件的数据类型的名称,图5这里以数据类型为“稠密矩阵”为例进行说明。
(10)特征值类型,用于描述稠密矩阵的特征值的类型,比如类型是字符串等等,不同类型的特征值需要不同数据结构的内存空间来存储,因此计算节点210可以根据稠密矩阵的特征值的类型来初始化内存空间的数据结构,以保证待读取文件不会解析错误以及丢失。
值得注意的是,由于计算节点210读取不同数据类型的待读取文件,将会执行不同的读取逻辑对待读取文件进行读取,比如稠密矩阵需要额外初始化内存空间的数据结构,因此图5中数据类型630位于基础信息610之前,这样,计算节点210先根据校验信息620对元数据和待读取文件进行校验,然后根据类型信息630确定计算节点210的读取逻辑,最后根据基础信息610和读取逻辑,调用多个线程并发读取待读取文件。当然,也可以使用其他方式确保读取各种元数据信息的顺序,本申请不作具体限定。
应理解,待读取文件的数据类型不同,元数据格式也不同,类型信息630中的内容也不同,举例来说,如图6所示,如果元数据的(9)数据类型为“稀疏矩阵”,类型信息630将不包括(10),而额外包括:
(11)值数量,用于保存稀疏矩阵的值的数量,计算节点210可以根据稀疏矩阵值的数量申请内存空间。应理解,由于稀疏矩阵的存储形式为:总共包括3行字符,每个数据都通过该3行字符来保存,一行字符表示每个数据对应的“数据列索引”,一行字符表示每个数据对应的“数据值”,一行字符表示每个数据对应的“行数据量”,因此,对于稀疏矩阵来说,(1)行数用来申请存放“行数据量”的第一内存空间,(11)值数量用来申请存放“数据值”以及“数据列索引”的第二内存空间。
并且,数据类型为稀疏矩阵的待读取文件的元数据的基础信息610中,(3)每个切片的起始位置将进一步分为:
(3.1)每个切片的数据列索引起始位置;
(3.2)每个切片的数据值起始位置;
(3.3)每个切片的行数据量起始位置。
这样,每个线程可以根据一个切片三行数据的起始位置读取该切片的数据量索引、数据值以及对应的行数据量,并将该切片按稀疏矩阵的三行格式写入上述申请的内存空间,具体地,计算节点210可以根据每个切片的数据列索引起始位置、每个切片的数据值起始位置以及每个切片的行数据量起始位置,调用多个线程并发读取每个切片的数据值以及每个切片的数据列索引至第一内存空间,调用多个线程并发读取每个切片的行数据量至第二内存空间,获得待读取文件实现多个线程并发读取多个切片的目的。
在一实施例中,出于对处理器处理性能的考虑,在一些应用场景中,计算节点210在读取数据类型为稀疏矩阵的待读取文件时,可以将待读取文件的数据类型由稀疏矩阵转化为稠密矩阵后存储在内存空间,该转化过程中,计算节点210需要提前获知稀疏矩阵的列数以及每个数据的原始行数,这里的原始行数指的是原始数据被转化为稀疏矩阵存储在存储节点220之前,在原始数据中所处行的行数,因此,在数据类型为稀疏矩阵的情况下,类型信息630还可以包括(12)列数,(3.3)每个切片的行数据量起始位置包括每个切片的行数据量的偏移值以及原始行数,这样,每个线程可以根据每个切片三行数据的起始位置读取该切片的数据量索引、数据值以及对应的行数据量,并将该切片按原始数据的行数和列数写入内存空间,实现多个线程并发读取稀疏矩阵的多个切片,并将稀疏矩阵转换为稠密矩阵写入内存空间的目的。
应理解,图5~图6所示的元数据格式仅用于举例说明,具体实现中,本申请提供的方案不仅适用于上述数据类型(稀疏矩阵和稠密矩阵),还适用于其他可以被逐条或者分批读取的数据类型,比如Libsvm格式的数据,这里不再一一进行举例和展开说明。并且,不同数据类型的元数据还可以包括更多或者更少的内容,具体可以根据计算节点在读取待读取文件时所需的信息来确定元数据需要包含的内容,这里不一一展开赘述。S520:存储元数据和待读取文件。
存储节点220将元数据存储在指定路径,或者,将元数据存储在待读取文件的存储位置,其中,待读取文件和待读取文件的元数据包含共同标识,比如待读取文件和待读取文件的元数据的文件名相同,但是扩展名不同。举例来说,待读取文件(dataA.exp)的存储路径为/pathA/pathB/…/pathN/dataA.exp,其中,exp为待读取文件的通用数据格式,具体可以是csv、libsvm等等,假设元数据扩展名为metadata,该待读取文件的元数据(dataA.metadata)的存储路径为pathA/pathB/…/pathN/dataA.metadata。这样,当计算节点210读取待读取文件时,可以直接从待读取文件的读取路径中查找包含共同标识的查找待读取文件对应的元数据。当然,存储节点220也可以将所有文件的元数据存储在指定路径,计算节点21读取待读取文件时,可以从指定路径根据共同标识查找待读取文件对应的元数据。
可选的,存储节点220还可以将待读取文件的元数据存储于待读取文件中,待读取文件的末尾包括元数据在待读取文件中的起始位置,这样,计算节点210读取元数据时,可以直接从待读取文件的末尾先逆向读取一定长度的数据确定元数据的头部在待读取文件中的位置,具体可以是元数据头部偏移值,然后将读指针设置于该元数据头部偏移值进行读取,从而获得待读取文件的元数据。
示例性地,元数据追加在待读取文件的尾部后,包含有元数据的待读取文件的格式可以如图7所示。其中,假设原文件共有N行数据,元数据被追加在待读取文件的尾部,并且,元数据的末尾也追加了(13)校验掩码和(14)元数据头部偏移位置,其中,
(13)校验掩码,校验掩码一般位于“(14)元数据头部偏移位置”之前,用于供计算节点210确认(14)的首位,计算节点210可以从待读取文件的尾部逆向读取一定范围的内容,确定该范围内的内容是否存在目标格式的(13)校验掩码,如果存在目标格式的(13)校验掩码,即可接着读取(14)元数据头部偏移位置;
(14)元数据头部偏移位置,用于供计算节点210确定元数据的头部在待读取文件中的位置,图7所示的例子中,元数据头部的偏移位置可以是第N+1行。
简单来说,计算节点210在读取待读取文件时,可以先将读指针设置到文件尾部,然后以逆向的方式读取尾部文件一定范围内的内容,并对其进行模式匹配,确定该范围内的内容是否存在目标格式的校验掩码,如果不存在目标格式的校验掩码,计算节点210将以业内通用的数据处理方法读取待读取文件,如果存在目标格式的校验掩码,则将读取指针设置于该校验掩码,正向读取数据获得元数据头部偏移位置信息,再将读指针设置到该偏移位置,然后读取元数据,根据元数据调用多个线程并发读取待读取文件。
举例来说,校验掩码可以是“#HWBDFORMAT”,元数据信息头部偏移位置可以是#12345678,计算节点210读取待读取文件时,可以先将读指针设置于文件尾部,然后以逆向的方式读取尾部文件一定范围内的内容,确定该范围内的内容是否存在#HWBDFORMAT这一固定格式,如果存在该格式的校验掩码,接着读取校验掩码之后的(14)元数据头部偏移位置,然后将指针设置到该偏移位置“12345678”,开始读取元数据。
需要说明的,图7所示的包含有元数据的待读取文件的格式仅用于举例说明,本申请不作具体限定。
本申请提供了上述两种元数据存储的方式,具体实现中,可以根据应用环境来选择元数据存储的方式,可以理解的,将元数据以相同文件名存储在待读取文件的存储路径下这一方法,计算节点的数据处理逻辑无需作出任何修改,可复用性强,但是会增加存储节点220文件管理的负担;而将元数据直接追加在待读取文件的末尾这一方法,无需生成多余的文件,便于存储节点220的文件管理,但是需要修改计算节点的数据处理逻辑,使得计算节点可以先从文件末尾读取元数据,再根据元数据读取待读取文件,如果计算节点210无法修改数据处理逻辑,则需要将元数据剥离后才可以供计算节点210使用。因此,具体实现中,可以根据应用环境来灵活确定元数据的存储方式,使得本申请提供的数据处理方法和数据处理方法应用更加广泛。
可以理解的,本申请提供的数据处理方法中,由存储节点220提前对待读取文件进行解析,根据待读取文件的数据类型确定待读取文件的元数据格式,生成用于读取该待读取文件的元数据,然后将待读取文件的元数据存储下来,使得计算节点在读取文件时,可以根据待读取文件的元数据,有效初始化内存的数据结构,并发读取待读取文件,提高文件的读取效率。并且,元数据的可扩展性很强,可以根据各种类型的数据在读取时所需的各种信息,对元数据进行进一步的追加和丰富,使得本申请提供的方案的适用性非常广泛。
下面对计算节点210读取待读取文件的方法进行解释说明。本申请提供的数据处理方法可应用于图4所述的数据处理系统400的计算节点210中,如图8所示,该方法包括以下步骤:
S810:计算节点210从存储节点220获取待读取文件的元数据,其中,待读取文件的元数据包括待读取文件的切片数量、行数、以及每个切片在待读取文件中的起始位置。
参考前述内容可知,元数据的存储方式有两种,因此,计算节点210获取待读取文件的元数据的方法也有两种,下面将分别对两种元数据获取方法进行解释说明。
在一实施例中,如果存储节点220存储元数据的方式为:待读取文件的元数据存储在所述存储节点的指定路径,或者,待读取文件的元数据存储位置与待读取文件的存储为值相同,那么在存储待读取文件的元数据时,待读取文件和待读取文件的元数据包括共同标识,比如待读取文件和对应元数据的文件名相同,格式不同,此时步骤S810可以包括以下步骤:计算节点210从存储节点220获取待读取文件的共同标识比如待读取文件的文件名,然后根据待读取文件的文件名,从指定路径或者待读取文件的存储位置获取该待读取文件的元数据。如果元数据文件存在,则读取该元数据文件,并根据元数据文件申请内存空间、创建线程,调用线程并发读取待读取文件;如果元数据文件不存在,则使用业内通用的数据处理方法进行数据处理,本申请不作具体限定。
仍以前述例子为例,假设存储节点220生成了待读取文件dataA.exp以及对应的元数据dataA.metadata,即待读取文件和元数据之间共同标识为相同的文件名,然后将待读取文件和元数据一同存储在/pathA/pathB/…/pathN,那么计算节点210在读取待读取文件dataA.exp时,可以在dataA.exp的存储路径/pathA/pathB/…/pathN下查找与待读取文件名相同的元数据,也就是dataA.metadata,或者根据存储路径/pathA/pathB/…/pathNdataA.metadata查找元数据文件是否存在,如果元数据文件存在,则读取该文件,并根据元数据读取信息,如果元数据文件不存在,则使用业内通用的数据处理方法进行数据处理,本申请不作具体限定。
在一实施例中,如果存储节点220存储元数据的方式为:读取文件的元数据存储于待读取文件中,比如待读取文件的尾部,此时步骤S810可以包括以下步骤:从待读取文件的末尾获得元数据在待读取文件中的起始位置,具体可以是元数据头部的偏移值,根据该元数据头部的偏移值读取元数据。
仍以图7所示的内容格式为例,计算节点210在读取如图7所示的格式的待读取文件时,可以先将读指针设置到文件尾部,然后以逆向的方式读取尾部文件一定范围内的内容,并对其进行模式匹配,确定该范围内的内容是否存在目标格式的(13)校验掩码,如果不存在目标格式的(13)校验掩码,计算节点210将以业内通用的数据处理方法读取待读取文件,如果存在目标格式的(13)校验掩码,则接着读取(13)校验掩码之后的(14)元数据头部偏移位置,将读指针设置到该偏移位置,然后读取元数据。
需要说明的,无论使用何种方式获取元数据时,如果元数据文件不存在,计算节点210可以使用业内通用的数据处理方法进行数据处理,并对待读取文件进行数据解析,然后将解析结果返回至存储节点220,以供存储节点220根据解析结果生成待读取文件的元数据,这样,当其他计算节点210读取待读取文件时,存储节点220可以将元数据返回至该计算节点210,以供该计算节点根据元数据并发读取待读取文件。
S820:计算节点根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片的数据,其中,多个线程是计算节点根据切片数量创建的。
可选地,线程的数量y可以等于切片数量x。此时每个线程处理一个切片,y个线程可以并行读取待读取文件,达到极佳的处理状态,使得计算节点读取文件的速度得到极大提升,进一步提升大数据和AI任务的处理效率。
可选地,线程的数量y可以小于切片数量x。参考前述内容可知,待读取文件的切片数量x是根据计算节点210的硬件处理能力确定的,而在计算节点210读取待读取文件时,计算节点210当前可能部分核在处理其他事项,比如正在进行大数据任务或者AI任务,此时计算节点210可创建的线程数量y可以小于切片数量x。
举例来说,如果元数据显示待读取文件的最大切片数量为10,计算节点210的内核数量为10,如果当前计算节点210全部内核都处于空闲状态,计算节点210可以直接创建10个线程,调用10个线程并行读取待读取文件的切片,达到最佳的处理状态,计算节点读取文件的速度最快,处理效率最高;如果计算节点210当前3个内核在处理大数据任务,只有7个内核处于空闲状态,那么计算节点210可以创建7个线程G1~G7,调用7个线程并发读取待读取文件的10个切片。应理解,上述举例仅用于说明,本申请不作具体限定。
S830:计算节点按照每个切片在待读取文件中的起始位置的顺序,将每个切片的数据存储至内存空间,其中,内存空间是计算节点根据行数申请得到的。
参考前述内容可知,每个切片在待读取文件中的起始位置可以是每个切片在待读取文件中起始位置的偏移值和行号,因此,每个线程读取到切片的数据后,可以根据该切片起始位置的偏移值的大小顺序或者行号的大小顺序,调用多个线程将多个切片并发写入该内存空间。
具体实现中,当创建的线程数量少于切片数量的情况下,可以先一个线程处理一个切片,然后在每个线程读取完1个切片后,继续从剩余切片中读取下一个切片,直至所有切片被读取完毕。仍以上述例子为例,计算节点210创建了7个线程G1~G7来读取待读取文件,而待读取文件的切片数量为10,那么线程G1~G7可以先并发读取切片1~切片7,则线程1处理完切片1以后,继续从剩余切片中取一个切片进行读取,比如切片8待处理,则线程1处理完切片1后继续处理切片8,其他线程也按照同样策略去执行,直到处理完所有切片。应理解,上述举例仅用于说明,本申请不作具体限定。
具体实现中,当创建的线程数量少于切片数量的情况下,还可以部分线程只处理一个切片,部分线程处理多个切片,从而达到并行处理多个切片的目的。参考前述内容可知,切片的起始位置可以包括每个切片的起始位置在待读取文件中的偏移值和行号,每个线程可以根据要读取的切片的起始位置的行号和下一个切片的起始位置的行号,确定要读取的切片的长度,这样,部分线程可以根据当前切片的长度和下一个切片的长度,从当前切片的起始位读取多个切片。仍以上述例子为例,线程数量为7,而切片数量为10,那么可以分配4个切片供线程1~线程4并发读取,分配6个切片供线程5~线程7并发读取,其中,线程5可以从第5个切片的起始位置读取到第7个切片的起始位置,线程6可以从第7个切片的起始位置读取到第9个切片的起始位置,线程7可以是从第9个切片的起始位置读取到文件结尾。应理解,上述举例用于说明,本申请不作具体限定。
举例来说,如图9所示,假设待读取文件共有9行数据,每行数据分别用L1~L9来表示,假设待读取文件的元数据为:(1)行数=9;(2)切片数量=3;(3)每个切片的起始位置=切片1的偏移值w1以及行号1;切片2的偏移值w4以及行号4;切片3的偏移值w7以及行号7。因此,如图9所示,计算节点210读取待读取文件的元数据后,计算节点210可以根据切片数量3申请3个线程G1~G3,然后根据行数9从内存109中申请一段能够容纳9行数据的内存空间n0,再调用3个线程并发读取待读取文件至内存空间n0。其中,线程G1读取切片1,线程G2读取切片2,线程G3读取切片3,具体地,线程G1根据切片1的行号1和下一个切片(切片2)的行号4确定切片1的长度为3行,线程G2根据切片2的行号3和下一个切片(切片3)的行号7确定切片2的长度为3行,线程G3根据切片4的行号7和总行数9确定切片3的长度为3行,然后线程G1将读指针设置到偏移值w1并读取3行数据L1~L3至内存空间n0的前三行,线程G2将读指针设置到偏移值w4并读取3行数据L4~L6至内存空间n0的3至6行,线程G3将读指针设置到偏移值w7并读取3行数据L7~L9至内存空间n0的最后三行,其中,线程G1、G2以及G3并发处理上述任务,从而完成一次文件的并发读取。
综上可知,本申请提供的数据处理方法,存储节点220在计算节点210读取待读取文件之前,提前生成了待读取文件的元数据,使得计算节点210从存储节点220读取待读取文件时,可以根据待读取文件的元数据确定待读取文件的长度、切片数量以及每个切片在待读取文件中的起始位置等信息,从而达到一次性申请内存空间,多个线程并发读取文件的目的,不仅避免了由于无法确定数据类型导致内存空间数据结构初始化有误、数据处理失败的问题,还避免了由于无法确定待读取文件的行数导致多次扩充内存空间造成的资源浪费,又可以并发读取文件,使得计算节点210读取文件的速度得到极大提升,进一步提升大数据和AI任务的处理效率。
上述步骤S810~步骤S830是本申请提供的通用的数据读取方法,参考前述内容可知,不同数据类型的待读取文件的元数据格式不同,因此在不同应用场景下的数据读取流程有着细微差别,为了使本申请能够被更好的理解,下面结合一具体的应用场景,以存储节点220将待读取文件和对应的元数据以相同的文件名存储在同一路径下,且待读取文件的数据类型为稠密矩阵,元数据格式如图5所示为例,对上述计算节点210根据该元数据读取待读取文件的读取过程进行详细说明。
如图10所示,该应用场景下计算节点210从存储节点220获取待读取文件的元数据的步骤流程可以如下:
S1001:获取待读取文件的读取路径。/pathA/pathB/pathC/…/pathN/dataA.exp,其中,exp为通用数据格式,比如scv、libsvm等。
S1002:在同路径或者指定路径根据共同标识查找待读取文件对应的元数据是否存在,如果存在执行步骤S1003,如果不存在执行步骤S1011。假设元数据扩展名为metadata,可以在同路径查找/pathA/pathB/pathC/…/pathN/data.metadata,确定待读取文件dataA.exp的元数据dataA.metadata是否存在。
S1003:打开并加载元数据文件。
S1004:获取元数据文件的(4)校验掩码,并对(4)校验掩码进行验证,该校验掩码验证成功的情况下,表明该位置是元数据文件的头部,可以开始读取元数据文件,即执行步骤S1005;该校验掩码验证失败的情况下,表明该位置不是元数据文件的头部,计算节点210可以停止读取元数据,通过其他方法读取待读取文件,即执行步骤S1011。
S1005:获取(5)元数据校验值,并对其进行验证,该元数据校验值验证成功的情况下,表明元数据在存储至存储节点220之后没有发生过改变,计算节点210可以根据该元数据中的内容读取待读取文件,继续执行步骤S1006;该元数据校验值验证失败的情况下,表明元数据可能由于数据丢失等原因发生过改变,计算节点210可以停止读取元数据,并执行步骤S1011。
具体实现中,可以根据元数据存储时的数据长度等信息按照一定规则生成(5)元数据校验值,这样,当计算节点210在读取元数据时,可以根据当前元数据的数据长度等信息按照同样的规则生成一个用于验证的校验值,如果该校验值与(5)元数据校验值相等,则证明元数据信息没有发生过改变,可以继续执行步骤S1006;如果不等则证明元数据信息可能因为数据丢失等原因发生了改变。应理解,上述(5)元数据校验值的实现方式仅用于举例说明,本申请不对元数据校验值的校验方法具体限定。
S1006:获取(6)文件校验值,并对其进行验证,文件校验值验证成功的情况下,表示待读取文件在存储后没有发生过改变,继续执行步骤S1007;文件校验值验证失败的情况下,表示待读取文件在存储后可能由于数据丢失等原因发生过改变,计算节点210可以停止读取待读取文件,返回读取失败的信息,即执行步骤S1012。
具体实现中,计算节点210可以先确定该文件校验值是否有效,避免某些存储节点220没有生成文件校验值,导致(6)文件校验值的部分是无意义的字符串,因此,如果文件校验值是无效的,可以直接执行步骤S1007,如果校验值有效,可以对该校验值进行验证,文件校验值验证成功的情况下,继续执行步骤S1007;文件校验值验证失败的情况下,计算节点210可以停止读取待读取文件,返回读取失败的信息,即执行步骤S1012。
S1007:获取(7)元数据格式版本、(8)文件格式版本以及(9)数据类型,比如,格式版本为V1,文件格式为CSV,数据类型为稠密矩阵,确定当前计算节点210是否支持处理元数据格式版本为V1,文件格式为CSV,数据类型为稠密矩阵的待读取文件,在支持的情况下,计算节点210可以执行步骤S1008,在不支持的情况下执行步骤S1011。
S1008:根据行数(1)申请用于加载待读取文件的内存空间,并根据(10)特征值类型初始化内存空间的数据结构。
S1009:计算节点210获取切片数量(2)为x,根据处理器当前所拥有的内核数量和处理器处理能力,创建y个线程,其中,y小于或等于x。当然,也可以提前设置好每次读取文件使用的线程数量为y’,如果y’不大于x,即可申请y’个线程进行数据处理,如果y’大于x,可以申请x个线程进行数据处理。
S1010:每个线程按照队列的顺序并发读取所有切片至上述内存空间。
如果线程数量等于切片数量,此时可以线程1读取切片1,线程2读取切片2,并以此类推,使得多个线程可以并行读取多个切片,极大提高待读取文件的读取效率,进而提高整个大数据或AI任务的处理效率。
如果线程数量少于切片数量,比如线程数量为8,切片数量为16,那么先一个线程处理一个切片,每个线程处理完当前切片后,继续从剩余切片中取一个切片继续处理,比如线程1处理完切片1后,切片9待处理,线程1可以继续处理切片9,其他线程也按照同样策略去执行,直到处理完所有切片,具体可以通过轮询调度算法(round-robin scheduling)实现上述过程,这里不展开赘述。
当然,也可以是根据每个切片的起始位置确定每个切片的长度后,直接将全部切片分配各全部线程,仍以上述例子为例,线程数量为8但切片数量为16,先确定每个切片的长度l1~l16,然后分配线程1读取切片1~2,线程1直从切片1的起始位置读取l1+l2长度的数据,将切片1和切片2读取至内存空间,线程2直从切片3的起始位置读取l3+l4长度的数据,将切片3和切片4读取至内存空间等等,本申请不作具体限定。
S1011:计算节点210通过其他方法读取待读取文件,比如业内通用的其他数据处理方法,这里不作具体限定。
S1012:计算节点210停止读取待读取文件,返回待读取文件数据出错,读取失败的信息。
可以理解的,上述数据处理方法,通过提前在存储节点220中存储待读取文件的元数据,使得计算节点210从存储节点220读取待读取文件时,可以根据元数据有效初始化内存空间,避免数据结构错误导致读取失败,还可以根据元数据一次性申请能够容纳待读取文件的内存空间,避免多次扩增内存空间带来的资源占用浪费,还可以根据元数据并发读取待读取文件,提高数据读取的效率,进而提高整个AI任务以及大数据任务的处理效率。并且,该元数据可以追加更多的信息,以增加数据安全性可靠性等功能要求,可扩展性很强。
下面结合另一具体的应用场景,对上述步骤S810~步骤S830进行举例说明,其中,该应用场景中存储节点220将元数据按照图7所示的方式存储在待读取文件尾部,且待读取文件的数据类型为稀疏矩阵,元数据格式如图6所示为例,对上述计算节点210根据该元数据读取待读取文件的读取过程进行详细说明。
如图11所示,该应用场景下计算节点210从存储节点220获取待读取文件的元数据的步骤流程可以如下:
S1101:打开待读取文件。
S1102:确定文件大小(FileSize)后,设置当前读指针到文件尾部;
S1103:逆向的方式读取尾部文件一定范围内的内容,并判断该范围内的内容中是否存在匹配格式(即(13)校验掩码的格式),存在的情况下,证明该位置是元数据的(13)校验掩码,即可执行步骤S1104。如果不存在,则表示该文件没有追加元数据,计算节点210可以使用通用的数据处理方法进行数据处理,即执行步骤S1112。
S1104:获取校验掩码(13)之后的元数据头部偏移位置(14),将读指针偏移至该元数据头部偏移值,开始读取元数据文件;
S1105:获取元数据中的(4)校验掩码,并对(4)校验掩码进行二次验证,进一步确认该位置是否是元数据的头部位置,该校验掩码验证成功的情况下,即执行步骤S1106;该校验掩码验证失败的情况下,即执行步骤S1112。具体可以参考前述步骤S1004,这里不重复赘述。
S1106:获取(5)元数据校验值,并对其进行验证,该元数据校验值验证成功的情况下,继续执行步骤S1107;该元数据校验值验证失败的情况下,执行步骤S1112。具体可以参考前述步骤S1005,这里不重复赘述。
S1107:获取文件校验值(6),并对其进行验证,文件校验值验证成功的情况下,表示待读取文件在存储后没有发生过改变,继续执行步骤S1108;文件校验值验证失败的情况下,表示待读取文件在存储后可能由于数据丢失等原因发生过改变,计算节点210可以停止读取待读取文件,执行步骤S1113。具体可以参考前述步骤1012,这里不重复赘述。
S1108:获取(7)元数据格式版本、(8)文件格式版本以及(9)数据类型,比如,格式版本为V2,文件格式为CSV,数据类型为稀疏矩阵,确定当前计算节点210是否支持处理元数据格式版本为V2,文件格式为CSV,数据类型为稀疏矩阵的待读取文件,在支持的情况下,计算节点210可以执行步骤S1109,在不支持的情况下执行步骤S1112。
S1109:根据行数(10)值数量申请用于存放数据值以及数据列索引的内存空间,根据(1)行数申请用于存放行数据量的内存空间。
S1110:计算节点210获取切片数量(2)为x,再根据处理器当前所拥有的内核数量和处理器处理能力,创建y个线程,其中,y不小于或等于x。具体可以参考前述步骤S1009,这里不重复赘述。
S1111:每个线程并发读取待读取文件的多个切片至内存空间,具体可参考前述内容的步骤S1010,这里不重复赘述。
需要说明的,对于数据类型为稀疏矩阵的待读取文件,计算节点210在调用多个线程并发读取待读取文件时,可以根据每个切片的数据列索引起始位置、每个切片的数据值起始位置以及每个切片的行数据量起始位置,调用多个线程并发读取每个切片的数据值以及每个切片的数据列索引至第一内存空间,调用多个线程并发读取每个切片的行数据量至第二内存空间,获得待读取文件。
并且,出于对处理器处理性能的考虑,在一些应用场景中,计算节点210需要将稀疏矩阵转化为稠密矩阵后,再将其加载入内存空间,因此,每个线程可以根据元数据中的(1)行数、(12)列数、(10)值数量等信息,将稀疏矩阵转化为稠密矩阵后再写入内存空间,具体可以参考图6实施例,这里不重复赘述。
可以理解的,如果不使用本申请提供的方法读取稀疏矩阵,计算节点210需要读取完整个待读取文件后,首先解析出待读取文件的行数、列数以及值数量等信息之后,再将稀疏矩阵转换为稠密矩阵,而使用本申请提供的方法,多个线程可以根据元数据中的行数、列数以及值数量等信息,在并发读取切片时直接将切片以稠密矩阵的形式写入内存空间,从而避免了将稀疏矩阵全部读取完再转化为稠密矩阵的过程,提高稀疏矩阵这一数据类型的待读取文件的读取效率。
S1112:计算节点210通过其他方法读取待读取文件,比如业内通用的其他数据处理方法,这里不作具体限定。
S1113:计算节点210停止读取待读取文件,返回待读取文件数据出错,读取失败的信息。
可以理解的,上述数据处理方法,通过提前在存储节点220中存储待读取文件的元数据,使得计算节点210从存储节点220读取待读取文件时,可以先根据元数据有效初始化内存空间,避免数据结构错误导致读取失败,还可以根据元数据一次性申请用于存放待读取文件的内存空间,避免多次扩增内存空间带来的资源占用浪费,还可以根据元数据并发读取待读取文件,提高数据读取的效率,进而提高整个AI任务以及大数据任务的处理效率,还可以根据元数据,将数据类型为稀疏矩阵的待读取文件直接转换为稠密矩阵加载入内存,提高稀疏矩阵的读取效率,并且,该元数据可以追加更多的信息,以适应更多类型的数据文件的读取,使得该数据处理方法的适用性非常广泛。
上面详细阐述了本申请实施例的方法,为了便于更好的实时本申请实施例上述方案,相应地,下面还提供用于配合实施上述方案的相关设备。
图12是本申请提供的一种计算节点210的结构示意图,该计算节点210应用于图3所示的数据处理系统400,计算节点210包括:
元数据读取单元211,用于获取待读取文件的元数据,其中,待读取文件的元数据包括待读取文件的切片数量、行数、以及每个切片在待读取文件中的起始位置;
切片读取单元212,用于根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片的数据,其中,多个线程是计算节点根据切片数量创建的;
切片读取单元212还用于按照每个切片在待读取文件中的起始位置的顺序,将每个切片的数据存储至内存空间,其中,内存空间是计算节点根据行数申请得到的。
可选地,待读取文件的元数据是存储节点根据待读取文件的数据类型确定待读取文件的元数据格式后,根据元数据格式和待读取文件生成的,其中,不同的数据类型的待读取文件的元数据格式不同。
可选地,待读取文件的元数据存储于待读取文件中,待读取文件的末尾包括元数据在待读取文件中的起始位置,元数据读取单元211用于从待读取文件的末尾获得元数据在待读取文件中的起始位置;元数据读取单元211用于根据元数据在待读取文件中的起始位置,读取待读取文件的元数据。
可选地,待读取文件的元数据存储于存储节点的指定路径。
可选地,待读取文件的元数据存储位置与待读取文件的存储位置相同。
可选地,待读取文件和待读取文件的元数据包括共同标识,元数据读取单元211用于从存储节点获取待读取文件的共同标识;元数据读取单元211用于根据待读取文件的共同标识,从指定路径或者待读取文件的存储位置获取待读取文件的元数据。
可选地,待读取文件的元数据包括校验信息,校验信息用于校验待读取文件的元数据在存储至存储节点后是否发生过变化,切片读取单元212用于在根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片的数据之前,根据校验信息校验待读取文件的元数据在存储至存储节点后是否发生过变化;切片读取单元212用于在待读取文件的元数据在存储至存储节点后未发生过变化的情况下,根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片的数据。
可选地,待读取文件的元数据还包括数据类型,数据类型是稠密矩阵的情况下,元数据还包括特征值类型,特征值类型用于供计算节点根据特征值类型初始化内存空间的数据结构,切片读取单元212用于在根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片的数据之前,根据数据类型初始化内存空间的数据结构。
可选地,数据类型是稀疏矩阵的情况下,待读取文件包括数据值、数据列索引以及行数据量,元数据还包括值数量,值数量用于申请用于存放数据值以及数据列索引的第一内存空间,切片读取单元212用于根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片之前,根据值数量申请用于存放数据值以及数据列索引的第一内存空间;切片读取单元用于根据行数申请用于存放行数据量的第二内存空间,根据第一内存空间和第二内存空间获得用于存放待读取文件的内存空间。
可选地,数据类型是稀疏矩阵的情况下,每个切片在待读取文件中的起始位置包括每个切片的数据列索引起始位置、每个切片的数据值起始位置以及每个切片的行数据量起始位置;切片读取单元211用于在按照每个切片在待读取文件中的起始位置的顺序,将每个切片的数据存储至内存空间之前,根据每个切片的数据列索引起始位置的顺序以及每个切片的数据值的起始位置的顺序,将每个切片的数据列索引以及数据值存储至第一内存空间,根据每个切片的行数据量的起始位置的顺序,将每个切片的行数据量存储至第二内存空间。
应理解的是,本申请实施例的计算节点210可以通过专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logicdevice,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。也可以通过软件实现图1至图11中所示的数据处理方法时,计算节点210及其各个模块也可以为软件模块。
根据本申请实施例的计算节点210可对应于执行本申请实施例中描述的方法,并且计算节点210中的各个单元的上述和其它操作和/或功能分别为了实现图1至图11中的各个方法的相应流程,为了简洁,在此不再赘述。
综上可知,本申请提供计算节点在进行数据读取时,由存储节点220在计算节点210读取待读取文件之前,提前生成了待读取文件的元数据,使得计算节点210从存储节点220读取待读取文件时,可以根据待读取文件的元数据确定待读取文件的长度、切片数量以及每个切片在待读取文件中的起始位置等信息,从而达到一次性申请内存空间,多个线程并发读取文件的目的,不仅避免了由于无法确定数据类型导致内存空间数据结构初始化有误、数据处理失败的问题,还避免了由于无法确定待读取文件的行数导致多次扩充内存空间造成的资源浪费,又可以并发读取文件,使得计算节点210读取文件的速度得到极大提升,进一步提升大数据和AI任务的处理效率。
图13为本申请实施例提供的一种服务器1300的结构示意图。其中,服务器1300可以是图1-图11实施例中的计算节点210以及存储节点220。如图13所示,服务器1300包括:处理器1310、通信接口1320以及存储器1330。其中,处理器1310、通信接口1320以及存储器1330可以通过内部总线1340相互连接,也可通过无线传输等其他手段实现通信。本申请实施例以通过总线1340连接为例,总线1340可以是外设部件互连标准(peripheralcomponent interconnect,PCI)总线或扩展工业标准结构(extended industry standardarchitecture,EISA)总线等。总线1340可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器1310可以由至少一个通用处理器构成,例如CPU,或者CPU和硬件芯片的组合。上述硬件芯片可以是ASIC、PLD或其组合。上述PLD可以是CPLD、FPGA、GAL或其任意组合。处理器1310执行各种类型的数字存储指令,例如存储在存储器1330中的软件或者固件程序,它能使计算节点210提供多种服务。处理器1310可以是图1所示的多核处理器,也可以是多CPU多核处理器,本申请不作具体限定。
在服务器1300是计算节点210的情况下,存储器1330用于存储程序代码,并由处理器1310来控制执行,以执行上述图1-图11中任一实施例中计算节点210的处理步骤。程序代码中可以包括一个或多个软件模块,这一个或多个软件模块可以为图1实施例中提供的计算节点210的软件单元,如元数据读取单元、切片读取单元等等,其中,元数据读取单元用于从存储节点获取待读取文件的元数据;切片读取单元用于根据切片数量和计算节点的处理器的处理能力创建多个线程,并根据行数申请用于存放待读取文件的内存空间;切片读取单元还用于根据每个切片在待读取文件中的起始位置,调用多个线程,并发读取每个切片至内存空间,获得待读取文件。具体可用于执行图8和图9实施例中的S810-步骤S830及其可选步骤、图10实施例中的步骤S1001~步骤S1012及其可选步骤、图11实施例中的步骤S1101~步骤S1113及其可选步骤,还可以用于执行图1-图11实施例描述的其他由计算节点210执行的步骤,这里不再进行赘述。
在服务器1300是存储节点220的情况下,存储器1330用于存储程序代码,并由处理器1310来控制执行,以执行上述图1-图11中任一实施例中存储节点210的处理步骤。程序代码可以包括一个或多个软件模块,这一个或多个软件模块可以为图1实施例中提供的存储节点220的软件单元,如元数据生成单元,其中,元数据生成单元用于从存储节点220根据待读取文件,获得待读取文件的元数据,待读取文件的元数据包括待读取文件的切片数量、行数、以及每个切片在待读取文件中的起始位置。具体可用于执行图5实施例中的S510-步骤S520及其可选步骤,还可以用于执行图1-图11实施例描述的其他由存储节点220执行的步骤,这里不再进行赘述。
存储器1330可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM);存储器1030也可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM)、快闪存储器(flash memory)、硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器1330还可以包括上述种类的组合。存储器还存储有程序代码,在服务器1300是计算节点210的情况下,具体可以包括用于执行图1-图11实施例描述由计算节点执行的步骤的程序代码,在服务器1300是存储节点220的情况下,具体可以包括用于执行图1-图11实施例描述的有存储节点执行的步骤的程序代码,并且,存储有待读取文件以及待读取文件的元数据。
通信接口1320可以为有线接口(例如以太网接口),可以为内部接口(例如高速串行计算机扩展总线(peripheral component interconnect express,PCIe)总线接口)、有线接口(例如以太网接口)或无线接口(例如蜂窝网络接口或使用无线局域网接口),用于与与其他设备或模块进行通信。
需要说明的是,本实施例可以是通用的物理服务器实现的,例如,ARM服务器或者X86服务器,也可以是基于通用的物理服务器结合NFV技术实现的虚拟机实现的,虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,比如在本实施例可以在云计算基础设施上实现。
需要说明的,图13仅仅是本申请实施例的一种可能的实现方式,实际应用中,服务器1300还可以包括更多或更少的部件,这里不作限制。关于本申请实施例中未示出或未描述的内容,可参见前述图1-图11实施例中的相关阐述,这里不再赘述。
应理解,图13所示的服务器还可以是至少一个物理服务器构成的计算机集群,本申请不作具体限定。
图14是本申请提供的一种存储阵列1400,该存储阵列1400可以是前述内容的存储节点220。其中,该存储阵列1400包括存储控制器1410和至少一个存储器1420,其中,存储控制器1410和至少一个存储器1420通过总线1430相互连接。
存储控制器1410包括一个或者多个通用处理器,其中,通用处理器可以是能够处理电子指令的任何类型的设备,包括CPU、微处理器、微控制器、主处理器、控制器以及ASIC等等。处理器1410执行各种类型的数字存储指令,例如存储在存储器1420中的软件或者固件程序,它能使存储阵列1400提供多种服务。
存储器1420用于存储程序代码,并由存储控制器1410来控制执行,以执行上述图1-图11中任一实施例中存储节点210的处理步骤。程序代码可以包括一个或多个软件模块,这一个或多个软件模块可以为图1实施例中提供的存储节点220的软件单元,如元数据生成单元,其中,元数据生成单元用于从存储节点220根据待读取文件,获得待读取文件的元数据,待读取文件的元数据包括待读取文件的切片数量、行数、以及每个切片在待读取文件中的起始位置。具体可用于执行图5实施例中的S510-步骤S520及其可选步骤,还可以用于执行图1-图11实施例描述的其他由存储节点执行的步骤,这里不再进行赘述。存储器1420还用于存储程序数据。其中,程序数据包括待读取文件和待读取文件的元数据,图14以程序代码存储于存储器1、程序数据存储于存储器n为例进行了说明,本申请不对此进行限定。
存储器1420可以是非易失性存储器,例如ROM、快闪存储器、HDD或SSD存储器还可以包括上述种类的存储器的组合。例如,存储阵列1400可以是由多个HDD或者多个SDD组成,或者,存储阵列1400可以是由多个HDD以及ROM组成。其中,至少一个存储器1420在存储控制器1410的协助下按不同的方式组合起来形成存储器组,从而提供比单个存储器更高的存储性能和提供数据备份技术。
应理解,图14所示的存储阵列1400还可以是至少一个存储阵列构成的一个或者多个数据中心,上述一个或者多个数据中心可以设置在同一个地点,或者,分别在不同的地点,此处不作具体限定。
需要说明的,图14仅仅是本申请实施例的一种可能的实现方式,实际应用中,存储阵列1400还可以包括更多或更少的部件,这里不作限制。关于本申请实施例中未示出或未描述的内容,可参见前述图1-图11实施例中的相关阐述,这里不再赘述。
本申请还提供一种包括图13所述服务器1300和图14所述存储阵列1400的系统,该系统用于实现上述图1至图11中所述方法中相应主体的操作步骤,为了避免重复,此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在处理器上运行时,图1-图11所示的方法流程得以实现。
本申请实施例还提供一种计算机程序产品,当计算机程序产品在处理器上运行时,图1-图11所示的方法流程得以实现。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括至少一个计算机指令。在计算机上加载或执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DigitalSubscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含至少一个可用介质集合的服务器、数据中心等数据存储节点。可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,高密度数字视频光盘(Digital VideoDisc,DVD)、或者半导体介质。半导体介质可以是SSD。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (18)

1.一种数据处理方法,其特征在于,应用于数据处理系统,所述数据处理系统包括计算节点和存储节点,所述方法包括:
所述计算节点获取待读取文件的元数据,其中,所述待读取文件的元数据包括所述待读取文件的行数以及每个切片在所述待读取文件中的起始位置;
所述计算节点根据所述每个切片在所述待读取文件中的起始位置,并发读取所述每个切片的数据;
所述计算节点按照所述每个切片在所述待读取文件中的起始位置的顺序,将所述每个切片的数据存储至内存空间,其中,所述内存空间是所述计算节点根据所述行数申请得到的。
2.根据权利要求1所述的方法,其特征在于,所述待读取文件的元数据是所述存储节点根据所述待读取文件的数据类型确定所述待读取文件的元数据格式后,根据所述元数据格式和所述待读取文件生成的,其中,不同的数据类型的待读取文件的元数据格式不同。
3.根据权利要求1或2所述的方法,其特征在于,所述待读取文件的元数据存储于所述待读取文件中,所述待读取文件的末尾包括所述元数据在所述待读取文件中的起始位置,所述计算节点获取待读取文件的元数据包括:
所述计算节点从所述待读取文件的末尾获得所述元数据在所述待读取文件中的起始位置;
所述计算节点根据所述元数据在所述待读取文件中的起始位置,读取所述待读取文件的元数据。
4.根据权利要求1或2所述的方法,其特征在于,所述待读取文件的元数据存储于所述存储节点的指定路径。
5.根据权利要求1或2所述的方法,其特征在于,所述待读取文件的元数据存储位置与所述待读取文件的存储位置相同。
6.根据权利要求4或5所述的方法,其特征在于,所述待读取文件和所述待读取文件的元数据包括共同标识,所述计算节点获取待读取文件的元数据包括:
所述计算节点获取所述待读取文件的共同标识;
所述计算节点根据所述待读取文件的共同标识,从所述指定路径或者所述待读取文件的存储位置获取所述待读取文件的元数据。
7.根据权利要求1至6任一权利要求所述的方法,其特征在于,所述待读取文件的元数据包括校验信息,所述校验信息用于校验所述待读取文件的元数据存储至所述存储节点之后是否发生过变化,所述计算节点根据所述每个切片在所述待读取文件中的起始位置,调用多个线程,并发读取所述每个切片的数据之前,所述方法还包括:
所述计算节点根据所述校验信息校验所述待读取文件的元数据在存储至所述存储节点后是否发生过变化;
所述计算节点在所述待读取文件的元数据存储至所述存储节点之后未发生过变化的情况下,根据所述每个切片在所述待读取文件中的起始位置,调用多个线程,并发读取所述每个切片的数据。
8.根据权利要求1至7任一权利要求所述的方法,其特征在于,所述待读取文件的元数据还包括数据类型,在所述数据类型是稠密矩阵的情况下,所述元数据还包括特征值类型,所述特征值类型用于供所述计算节点初始化所述内存空间的数据结构;
所述计算节点根据所述每个切片在所述待读取文件中的起始位置,调用多个线程,并发读取所述每个切片的数据之前,所述方法还包括:
所述计算节点根据所述数据类型初始化所述内存空间的数据结构。
9.根据权利要求1至8任一权利要求所述的方法,其特征在于,所述数据类型是稀疏矩阵的情况下,所述待读取文件包括数据值、数据列索引以及行数据量,所述待读取文件的元数据还包括值数量,所述值数量用于申请用于存放所述数据值以及所述数据列索引的第一内存空间,
所述计算节点根据所述每个切片在所述待读取文件中的起始位置,调用多个线程,并发读取所述每个切片之前,所述方法还包括:
所述计算节点根据所述值数量申请用于存放所述数据值以及所述数据列索引的第一内存空间;
所述计算节点根据所述行数申请用于存放所述行数据量的第二内存空间,根据所述第一内存空间和第二内存空间获得所述内存空间。
10.根据权利要求9所述的方法,其特征在于,所述数据类型是稀疏矩阵的情况下,所述每个切片在所述待读取文件中的起始位置包括所述每个切片的数据列索引起始位置、所述每个切片的数据值起始位置以及所述每个切片的行数据量起始位置;
所述计算节点按照所述每个切片在所述待读取文件中的起始位置的顺序,将所述每个切片的数据存储至内存空间包括:
所述计算节点根据所述每个切片的数据列索引起始位置的顺序以及所述每个切片的数据值的起始位置的顺序,将所述每个切片的数据列索引以及数据值存储至所述第一内存空间,根据所述每个切片的行数据量的起始位置的顺序,将所述每个切片的行数据量存储至所述第二内存空间。
11.根据权利要求1至10中任一权利要求所述方法,其特征在于,所述元数据还包括所述待读取文件的切片数量,所述计算节点根据所述每个切片在所述待读取文件中的起始位置,并发读取所述每个切片的数据,包括:
所述计算节点调用多个线程并发读取所述每个切片的数据,所述多个线程的数量小于或等于所述切片数量。
12.根据权利要求1至10中任一权利要求所述方法,其特征在于,所述计算节点根据所述每个切片在所述待读取文件中的起始位置,并发读取所述每个切片的数据,包括:
所述计算节点调用多个线程并发读取所述每个切片的数据,所述多个线程的数量与所述切片的数量相同。
13.一种数据处理方法,其特征在于,应用于数据处理系统,所述数据处理系统包括计算节点和存储节点,所述方法包括:
所述存储节点获取待读取文件;
所述存储节点根据所述待读取文件,获得所述待读取文件的元数据,所述待读取文件的元数据包括所述待读取文件的切片数量、行数、以及每个切片在所述待读取文件中的起始位置,其中,所述行数用于供所述计算节点申请用于存放所述待读取文件的内存空间,所述切片数量用于供所述计算节点创建多个线程,所述每个切片在所述待读取文件中的起始位置用于供所述计算节点调用所述多个线程,并发读取所述每个切片的数据,并按照所述每个切片在所述待读取文件在中的起始位置的顺序,将所述每个切片的数据存储至所述内存空间;
所述存储节点存储所述待读取文件的元数据。
14.根据权利要求13所述的方法,其特征在于,所述存储节点对所述待读取文件进行解析,获得所述待读取文件的元数据包括:
所述存储节点对所述待读取文件进行解析,确定所述待读取文件的数据类型;
所述存储节点根据所述待读取文件的数据类型,确定所述待读取文件的元数据格式,其中,不同的数据类型的待读取文件的元数据格式不同;
所述存储节点根据所述待读取文件的元数据格式和所述待读取文件,生成所述待读取文件的元数据。
15.根据权利要求13或14所述的方法,其特征在于,所述存储节点存储所述待读取文件的元数据包括:
所述存储节点将所述待读取文件的元数据存储于所述待读取文件中,所述待读取文件的末尾包括所述元数据在所述待读取文件中的起始位置,使得所述计算节点从所述待读取文件的末尾获得所述元数据在所述待读取文件中的起始位置后,根据所述元数据在所述待读取文件中的起始位置,读取所述待读取文件的元数据。
16.根据权利要求13或14所述的方法,其特征在于,所述存储节点存储所述待读取文件的元数据包括:
所述存储节点将所述待读取文件的元数据存储于所述存储节点的指定路径。
17.根据权利要求13或14所述的方法,其特征在于,所述存储节点存储所述待读取文件的元数据包括:
所述存储节点将所述待读取文件的元数据存储于所述待读取文件的存储位置。
18.一种数据处理系统,包括计算节点和存储节点,其特征在于,所述计算节点执行如权利要求1至12任一权利要求所述的方法,所述存储节点执行如权利要求13至17任一权利要求所述的方法。
CN202010581055.1A 2020-06-23 2020-06-23 数据处理方法及系统 Pending CN113835870A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202010581055.1A CN113835870A (zh) 2020-06-23 2020-06-23 数据处理方法及系统
PCT/CN2021/088588 WO2021258831A1 (zh) 2020-06-23 2021-04-21 数据处理方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010581055.1A CN113835870A (zh) 2020-06-23 2020-06-23 数据处理方法及系统

Publications (1)

Publication Number Publication Date
CN113835870A true CN113835870A (zh) 2021-12-24

Family

ID=78964028

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010581055.1A Pending CN113835870A (zh) 2020-06-23 2020-06-23 数据处理方法及系统

Country Status (2)

Country Link
CN (1) CN113835870A (zh)
WO (1) WO2021258831A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115964353A (zh) * 2023-03-10 2023-04-14 阿里巴巴(中国)有限公司 一种分布式文件系统及其访问计量方法
CN117156172A (zh) * 2023-10-30 2023-12-01 江西云眼视界科技股份有限公司 视频切片上报方法、系统、存储介质及计算机
WO2024051465A1 (zh) * 2022-09-09 2024-03-14 荣耀终端有限公司 差分文件的还原方法及电子设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106202152B (zh) * 2016-06-23 2019-06-18 浪潮(北京)电子信息产业有限公司 一种云平台的数据处理方法及系统
US10678793B2 (en) * 2016-11-17 2020-06-09 Sap Se Document store with non-uniform memory access aware high performance query processing
CN109710572B (zh) * 2018-12-29 2021-02-02 北京赛思信安技术股份有限公司 一种基于HBase的文件分片方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024051465A1 (zh) * 2022-09-09 2024-03-14 荣耀终端有限公司 差分文件的还原方法及电子设备
CN115964353A (zh) * 2023-03-10 2023-04-14 阿里巴巴(中国)有限公司 一种分布式文件系统及其访问计量方法
CN115964353B (zh) * 2023-03-10 2023-08-22 阿里巴巴(中国)有限公司 一种分布式文件系统及其访问计量方法
CN117156172A (zh) * 2023-10-30 2023-12-01 江西云眼视界科技股份有限公司 视频切片上报方法、系统、存储介质及计算机
CN117156172B (zh) * 2023-10-30 2024-01-16 江西云眼视界科技股份有限公司 视频切片上报方法、系统、存储介质及计算机

Also Published As

Publication number Publication date
WO2021258831A1 (zh) 2021-12-30

Similar Documents

Publication Publication Date Title
US11010681B2 (en) Distributed computing system, and data transmission method and apparatus in distributed computing system
WO2021258831A1 (zh) 数据处理方法及系统
CN110334075B (zh) 基于消息中间件的数据迁移方法及相关设备
GB1570344A (en) Information storage and retrieval system
US20080195840A1 (en) Identifying Messaging Completion on a Parallel Computer
WO2021258848A1 (zh) 数据字典生成方法、数据查询方法、装置、设备及介质
CN103838626A (zh) 一种处理串行任务的数据处理装置及方法
KR20220125198A (ko) 데이터의 추가 기록 방법, 장치, 전자 기기, 저장 매체 및 컴퓨터 프로그램매체
CN115114370B (zh) 主从数据库的同步方法、装置、电子设备和存储介质
CN109657197B (zh) 一种叠前深度偏移计算方法及系统
CN114741449A (zh) 一种基于分布式数据库的对象存储方法及装置
US10789087B2 (en) Insight usage across computing nodes running containerized analytics
EP3933639B1 (en) Transaction processing method, apparatus, and electronic device for blockchain
CN112988884B (zh) 大数据平台数据存储方法及装置
CN105404635A (zh) 字符串匹配的方法、设备和异构计算系统
CN114490023A (zh) 一种基于arm和fpga的高能物理可计算存储设备
CN112965939A (zh) 一种文件合并方法、装置和设备
Ilin et al. Performance analysis of software with a variant NoSQL data schemes
US20230306206A1 (en) Generating rules for managing an infrastructure from natural-language expressions
Latham et al. Portable topology-aware mpi-i/o
CN116701452A (zh) 数据处理方法、相关设备、存储介质及程序产品
CN113626510A (zh) 交易核对方法、装置、电子设备及存储介质
CN113282347A (zh) 插件运行方法、装置、设备及存储介质
CN110688239A (zh) 模型的调用方法、装置、设备及计算机可读存储介质
US20190377708A1 (en) System and method for providing a container environment in a single file

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