文件读取方法和装置
技术领域
本发明涉及大数据领域,具体而言,涉及一种文件读取方法和装置。
背景技术
现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物。大数据导致了大文件的产生,而大文件的读取与之前的小文件的处理相比是有问题的。
例如,在某些特殊的行业中,经常需要面对十几GB乃至几十TB容量的巨型文件,而一个32位进程所拥有的虚拟地址空间只有4G,显然不能一次性将文件全部加载到内存中。
又例如,如果文件比较大,在将文件的内容读取到数据库中也会存在问题。
针对上述由于文件比较大而导致的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种文件读取方法和装置,以至少解决由于文件比较大而导致的技术问题。
根据本发明实施例的一个方面,提供了一种文件读取方法,包括:读取步骤,以流的方式从文件中按照缓存区的大小读取预定长度的数据;缓存步骤,将读取到的数据放在缓存区进行缓存;预处理步骤,根据预先配置的预处理要求对缓存的数据进行预处理以得到数据的内容;导入步骤,将数据的内容保存至数据平台;循环依次执行读取步骤、缓存步骤、预处理步骤以及导入步骤完成对文件的读取。
根据本发明实施例的另一方面,还提供了一种文件读取装置,包括:读取模块,用于执行读取步骤,以流的方式从文件中按照缓存区的大小读取预定长度的数据;缓存模块,用于执行缓存步骤,将读取到的数据放在缓存区进行缓存;预处理模块,用于执行预处理步骤,根据预先配置的预处理要求对缓存的数据进行预处理以得到数据的内容;导入模块,用于执行导入步骤,将数据的内容保存至数据平台。
在本发明实施例中,采用分布式读取大数据文件的方式,通过以流的方式读取预定长度的数据,将该数据放入缓存区中,并对其进行预处理,得到数据的内容,最后将数据的内容保存至数据平台,达到了快速加载大数据文件至内存的目的,进而解决了由于文件比较大而导致的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种文件读取方法流程图;
图2是根据本发明实施例的一种可选的文件读取方法流程图;
图3是根据本发明实施例的一种可选的读取预定长度数据的方法流程图;
图4是根据本发明实施例的一种可选的读取预定长度数据之前的方法流程图;以及
图5是根据本发明实施例的一种文件读取装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本发明实施例,提供了一种文件读取的方法实施例。
图1是根据本发明实施例的一种文件读取方法,如图1所示,该方法包括如下步骤:
步骤S102,读取步骤,以流的方式从文件中按照缓存区的大小读取预定长度的数据。
步骤S104,缓存步骤,将读取到的数据放在缓存区进行缓存。
步骤S106,预处理步骤,根据预先配置的预处理要求对缓存的数据进行预处理以得到数据的内容。
步骤S108,导入步骤,将数据的内容保存至数据平台。
步骤S110,循环依次执行读取步骤、缓存步骤、预处理步骤以及导入步骤完成对文件的读取。
作为一种可选的实施例,根据缓存区的大小,以字节流的方式从文件中读取固定长度的数据,将该固定长度的数据放入缓存区进行缓存,然后从缓存区中按照字节对缓存的数据进行读取,根据文件的长度信息、文件内容的数据类型以及特殊字符、字节序、编解码方式等信息对文件的数据内容进行解析,即完成对数据的预处理过程,最后将解析后的数据保存到数据平台上,可以对其进行数据处理、数据存储、查询检索以及分析挖掘和展示等操作。循环执行上述读取步骤、缓存步骤、预处理步骤以及导入步骤,直至完成对该大文件的读取操作。
在本实施例中,采用分布式读取大数据文件的方式,通过以流的方式读取预定长度的数据,将该数据放入缓存区中,并对其进行预处理,得到数据的内容,最后将数据的内容保存至数据平台,达到了快速加载大数据文件至内存的目的,进而解决了由于文件比较大而导致的技术问题。
考虑到文件本身比较大,为了加快处理速度,可以考虑并行处理,即可以将文件拆分为多个部分再进行处理。图2示出了该可选实施方式的流程,如图2所示,上述方法还可以包括如下步骤:
步骤S202,将文件拆分为多个部分。
步骤S204,通过多个分布式服务对文件中的多个部分分别执行读取步骤、缓存步骤、预处理步骤、以及导入步骤,将多个部分对应的内容保存至数据平台;或者,通过多个分布式服务对文件中的多个部分分别执行读取步骤、缓存步骤、以及预处理步骤得到多个部分对应的内容,再将得到的内容进行合并,并将合并之后的内容导入到数据平台。
在拆分的时候,可以根据不同分布式服务的处理能力进行拆分,即,可以根据多个分布式服务各自的处理能力,将文件拆分为多个部分,并将多个部分分配至对应的分布式服务进行处理。例如,第一个分布式服务的处理能力是第二个分布式服务处理能力的两倍,那么给第一个分布式处理服务的文件大小可以是第二个分布式处理服务器文件大小的两倍。这种拆分方法拆分出来的文件大小是不相同的,与分布式服务的处理能力相对应。作为另外一种处理方式,可以将文件拆分成大小相同的部分,然后根据处理能力分配对应数量的文件。
例如,将原始文件拆分为4部分,分别记为:a、b、c和d,而分布式服务也有4个,分别为A、B、C和D,分布式服务A对文件a执行读取步骤、缓存步骤、预处理步骤以及导入步骤,执行完毕后可得到对文件a进行解析后的内容A’,同样,对文件b、c和d进行解析后的内容分别为B’、C’和D’,最后将解析后的文件内容A’、B’、C’、D’保存到数据平台上。又例如,同样对原始文件进行拆分,将其拆分为a、b、c和d 4部分,而分布式服务也有4个,分别为A、B、C和D,分布式服务A、B、C和D对文件a、b、c和d执行读取步骤、缓存步骤和预处理步骤后,得到这四部分文件的内容A’、B’、C’和D’,将这四部分内容合并为一体A’B’C’D’,并将合并后的内容执行导入步骤,将其导入到数据平台上。
在使用多个分布式服务的时候,为了使分布式服务处理更快,每个分布式服务分别可以对应独立的缓存区,并且,多个分布式服务对应的缓存区是根据分布式服务所在服务器的资源确定的。
作为一种可选的实施例,每个分布式服务对应有一个独立的缓存区,该缓存区由分布式服务所在服务器的缓存管理器进行资源的配置。
需要说明的是,对资源的配置可以是静态配置,也可以是动态配置。动态配置可以根据分布式服务目前的负荷以及剩余处理能力来进行配置。
作为一种可选的实施例,由于每个分布式服务都有一个独立的缓存区,其缓存区是由分布式服务所在的服务器的资源确定的,所以每个分布式服务的处理能力各不相同,每个分布式服务对应的缓存区的大小也是不相同的。将文件拆分为多个部分,拆分后文件的每部分不一定都是均等的。每个分布式服务根据各自处理能力的大小处理相应拆分后的部分文件。
可选地,如图4所示,在以流文件的方式从文件中按照缓存区的大小读取预定长度的数据之前,方法还包括如下步骤:
步骤S402,配置缓存区的大小。
步骤S404,配置缓存区的备用缓存区,其中,备用缓存区的大小与缓存区的大小一致,备用缓存区为缓存区的备份。
作为一种可选的实施例,根据内存的使用情况可自动配置缓存区的大小和数量,并配置两个缓存区,两个缓存区的大小相同,可以用来处理对文件进行解析式出现的乱码问题;也可以配置多个缓存区,这些缓存区循环使用。
图1中示出的方法可以应用到所有文件的读取上,但是,也可以仅仅应用到大文件的处理上,图3示出了这样的一个可选的实施方式,图3为以流的方式从文件中按照缓存区的大小读取预定长度的数据的方法流程图,如图3所示,该方法包括如下步骤:
步骤S302,获取文件的大小。
步骤S304,在文件的大小超过阈值的情况下,以流文件的方式从文件中按照缓存区的大小读取预定长度的数据。
作为一种可选的实施例,例如,文件的大小为100M,而可处理的文件大小的阈值为10M,由于文件的大小远远超过了可处理文件的大小,所以通过流文件的方式读取文件。假设缓存区的大小为1M,则每次以流文件的方式读取1M原始文件的内容。
可选地,根据元数据信息对缓存的数据进行预处理包括:从缓存区中按照字节进行读取,根据元数据信息获取数据中的内容,其中,元数据信息用于对数据进行内容解析,元数据信息包括以下至少之一:长度信息、数据类型、特殊字符、字节序、编解码方式的信息。
作为一种可选的实施例,不同的文件有不同的编码方式,在对文件进行解析处理进而获得文件内容的过程中,如果使用的编码方式不同,将会出现乱码,为了解决汉子乱码的问题,在缓存区中对数据进行解析时,需要根据原始文件的编码方式来进行解析,即获得原始文件的元数据信息,例如,对于一个文件,该文件的长度可能为50个字节,文件中的数据类型可能为整型,特殊字符“$”位于文件中第34个字节的位置处。其中,文件的长度、文件的数据类型以及特殊字符的信息均为元数据信息。
可选地,上述方法还包括:在读取步骤、缓存步骤、预处理步骤、导入步骤中的至少之一设置断点,其中,断点用于在步骤执行出错的情况下进行信息的记录,记录的信息用于进行任务恢复。
作为一种可选的实施例,在每个执行步骤中设置断点,后台运行的程序是多任务并发执行的,所以当在该执行步骤中发生故障时,断点记录步骤执行出错的相关信息。例如,当对文件进行预处理操作时,在对数据进行解析时出现了错误,出现了缓存区的溢满的错误,此时,断点记录下发生错误的时间、发生错误的原因、错误的位置以及发生错误时后台运行程序所执行的状态等信息。当对任务进行恢复时,可以直接从断点中获取相关的信息,并从发生错误的步骤开始执行,而无需再重新执行全部的步骤,节省了任务执行的时间。
实施例2
根据本发明实施例,提供了一种文件读取的装置实施例。
图5是根据本发明实施例的一种文件读取装置的结构示意图,如图5所示,该装置包括读取模块501、缓存模块503、预处理模块505、导入模块507和循环模块509。
读取模块501,用于执行读取步骤,以流的方式从文件中按照缓存区的大小读取预定长度的数据。
缓存模块503,用于执行缓存步骤,将读取到的数据放在缓存区进行缓存。
预处理模块505,用于执行预处理步骤,根据预先配置的预处理要求对缓存的数据进行预处理以得到数据的内容。
导入模块507,用于执行导入步骤,将数据的内容保存至数据平台。
循环模块509,用于循环依次执行读取步骤、缓存步骤、预处理步骤以及导入步骤完成对文件的读取。
作为一种可选的实施例,根据缓存区的大小,以字节流的方式从文件中读取固定长度的数据,将该固定长度的数据放入缓存区进行缓存,然后从缓存区中按照字节对缓存的数据进行读取,根据文件的长度信息、文件内容的数据类型以及特殊字符、字节序、编解码方式等信息对文件的数据内容进行解析,即完成对数据的预处理过程,最后将解析后的数据保存到数据平台上,可以对其进行数据处理、数据存储、查询检索以及分析挖掘和展示等操作。循环执行上述读取步骤、缓存步骤、预处理步骤以及导入步骤,直至完成对该大文件的读取操作。
在本实施例中,采用分布式读取大数据文件的方式,通过以流的方式读取预定长度的数据,将该数据放入缓存区中,并对其进行预处理,得到数据的内容,最后将数据的内容保存至数据平台,达到了快速加载大数据文件至内存的目的,进而解决了由于文件比较大而导致的技术问题。
可选地,如图5所示,上述装置还包括:
拆分模块511,用于将文件拆分为多个部分;
处理模块513,用于通过多个分布式服务对文件中的多个部分分别执行读取步骤、缓存步骤、预处理步骤、以及导入步骤,将多个部分对应的内容保存至数据平台;或者,用于通过多个分布式服务对文件中的多个部分分别执行读取步骤、缓存步骤、以及预处理步骤得到多个部分对应的内容,再将得到的内容进行合并,并将合并之后的内容导入到数据平台。
在拆分的时候,可以根据不同分布式服务的处理能力进行拆分,即,可以根据多个分布式服务各自的处理能力,将文件拆分为多个部分,并将多个部分分配至对应的分布式服务进行处理。例如,第一个分布式服务的处理能力是第二个分布式服务处理能力的两倍,那么给第一个分布式处理服务的文件大小可以是第二个分布式处理服务器文件大小的两倍。这种拆分方法拆分出来的文件大小是不相同的,与分布式服务的处理能力相对应。作为另外一种处理方式,可以将文件拆分成大小相同的部分,然后根据处理能力分配对应数量的文件。
作为一种可选的实施例,例如,将原始文件拆分为4部分,分别记为:a、b、c和d,而分布式服务也有4个,分别为A、B、C和D,分布式服务A对文件a执行读取步骤、缓存步骤、预处理步骤以及导入步骤,执行完毕后可得到对文件a进行解析后的内容A’,同样,对文件b、c和d进行解析后的内容分别为B’、C’和D’,最后将解析后的文件内容A’、B’、C’、D’保存到数据平台上。又例如,同样对原始文件进行拆分,将其拆分为a、b、c和d 4部分,而分布式服务也有4个,分别为A、B、C和D,分布式服务A、B、C和D对文件a、b、c和d执行读取步骤、缓存步骤和预处理步骤后,得到这四部分文件的内容A’、B’、C’和D’,将这四部分内容合并为一体A’B’C’D’,并将合并后的内容执行导入步骤,将其导入到数据平台上。
在使用多个分布式服务的时候,为了使分布式服务处理更快,每个分布式服务分别可以对应独立的缓存区,并且,多个分布式服务对应的缓存区是根据分布式服务所在服务器的资源确定的。
作为一种可选的实施例,每个分布式服务对应有一个独立的缓存区,该缓存区由分布式服务所在服务器的缓存管理器进行资源的配置。
需要说明的是,对资源的配置可以是静态配置,也可以是动态配置。动态配置可以根据分布式服务目前的负荷以及剩余处理能力来进行配置。
作为一种可选的实施例,由于每个分布式服务都有一个独立的缓存区,其缓存区是由分布式服务所在的服务器的资源确定的,所以每个分布式服务的处理能力各不相同,每个分布式服务对应的缓存区的大小也是不相同的。将文件拆分为多个部分,拆分后文件的每部分不一定都是均等的。每个分布式服务根据各自处理能力的大小处理相应拆分后的部分文件。
可选地,如图5所示,上述装置还包括:
第一配置模块515,用于配置缓存区的大小。
第二配置模块517,用于配置缓存区的备用缓存区,其中,备用缓存区的大小与缓存区的大小一致,备用缓存区为缓存区的备份。
作为一种可选的实施例,根据内存的使用情况可自动配置缓存区的大小和数量,并配置两个缓存区,两个缓存区的大小相同,可以用来处理对文件进行解析式出现的乱码问题;也可以配置多个缓存区,这些缓存区循环使用。
可选地,如图5所示,读取模块501包括:
第一读取模块5011,用于获取文件的大小。
第二读取模块5013,用于在文件的大小超过阈值的情况下,以流文件的方式从文件中按照缓存区的大小读取预定长度的数据。
作为一种可选的实施例,例如,文件的大小为100M,而可处理的文件大小的阈值为10M,由于文件的大小远远超过了可处理文件的大小,所以通过流文件的方式读取文件。假设缓存区的大小为1M,则每次以流文件的方式读取1M原始文件的内容。
可选地,如图5所示,预处理模块,用于根据元数据信息对缓存的数据进行预处理,预处理模块505包括:
信息获取模块5051,用于从缓存区中按照字节进行读取,根据元数据信息获取数据中的内容,其中,元数据信息用于进行对数据进行内容解析,元数据信息包括以下至少之一:长度信息、数据类型、特殊字符、字节序、编解码方式的信息。
作为一种可选的实施例,不同的文件有不同的编码方式,在对文件进行解析处理进而获得文件内容的过程中,如果使用的编码方式不同,将会出现乱码,为了解决汉子乱码的问题,在缓存区中对数据进行解析时,需要根据原始文件的编码方式来进行解析,即获得原始文件的元数据信息,例如,对于一个文件,该文件的长度可能为50个字节,文件中的数据类型可能为整型,特殊字符“$”位于文件中第34个字节的位置处。其中,文件的长度、文件的数据类型以及特殊字符的信息均为元数据信息。
可选地,如图5所示,上述装置还包括:
断点模块519,用于在读取步骤、缓存步骤、预处理步骤、导入步骤中的至少之一设置断点,其中,断点用于在步骤执行出错的情况下进行信息的记录,记录的信息用于进行任务恢复。
作为一种可选的实施例,在每个执行步骤中设置断点,后台运行的程序是多任务并发执行的,所以当在该执行步骤中发生故障时,断点记录步骤执行出错的相关信息。例如,当对文件进行预处理操作时,在对数据进行解析时出现了错误,出现了缓存区的溢满的错误,此时,断点记录下发生错误的时间、发生错误的原因、错误的位置以及发生错误时后台运行程序所执行的状态等信息。当对任务进行恢复时,可以直接从断点中获取相关的信息,并从发生错误的步骤开始执行,而无需再重新执行全部的步骤,节省了任务执行的时间。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。