数据处理方法和系统与流程

文档序号:12121570阅读:251来源:国知局
数据处理方法和系统与流程

本发明涉及数据处理技术领域,特别是涉及一种数据处理方法和系统。



背景技术:

随着移动互联网、云计算等信息技术的兴起与迅猛发展,信息数据总量飞速膨胀,且数据类型也越来越丰富。

传统的数据管理和分析技术是关系数据库技术,但是关系数据库在数据更新、错误恢复以及系统扩展性等方面的工作效率低下,无法满足对海量数据的处理需求。

而以海杜普(Hadoop)为代表的分布式计算框架虽然具有良好的可靠性、扩展性和容错性等特点,但HDFS(Hadoop Distributed File System,海杜普分布式文件系统)在访问很多办公文件、GIS(Geography Information System,地理信息系统)数据等小文件时,其单一的Master架构使得内存中要保存大量小文件的元数据信息,而对于海量的小文件,HDFS的内存无法支持,从而影响整个系统的存储性能。同时,在HDFS上每次打开一个文件都需要先在内存中查询文件的数据块信息,在访问海量小文件时需要处理大量的查询,影响系统效率。



技术实现要素:

基于此,有必要针对海量数据处理性能及效率不佳的问题,提供一种高效、实时的数据处理方法和系统。

一种数据处理方法,包括步骤:

获取待处理数据流;

通过流处理将待处理数据流以时间片为单位切分成数据块;

获取数据块的数据块分区标识;

根据批量处理的时间将流处理分级为第一级流处理与第二级流处理,其中,第一级流处理对应的批量处理时间小于第二级流处理对应的批量处理时间;

将数据块分区标识通过第一级流处理进行清洗后存储至分布式存储系统;

将数据块进行所述第二级流处理,并将处理后的数据块存储至海杜普分布式文件系统。

一种数据处理系统,包括:

数据流获取模块,用于获取待处理数据流;

数据流分割模块,用于通过流处理将待处理数据流以时间片为单位切分成数据块;

数据块分区标识获取模块,用于获取数据块的数据块分区标识;

流处理分级模块,用于根据批量处理的时间将流处理分级为第一级流处理与第二级流处理,其中,第一级流处理对应的批量处理时间小于第二级流处理对应的批量处理时间;

第一存储模块,用于将数据块分区标识通过第一级流处理进行清洗后存储至分布式存储系统;

第二存储模块,用于将数据块进行第二级流处理,并将处理后的数据块存储至海杜普分布式文件系统。

上述数据处理方法和系统,首先获取待处理数据流通过流处理将待处理数据流以时间片为单位切分成数据块并获取数据块的数据块分区标识,之后根据批量处理的时间将流处理分级为第一级流处理与第二级流处理,其中,第一级流处理对应的批量处理时间小于所述第二级流处理对应的批量处理时间,将数据块分区标识通过第一级流处理进行清洗后存储至分布式存储系统,并提交数据块进入第二级流处理,数据块经第二级流处理的处理后存储至海杜普分布式文件系统。这种数据处理方法和系统采用流处理分级机制,根据数据块分区标识和数据块设定第一级流处理与第二级流处理,而流处理具有将流式计算分解成一系列短小的批处理作业的特性,因此通过小批量分级处理方式使得数据处理可以同时兼容批量和实时数据处理的逻辑和算法,低延迟地处理海量数据,方便了一些需要历史数据和实时数据联合分析的特定应用场合。通过上述处理,满足了对海量数据的存储及高效、实时处理性能的需求。

附图说明

图1为一实施例中数据处理方法的流程示意图;

图2为一实施例中数据处理方法中子步骤S100的流程示意图;

图3为二维分区存储结构示意图;

图4为基于海杜普海量数据分布式访问系统的结构示意图;

图5为一实施例中数据处理系统的结构示意图;

图6为一实施例中数据处理系统中子模块100的结构示意图。

具体实施方式

如图1所示,在一个实施例中,一种数据处理方法,包括如下步骤:

步骤S100,获取待处理数据流。

待处理数据流的来源包括爬虫系统、日志系统和关系型数据库MySQL或非关系型数据库NoSQL等数据,并对其进行统一的调度和管理。原数据主要存储于传统的硬盘系统之上,主要存储格式为文本日志文件以及数据库文件。

步骤S200,通过流处理将待处理数据流以时间片为单位切分成数据块。

Spark是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速,Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark是在Scala语言中实现的,它将Scala用作其应用程序框架,与Hadoop不同,Spark和Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地操作分布式数据集。尽管创建Spark是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop的补充,可以在Hadoop文件系统中并行运行。虽然Spark与Hadoop有相似之处,但它提供了具有有用差异的一个新的集群计算框架,首先,Spark是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集的工作负载,为了优化这些类型的工作负载,Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。

Spark Streaming(流处理)是将流式计算分解成一系列短小的批处理作业,这里的批处理引擎是Spark,也就是把Spark Streaming的输入数据按照batch size(批处理大小),比如1秒,分成一段一段的数据,每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset,弹性分布数据集),然后将Spark Streaming中对每段数据的操作变为针对Spark中对RDD的操作,将RDD经过操作变成中间结果保存在内存中,整个流式计算根据业务的需求可以对中间的结果进行叠加,或者存储到外部设备。

流处理把实时输入数据流以时间片Δt,比如1秒为单位切分成一个个数据块,流处理会把每个数据块作为一个RDD,并使用RDD操作处理每一个数据块。使用Spark Streaming编写的程序与编写Spark程序非常相似,在Spark程序中,主要通过操作RDD提供的接口实现数据的批处理,而在Spark Streaming中,则通过操作DStream(表示数据流的RDD序列)提供的接口,这些接口和RDD提供的接口类似。

步骤S300,获取数据块的数据块分区标识。

数据块分区标识是数据块的标识符,可以从数据块的文件名中得到。早期的数据块分区标识是一个64位数随机数,当时实现比较简单,并没有判重,所以如果两个数据块碰巧得到同样的数据块分区标识,系统会误认为是多余的备份数据块,而将其中一个删除,这样这个数据块很有可能出错,包含它的文件则损坏。解决的办法有两个,一是记录好所有使用过的数据块分区标识,以实现判重功能;二是以一种不会重复的方式生成数据块分区标识,比如顺序生成。

步骤S400,根据批量处理的时间将流处理分级为第一级流处理与第二级流处理,其中,第一级流处理对应的批量处理时间小于第二级流处理对应的批量处理时间。

在对流处理分级设定过程中,考虑到数据块分区标识的数据小容量特性,以第一级流处理进行拆分即可满足实时性要求,即对应的批量处理时间更快一些,而由于数据块是具体的数据文件,在写入海杜普分布式文件系统过程中需要较长延时,否则会产生大量的碎文件,因此,在数据块分区标识确认存在后,设置第二级流处理来处理数据块,即对应的批量处理时间更慢一些。具体的,第一级流处理为秒级流处理,第二级流处理为分钟级流处理。

步骤S500,将数据块分区标识通过第一级流处理进行清洗后存储至分布式存储系统。

具体来说,通过秒级流处理将数据块分区标识进行初步清洗后存放至HBase(分布式存储系统)。

步骤S600,将数据块进行第二级流处理,并将处理后的数据块存储至海杜普分布式文件系统。

具体来说,经过秒级流处理之后,提交数据块进入分钟级流处理,数据块经分钟级流处理的处理后存放至HDFS。

上述数据处理方法,首先获取待处理数据流通过流处理将待处理数据流以时间片为单位切分成数据块并获取数据块的数据块分区标识,之后根据批量处理的时间将流处理分级为第一级流处理与第二级流处理,其中,第一级流处理对应的批量处理时间小于第二级流处理对应的批量处理时间,将数据块分区标识通过第一级流处理进行清洗后存储至分布式存储系统,并提交数据块进入第二级流处理,数据块经第二级流处理的处理后存储至海杜普分布式文件系统。这种数据处理方法采用流处理分级机制,根据数据块分区标识和数据块设定第一级流处理与第二级流处理,而流处理具有将流式计算分解成一系列短小的批处理作业的特性,因此通过小批量分级处理方式使得数据处理可以同时兼容批量和实时数据处理的逻辑和算法,低延迟地处理海量数据,方便了一些需要历史数据和实时数据联合分析的特定应用场合。通过上述处理,满足了对海量数据的存储及高效、实时处理性能的需求。

在一个实施例中,如图2所示,获取待处理数据流的步骤S100具体可以包括:

步骤S120,接收数据读取请求指令。

用户可通过数据块控件和网页界面等形式的界面输入数据读取请求,数据请求包括用户指定的数据文件所对应的文件名称、文件路径等信息。

步骤S140,根据数据读取请求指令,获取待处理数据流。

在获取数据读取请求之后,解析数据读取请求,获取待处理数据流,包括数据流所在数据文件的名称。

在一个实施例中,将数据块分区标识通过第一级流处理进行清洗后存储至分布式存储系统的步骤具体包括:

根据数据块的内容进行分区,并获取分区结果,根据分区结果将数据块分区标识存储至分布式存储系统;

根据对数据块访问的频数进行等级划分,将数据块分区标识存储至分布式存储系统。

以二维分区模式存储数据块分区标识,二维分区存储结构示意图如图3所示,其中,第一维度为数据块的内容,第二维度为数据块访问的频数。

在二维分区存储结构中,第一维度是根据数据块的内容进行分区操作,将访问的数据、日志、索引等不同文件类型存于不同的文件组,不同的文件组存储于不同的磁盘分区。第二维度是根据访问的频数大小划分磁盘分区的等级,访问频数越高,磁盘分区的等级越高,基于上述二维分区存储模式进行存储,一方面能够减少磁盘I/O(Input/Output,输入/输出)和系统负荷,同时,基于二维的搜索能够明显降低高并发随机访问数据的场景下数据节点的压力,提高系统的数据访问效率。

在一个实施例中,针对高并发、小数据量、低延时要求的移动应用场景,提出了一种承载海量数据轻量级访问的分布式处理系统,整个系统包括数据采集、数据传输、数据处理及数据运用四个部分,系统框架如图4所示。

具体来说,首先由数据采集部分负责对来自爬虫系统、日志系统和关系型数据库MySQL或非关系型数据库NOSQL等原始数据进行统一的调度和管理。原始数据主要存在于传统的硬盘系统之上,主要存储格式为文本日志文件以及数据库文件。然后由数据传输部分,将数据采集部分收集到的原始数据,传送给数据处理部分。传送到数据处理部分的数据将存储在HDFS文件系统之上,并统一经过压缩处理,以达到节省存储空间和运行时网络带宽、增加HDFS内部的传送效率的优化目的。数据处理部分主要由MapReduce分布式计算框架、Hive数据仓库工具组成的集群分布式数据分析应用处理架构,对由数据采集部分传送过来的原始数据进行清洗和过滤,执行计算作业、数据挖掘作业、数据分析作业、数据运营等相关作业。经过数据处理部分的处理之后,得到的结果数据,统一存储在HDFS系统,主要以Hive表存储为主,文件存储格式主要有TEXTFILE、SEQUENCEFILE、RCFILE,形成结果集数据。在此基础上,可以通过数据挖掘工具、OLAP(Online Analytical Processing,联机分析处理)工具、DM报表等,对数据进行进一步业务逻辑计算、数据集成操作。针对移动应用场景在Hadoop架构基础上进行了优化,设计了一种新的随机读取模型,以提高实时响应性能。该随机读取模型分为数据访问前端和后端,其中,数据访问前端采用进程内缓存机制,在数据节点上采用了针对小数据量随机读的数据访问服务,代替HDFS原生数据传输服务,提高访问性能。同时,采用二维分区模式将数据分区存储至缓存,平衡存储性能和访问性能,提高数据快速定位查询能力。在内存访问中,随机读取后端结合Spark基于内存计算的集群分布式算法,允许Hadoop集群中的应用程序充分利用内存进行缓存,进一步减少磁盘I/O达到性能提升。中间处理数据全部分区放入缓存中,Spark透明的在缓存中存储数据,只有在需要时才持久化写入磁盘,从而大大减少数据处理过程中磁盘的读写,大幅度降低等待读写数据的时间。

海量数据随机读取框架由数据访问前端和后端两部分组成,在随机读取前端向用户提供数据读取功能的API(Application Programming Interface,应用程序编程接口),随机读取后端运行在HDFS集群的数据节点上,代替数据接收方处理前端发来的数据读取请求。随机读取前端对已经读过的HDFS文件的元数据信息进行缓存,包括文件所有的数据块信息。如果用户请求的数据文件在缓存中则直接从缓存中提取数据节点的地址,若用户请求的数据文件不在缓存中,前端向名称节点查询该文件元数据信息。随机读取后端会定期扫描数据节点所在本地磁盘的数据存储目录,及时更新数据节点所在本地磁盘中的数据块文件与分区ID之间的映射关系。

如图5所示,在一个实施例中,一种数据处理系统,包括:

数据流获取模块100,用于获取待处理数据流。

待处理数据流的来源包括爬虫系统、日志系统和关系型数据库MySQL或非关系型数据库NoSQL等数据,并对其进行统一的调度和管理。原数据主要存储于传统的硬盘系统之上,主要存储格式为文本日志文件以及数据库文件。

数据流分割模块200,通过流处理将待处理数据流以时间片为单位切分成数据块。

Spark是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速,Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark是在Scala语言中实现的,它将Scala用作其应用程序框架,与Hadoop不同,Spark和Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地操作分布式数据集。尽管创建Spark是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop的补充,可以在Hadoop文件系统中并行运行。虽然Spark与Hadoop有相似之处,但它提供了具有有用差异的一个新的集群计算框架,首先,Spark是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集的工作负载,为了优化这些类型的工作负载,Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。

Spark Streaming(流处理)是将流式计算分解成一系列短小的批处理作业,这里的批处理引擎是Spark,也就是把Spark Streaming的输入数据按照batch size(批处理大小),比如1秒,分成一段一段的数据,每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset,弹性分布数据集),然后将Spark Streaming中对每段数据的操作变为针对Spark中对RDD的操作,将RDD经过操作变成中间结果保存在内存中,整个流式计算根据业务的需求可以对中间的结果进行叠加,或者存储到外部设备。

Spark Streaming把实时输入数据流以时间片Δt,比如1秒为单位切分成块,Spark Streaming会把每块数据作为一个RDD,并使用RDD操作处理每一块数据。使用Spark Streaming编写的程序与编写Spark程序非常相似,在Spark程序中,主要通过操作RDD提供的接口实现数据的批处理,而在Spark Streaming中,则通过操作DStream(表示数据流的RDD序列)提供的接口,这些接口和RDD提供的接口类似。

数据块分区标识获取模块300,用于获取数据块的数据块分区标识。

流处理分级模块400,用于根据批量处理的时间将流处理分级为第一级流处理与第二级流处理,其中,第一级流处理对应的批量处理时间小于第二级流处理对应的批量处理时间。

在对流处理分级设定过程中,考虑到数据块分区标识的数据小容量特性,以第一级流处理进行拆分即可满足实时性要求,即对应的批量处理时间更快一些,而由于数据块是具体的数据文件,在写入海杜普分布式文件系统过程中需要较长延时,否则会产生大量的碎文件,因此,在数据块分区标识确认存在后,设置第二级流处理来处理数据块,即对应的批量处理时间更慢一些。具体的,第一级流处理为秒级流处理,第二级流处理为分钟级流处理。

第一存储模块500,用于将数据块分区标识通过第一级流处理进行清洗后存储至分布式存储系统。

具体来说,通过秒级流处理将数据块分区标识进行初步清洗后存放至HBase(分布式存储系统)。

第二存储模块600,用于将所述数据块进行所述第二级流处理,并将处理后的数据块存储至海杜普分布式文件系统。

具体来说,经过秒级流处理之后,提交数据块进入分钟级流处理,数据块经分钟级流处理的处理后存放至HDFS。

上述数据处理系统,首先获取待处理数据流通过流处理将待处理数据流以时间片为单位切分成数据块并获取数据块的数据块分区标识,之后根据批量处理的时间将流处理分级为第一级流处理与第二级流处理,其中,第一级流处理对应的批量处理时间小于第二级流处理对应的批量处理时间,将数据块分区标识通过第一级流处理进行清洗后存储至分布式存储系统,并提交数据块进入第二级流处理,数据块经第二级流处理的处理后存储至海杜普分布式文件系统。这种数据处理系统采用流处理分级机制,根据数据块分区标识和数据块设定第一级流处理与第二级流处理,而流处理具有将流式计算分解成一系列短小的批处理作业的特性,因此通过小批量分级处理方式使得数据处理可以同时兼容批量和实时数据处理的逻辑和算法,低延迟地处理海量数据,方便了一些需要历史数据和实时数据联合分析的特定应用场合。通过上述处理,满足了对海量数据的存储及高效、实时处理性能的需求。

在一个实施例中,如图6所示,数据流获取模块100包括:

指令接收单元120,用于接收数据读取请求指令。

用户可通过数据块控件和网页界面等形式的界面输入数据读取请求,数据请求包括用户指定的数据文件所对应的文件名称、文件路径等信息。

指令响应单元140,用于根据数据读取请求指令,获取待处理数据流。

在获取数据读取请求之后,解析数据读取请求,获取待处理数据流,包括数据流所在数据文件的名称,该文件名称指示了数据文件中数据所在的分区等信息。

在一个实施例中,数据处理系统中的第一存储模块具体包括:

第一维度分区单元,用于根据所述数据块的内容进行分区,将所述数据块分区标识存储至分布式存储系统;

第二维度分区单元,用于根据对所述数据块访问的频数进行等级划分,将所述数据块分区标识存储至分布式存储系统。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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