CN110647570B - 数据处理方法、装置以及电子设备 - Google Patents
数据处理方法、装置以及电子设备 Download PDFInfo
- Publication number
- CN110647570B CN110647570B CN201910896836.7A CN201910896836A CN110647570B CN 110647570 B CN110647570 B CN 110647570B CN 201910896836 A CN201910896836 A CN 201910896836A CN 110647570 B CN110647570 B CN 110647570B
- Authority
- CN
- China
- Prior art keywords
- data processing
- job
- data
- execution
- processing job
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/254—Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Abstract
本申请公开了一种数据处理方法、装置以及电子设备,涉及大数据领域。具体实现方案为:根据各数据处理作业对应的数据处理范围和配置文件,执行至少一个数据处理作业;根据执行结果更新各数据处理作业对应的数据处理范围和运行状态;检查更新后的运行状态,确定运行失败的数据处理作业;根据运行失败的数据处理作业对应的数据处理范围和配置文件,重新执行运行失败的数据处理作业。对各数据处理作业对应的数据处理范围和运行状态进行更新,进而确定失败的数据处理作业,并重新启动失败的数据处理作业。充分了考虑容错机制,确保在作业失败的情况下,数据不会丢失。
Description
技术领域
本申请涉及一种人工智能领域,尤其涉及一种大数据领域。
背景技术
ETL,是Extract-Transform-Load的缩写,表示数据从源端经过抽取(Extract)、转换(Transform)和装载(Load),最终写入到目的端的处理过程。目的是将企业中分散、凌乱、格式不统一的数据重新整合,为后续的商业智能决策提供分析依据。在ETL过程中,抽取是数据的输入过程,主要解决数据源的异构问题,即从不同结构的数据源读取数据进来;装载是数据的输出过程,即将处理后的数据输出到指定的数据仓库或者其他目的端;两者之间的数据转换和清洗过程,主要解决数据质量问题,它通过一系列的清洗过程将海量数据中存在的冗余、错误、缺失问题进行检测修正,并根据用户定义的数据格式进行合并和变换,确保了数据的正确性、一致性、完整性和可用性。
然而,现有的ETL方法可以采用单机程序处理。然而,由于程序只能部署在单机上,受限于单机资源,无法在处理海量数据时进行水平扩展,导致处理能力不足。可以分布式的环境下,部署分布式程序,能够很好地实现水平扩展,处理更大的数据规模。然而,在ETL作业运行失败时,分布式程序处理缺乏完备的容错机制,容易丢失数据,导致数据的完整性无法得到保证。
发明内容
本申请实施例提供一种数据处理方法、装置以及电子设备,以解决现有技术中的一个或多个技术问题。
第一方面,提供了一种数据处理方法,包括:
根据各数据处理作业对应的数据处理范围和配置文件,执行至少一个数据处理作业;
根据执行结果更新各数据处理作业对应的数据处理范围和运行状态;
检查更新后的运行状态,确定运行失败的数据处理作业;
根据运行失败的数据处理作业对应的数据处理范围和配置文件,重新执行运行失败的数据处理作业。
在本实施方式中,对各数据处理作业对应的数据处理范围和运行状态进行更新,进而确定失败的数据处理作业,并重新启动失败的数据处理作业。充分了考虑容错机制,确保在作业失败的情况下,数据不会丢失。
在一种实施方式中,还包括:
根据数据量级、处理时长以及所需计算资源对至少一个数据处理作业进行分组;
确定各组数据处理作业提交至spark集群执行的周期。
在本实施方式中,分组可以将长短作业错开,保持数据处理的均衡性。解决了在同一时刻提交很多作业的情况下,快速消耗队列资源,导致后提交的作业可能申请不到资源运行的技术问题。
在一种实施方式中,还包括:
对提交至spark集群的各数据处理作业进行分布式加锁,得到各数据处理作业对应的作业名,作业名包括:数据处理作业消费kafka数据的主题和作业执行的开始时间。
在本实施方式中,确保作业唯一性,避免同一时间提交相同的作业,造成数据重复和计算资源浪费。
在一种实施方式中,对同时提交的两个不同的数据处理作业进行分布式加锁,包括:
在第一数据处理作业的第一临时顺序节点是序号最小节点的情况下,第一数据处理作业加锁成功;
在第二数据处理作业的第二临时顺序节点不是序号最小节点的情况下,对第二临时顺序节点的变化进行监控;
在第一数据处理作业执行完成的情况下,释放锁,并删除第一临时顺序节点:
将第二临时顺序节点变成序号最小节点,第二数据处理作业加锁成功。
在本实施方式中,有效避免了对同一批次的数据进行重复处理,节约资源,保证任意时刻所有作业的唯一性,保持数据一致。
在一种实施方式中,根据执行结果更新各数据处理作业对应的数据处理范围和运行状态,包括:
执行结束后,记录执行开始时间和执行结束时间,设置执行成功或失败的标识,以更新运行状态表;
在不存在开始消费数据的时间的情况下,向kafka集群获取数据处理作业消费kafka数据的偏移量范围,并将其作为数据处理范围,以更新数据偏移量表,偏移量范围为开始消费数据的时间和结束消费数据的时间之差。
在本实施方式中,通过对这两个表进行监控来获取数据处理作业的情况,便于后续重新执行失败的数据处理作业。
在一种实施方式中,检查更新后的运行状态,确定运行失败的数据处理作业,包括:
在运行状态表中,查询执行失败的标识对应的数据处理作业,标记为待选作业;
计算待选作业的执行开始时间点与执行结束时间点之间的时间差;
在时间差大于第一阈值时间段的情况下,将待选作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
在本实施方式中,由于充分考虑容错机制,确保在任务失败的情况下,数据不会丢失。
在一种实施方式中,检查更新后的运行状态,确定运行失败的数据处理作业,包括:
在与当前时间点相差第二阈值时间段的过去时间点,并未查询到运行状态表中包含有数据处理作业对应的作业名,则将过去时间点对应的数据处理作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
在本实施方式中,由于充分考虑容错机制,确保在任务失败的情况下,数据不会丢失。
第二方面,提供了一种数据处理装置,包括:
数据处理模块,用于根据各数据处理作业对应的数据处理范围和配置文件,执行至少一个数据处理作业;
状态管理模块,用于根据执行结果更新各数据处理作业对应的数据处理范围和运行状态;
作业监控模块,用于检查更新后的运行状态,确定运行失败的数据处理作业;
作业重执模块,用于根据运行失败的数据处理作业对应的数据处理范围和配置文件,重新执行运行失败的数据处理作业。
在一种实施方式中,还包括:
作业调度模块,用于根据数据量级、处理时长以及所需计算资源对至少一个数据处理作业进行分组,确定各组数据处理作业提交至spark集群执行的周期。
在一种实施方式中,还包括:
作业管理模块,用于对提交至spark集群的各数据处理作业进行分布式加锁,得到各数据处理作业对应的作业名,作业名包括:数据处理作业消费kafka数据的主题和作业执行的开始时间。
在一种实施方式中,作业管理模块包括:
第一加锁子模块,用于在第一数据处理作业的第一临时顺序节点是序号最小节点的情况下,第一数据处理作业加锁成功;
节点监控子模块,用于在第二数据处理作业的第二临时顺序节点不是序号最小节点的情况下,对第二临时顺序节点的变化进行监控;
节点删除子模块,用于在第一数据处理作业执行完成的情况下,释放锁,并删除第一临时顺序节点;
第二加锁子模块,用于将第二临时顺序节点变成序号最小节点,第二数据处理作业加锁成功。
在一种实施方式中,状态管理模块包括:
第一更新子模块,用于执行结束后,记录执行开始时间和执行结束时间,设置执行成功或失败的标识,以更新运行状态表;
第二更新子模块,用于在不存在开始消费数据的时间的情况下,向kafka集群获取数据处理作业消费kafka数据的偏移量范围,并将其作为数据处理范围,以更新数据偏移量表,偏移量范围为开始消费数据的时间和结束消费数据的时间之差。
在一种实施方式中,作业监控模块包括:
查询子模块,用于在运行状态表中,查询执行失败的标识对应的数据处理作业,标记为待选作业;
计算子模块,用于计算待选作业的执行开始时间点与执行结束时间点之间的时间差;
第一确定子模块,用于在时间差大于第一阈值时间段的情况下,将待选作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
在一种实施方式中,作业监控模块包括:
第二确定子模块,用于在与当前时间点相差第二阈值时间段的过去时间点,并未查询到运行状态表中包含有数据处理作业对应的作业名,则将过去时间点对应的数据处理作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
上述申请中的一个实施例具有如下优点或有益效果:因为采用Spark构建系统的技术手段,所以克服了无法并行处理数据的技术问题,进而达到提高数据处理的水平扩展性技术效果。因为采用Zookeeper加锁的技术手段,保证了同一时间只能执行一个作业,保证作业唯一性的技术效果。因为采用了对各数据处理作业对应的数据处理范围和运行状态进行更新,进而确定失败的数据处理作业,并重新启动失败的数据处理作业的技术手段,达到了充分考虑容错机制,确保在作业失败的情况下,数据不会丢失的技术效果。
上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1是根据本申请实施方式提供的一种数据处理方法流程示意图;
图2是根据本申请实施方式提供的一种数据处理系统场景图;
图3是根据本申请实施方式提供的一种数据处理方法流程场景图;
图4根据本申请实施方式提供的另一种数据处理方法流程示意图;
图5是根据本申请实施方式提供的数据处理作业分组场景图;
图6是根据本申请实施方式提供的分布式加锁方法流程示意图;
图7是根据本申请实施方式提供的同时提交两个数据处理作业进行加锁的场景图;
图8是根据本申请实施方式提供的对运行失败的数据处理作业的监控方法的场景图;
图9是根据本申请实施方式提供的一种数据处理装置结构框图;
图10是根据本申请实施方式提供的另一种数据处理装置结构框图;
图11是根据本申请实施方式提供的作业管理模块的结构框图;
图12是用来实现本申请实施例的一种数据处理方法的电子设备的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
实施例一
在一种具体实施方式中,如图1所示,提供了一种数据处理方法,包括:
步骤S10:根据各数据处理作业对应的数据处理范围和配置文件,执行至少一个数据处理作业;
步骤S20:根据执行结果更新各数据处理作业对应的数据处理范围和运行状态;
步骤S30:检查更新后的运行状态,确定运行失败的数据处理作业;
步骤S40:根据运行失败的数据处理作业对应的数据处理范围和配置文件,重新执行运行失败的数据处理作业。
在一种示例中,如图2和如图3所示,可以通过基于Spark计算驱动器的分布式ETL系统来对海量数据进行处理。ETL(Extract-Transform-Load)系统基于Spark构建。Spark是一个实现快速通用的集群计算平台,具有并行处理能力,而且可以方便地在yarn(另一种资源协调者,Another Resource Negotiator)集群上进行部署。yarn集群是一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。yarn集群是资源调度和管理平台,是spark集群运行的基础。通过基于Spark计算驱动器的分布式ETL系统来对海量数据进行处理的具体过程包括如下步骤:
首先,作业调度模块通过提交(submit)脚本提交数据处理作业到yarn集群。数据处理作业可以是ETL作业,对每个ETL作业指定对应的kafka信息、输出(sink)信息、抽取(Extractor)、转移(Transformer)、加载(Loader)类名,得到配置文件,存储在HDFS(Hadoop分布式文件系统,Hadoop Distributed File System)中。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。每个ETL作业消费指定的数据主题,ETL作业对每个数据主题下的各个数据进行消费。例如,数据主题可以是kafka主题(topic),一个kafkatopic下有多个分割部分(partition),实际上消费的是各个partition的数据。获取数据处理作业对应的数据处理范围。Spark驱动器(Driver)读取MySQL9关系型数据库管理系统)的kafka_offset表,获取开始消费的数据偏移量(offset)对应小时(offset_start_hour)与结束消费的offset对应小时(offset_end_hour)时间段内的数据偏移量范围(offset范围),作为ETL的数据处理范围。
然后,作业调度模块提交数据处理作业到yarn集群之后,申请到数据资源之后,开始执行各个数据处理作业。数据处理模块包括数据抽取(Extractor)子模块、数据转换(Transformer)子模块、数据装载(Loader)子模块,分别实现数据抽取、转换和装载功能。处理程序依赖spark计算驱动器,能够在yarn集群分布式执行。处理程序执行ETL作业的过程可以包括如下步骤:Extractor模块读取数据处理范围中的数据,得到JavaRDD(弹性分布式数据集,Resilient Distributed Dataset)。JavaRDD是Spark的通用数据结构。Transformer模块根据配置文件中指定的transformer类名,创建transformer实例,进行数据过滤清洗和转换工作,将Java RDD转换得到Dataset<Row>。Loader模块根据配置文件中指定的loader类名,创建loader实例,将partition的数据写到指定的输出(sink)。应用程序会根据这些类名,反射得到对应的实例,然后执行ETL作业。
然后,作业执行完成后,状态管理模块更新MySQL中的运行状态(job status)表。具体的,可以设置执行结束时间(end_time)为当前时间,设置执行开始时间(start_time)。如果执行成功,设置执行成功的标识(is_finished为YES)。如果执行失败或者超时,设置执行失败的标识(is_finished为NO)。状态管理模块更新MySQL中的数据偏移量(kafkaoffset)表。具体的,检查当前的kafka_offset表,如果存在offset_start_hour的记录,将不再向kafka集群获取最新offset,否则,将向kafka集群获取最新offset,并保存至kafka_offset表。之后,计算最新offset数据在kafka的偏移量范围,作为数据处理范围。将计算得到的数据处理范围添加至kafka_offset表,以对kafka_offset表进行更新。保存每次更新的消费kafka的最新偏移量数据和每个ETL作业的运行状态,存储在MySQL中备用。
最后,作业监控模块对失败作业进行监控。包括插入数据处理作业,但运行超时的失败情况,以及未能插入数据处理作业导致执行失败的两种情况。确认运行状态表中is_finished为NO对应的数据处理作业。根据运行失败的数据处理作业对应的数据处理范围和配置文件,重新执行运行失败的数据处理作业。作业监控模块可以每隔一个小时启动监控程序,监控并重启失败任务。
基于分布式环境的复杂性,可能会出现网络抖动、Kafka宕机、HDFS集群宕机等不可预估的因素,导致ETL作业运行失败,造成数据丢失。本实施方式引入了状态管理模块和作业监控模块来实现ETL容错机制。状态管理模块在MySQL数据库中保存了每次消费Kafka的最新Offset以及运行状态,作为作业监控和作业重启的数据来源。分布式ETL系统必须充分考虑容错机制,确保在作业失败的情况下,数据不会丢失。
在一种实施方式中,如图4所示,还包括:
步骤S50:根据数据量级、处理时长以及所需计算资源对至少一个数据处理作业进行分组,确定各组数据处理作业提交至spark集群执行的周期。
在一种示例中,如图5所示,通过作业调度模块对根据ETL作业处理的数据量级、处理时长、所需计算资源等对所有ETL作业进行分组,得到多组job(作业)。确定提交至yarn集群的周期,实现job级别的并行。SparkDriver负责把每组job进行DAG(有向无环图)切分,划分为不同的stage(阶段),然后把每个stage对应的task(任务)调度提交到Executor子模块进行计算,这样Executor子模块可以并行执行同一个stage的task,从而实现task级别的并行。stage和task都是spark对于作业不同层面的抽象和划分,就是一个spark application可以分成多组job,每组job分成多个stage,每个stage分成多个task,然后spark执行器(Executor)就执行这些task。分组可以将长短作业错开,保持数据处理的均衡性。解决了在同一时刻提交很多作业的情况下,快速消耗队列资源,导致后提交的作业可能申请不到资源运行的技术问题。
在一种实施方式中,如图4所示,还包括:
步骤S60:对提交至spark集群的各数据处理作业进行分布式加锁,得到各数据处理作业对应的作业名,作业名包括:数据处理作业消费kafka数据的主题和作业执行的开始时间。
在一种示例中,如图2所示,数据处理作业的执行任务开始后,通过作业管理模块对ETL作业进行Zookeeper加锁。每个提交的作业都会生成唯一的作业名存储在Zookeeper中。锁住的对象是jobname(jobname的格式:Yishan-{topic}-{start_hour}),Yishan是批量处理ETL作业的系统名称,topic是消费的kafka数据主题,start_hour是开始消费的小时。由于每隔一段时间去启动ETL作业,对ETL作业的唯一命名也有利于失败作业的恢复。确保作业唯一性,避免同一时间提交相同的作业,造成数据重复和计算资源浪费。
如果获取作业锁失败,Yishan系统可以以指数退避策略进行重试5次。如果最终依然未能获取作业锁,作业将会退出并发出告警邮件,任务结束。指数退避算法是网络上的节点在发送数据冲突后,等待一定时间后再发,等待时间是随指数增长,从而避免频繁的触发冲突。二进制指数退避算法或截断指数退避算法常常作为避免网络堵塞的一部分用于同一数据块的重发策略。发生n次冲突后,等待时间在0~2^n-1个间隙时间(slot times)之间选择随机选择。
在一种实施方式中,如图6所示,步骤S60中,对同时提交的两个不同的数据处理作业进行分布式加锁,包括:
步骤S601:在第一数据处理作业的第一临时顺序节点是序号最小节点的情况下,第一数据处理作业加锁成功;
步骤S602:在第二数据处理作业的第二临时顺序节点不是序号最小节点的情况下,对第二临时顺序节点的变化进行监控;
步骤S603:在第一数据处理作业执行完成的情况下,释放锁,并删除第一临时顺序节点;
步骤S604:将第二临时顺序节点变成序号最小节点,第二数据处理作业加锁成功。
在一种示例中,创建第一数据处理作业的第一临时顺序节点。判断第一临时顺序节点是否是最小节点,若是,则第一数据处理作业加锁成功。创建第二数据处理作业的第二临时顺序节点。判断第二临时顺序节点是否是序号最小节点,若否,则对第二临时顺序节点的变化进行监控。在第一数据处理作业执行完成的情况下,释放锁,并删除第一临时顺序节点。监控到第二临时顺序节点发生变化时,第二临时顺序节点变成序号最小节点,第二数据处理作业加锁成功。
如图7所示,同时提交两个数据处理作业时,在客户端A对第一数据处理作业进行加锁。客户端A先创建Zookeeper临时顺序节点,即在Lock目录下创建一个有序的文件,序号为00000001。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。客户端A判断创建的节点序号大小,是最小节点,所以加锁成功。在客户端B对第二数据处理作业进行加锁。客户端B同样通过Zookeeper在Lock目录下创建临时顺序节点,文件序号为00000002。客户端B判断文件序号是否为最小,发现Lock目录还有一个序号更小的文件,说明锁已经被占用,加锁失败,进入等待状态。客户端B给序号00000001文件加上监听器,监听是否有变化。客户端A处理逻辑执行完毕,释放锁,删除序号00000001节点。客户端B监听到00000001节点发生变化,00000002节点变成序号最小的节点,客户端B因此获得锁。
本实施方式,采用了Zookeeper临时顺序节点来实现ETL作业的分布式锁。临时节点可以保证进程异常退出后及时释放作业锁,避免死锁的发生。在临时节点的基础上,添加了节点有序性,在多个进程同时监控同一个节点时,Zookeeper只需要通知序号最小的节点,而不需要通知所有节点,提高了处理效率。在用户可能会在同一时刻向ETL系统误提交多个相同的数据处理作业时,有效避免了对同一批次的数据进行重复处理,节约资源,保证任意时刻所有作业的唯一性,保持数据一致。
在一种实施方式中,如图4所示,步骤S20,包括:
步骤S201:执行结束后,记录执行开始时间和执行结束时间,设置执行成功或失败的标识,以更新运行状态表;
步骤S202:在不存在开始消费数据的时间的情况下,向kafka集群获取数据处理作业消费kafka数据的偏移量范围,并将其作为数据处理范围,以更新数据偏移量表,偏移量范围为开始消费数据的时间和结束消费数据的时间之差。
在一种示例中,Offset表存的是每一次数据处理作业处理的数据在kafka的偏移量范围;运行状态表存的是数据处理作业的状态,标识是否成功结束,开始时间,结束时间。作业监控模块通过对这两个表进行监控来获取数据处理作业的情况,便于后续重新执行失败的数据处理作业。
在一种实施方式中,如图4所示,步骤S30包括:
步骤S301:在运行状态表中,查询执行失败的标识对应的数据处理作业,标记为待选作业;
步骤S302:计算待选作业的执行开始时间点与执行结束时间点之间的时间差;
步骤S303:在时间差大于第一阈值时间段的情况下,将待选作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
在一种示例中,如图8所示,检查到超时的情况。扫描job表,根据运行状态获取失败任务或超时任务。例如,检查job表中is_finished标志为NO的作业记录,计算检查到的作业的start_time与当前时间的时间差,如果大于第一阈值时间段4小时,则将待选作业加入到失败作业行列(failed_jobs队列)。遍历failed_jobs队列,通过yarn application表和作业的job_name,找出yam application地址,去掉超时运行的ETL作业。根据失败作业的topic和start_hour,从offset表里找到对应的数据范围,根据数据范围和配置文件,重新提交失败作业,最后发送告警邮件到运维人员。需要指出的是,第一阈值时间段可以根据不同的处理任务,进行适应性的调整,均在本实施方式的保护范围内。由于充分考虑容错机制,确保在任务失败的情况下,数据不会丢失。
在一种实施方式中,如图4所示,步骤S30,包括:
步骤S304:在与当前时间点相差第二阈值时间段的过去时间点,并未查询到运行状态表中包含有数据处理作业对应的作业名,则将过去时间点对应的数据处理作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
在一种示例中,如图8所示,检查到作业写入失败的情况。扫描job表,检查job表中是否包含Yishan-{topic}-{start_hour}的记录。例如,检查job表中start_hour为当前时间-3小时,end_hour为当前时间-2小时,如果不存在Yishan-{topic}-{start_hour}的记录,则检查到的对应的作业写入失败。将对应的失败作业加入到failed_jobs队列。需要指出的是,第二阈值时间段可以根据不同的处理任务,进行适应性的调整,均在本实施方式的保护范围内。由于充分考虑容错机制,确保在任务失败的情况下,数据不会丢失。
本实施方案中,ETL系统基于Spark构建,天然具有并行处理能力,而且可以方便地在yarn集群上进行部署,具备高度的水平扩展性。对ETL作业进行Zookeeper加锁,保证了同一时间只能执行一个作业,保证作业唯一性。在MySQL数据库中保存了每次消费Kafka的最新Offset以及作业运行状态,作为作业监控和作业重启的数据来源。每隔一个小时启动监控程序,监控并重启失败作业。充分考虑容错机制,确保在作业失败的情况下,数据不会丢失。
实施例二
在另一种具体实施方式中,提供了一种数据处理装置100,如图9所示,包括:
数据处理模块110,用于根据各数据处理作业对应的数据处理范围和配置文件,执行至少一个所述数据处理作业;
状态管理模块120,用于根据执行结果更新各所述数据处理作业对应的数据处理范围和运行状态;
作业监控模块130,用于检查更新后的运行状态,确定运行失败的数据处理作业;
作业重执模块140,用于根据所述运行失败的数据处理作业对应的数据处理范围和配置文件,重新执行所述运行失败的数据处理作业。
在一种示例中,提供了一种数据处理装置200,如图10所示,还包括:
作业调度模块150,用于根据数据量级、处理时长以及所需计算资源对所述至少一个所述数据处理作业进行分组,确定各组数据处理作业提交至spark集群执行的周期。
在一种示例中,提供了一种数据处理装置200,如图10所示,还包括:
作业管理模块160,用于对提交至spark集群的各所述数据处理作业进行分布式加锁,得到各所述数据处理作业对应的作业名,所述作业名包括:所述数据处理作业消费kafka数据的主题和作业执行的开始时间。
在一种示例中,如图11所示,所述作业管理模块160包括:
第一加锁子模块1601,用于在第一数据处理作业的第一临时顺序节点是序号最小节点的情况下,所述第一数据处理作业加锁成功;
节点监控子模块1602,用于在第二数据处理作业的第二临时顺序节点不是序号最小节点的情况下,对所述第二临时顺序节点的变化进行监控;
节点删除子模块1603,用于在所述第一数据处理作业执行完成的情况下,释放锁,并删除所述第一临时顺序节点;
第二加锁子模块1604,用于将所述第二临时顺序节点变成序号最小节点,所述第二数据处理作业加锁成功。
在一种实施方式中,所述状态管理模块120包括:
第一更新子模块1201,用于执行结束后,记录执行开始时间和执行结束时间,设置执行成功或失败的标识,以更新运行状态表;
第二更新子模块1202,用于在不存在开始消费数据的时间的情况下,向kafka集群获取所述数据处理作业消费kafka数据的偏移量范围,并将其作为所述数据处理范围,以更新数据偏移量表,所述偏移量范围为开始消费数据的时间和结束消费数据的时间之差。
在一种实施方式中,所述作业监控模块130包括:
查询子模块1301,用于在所述运行状态表中,查询执行失败的标识对应的数据处理作业,标记为待选作业;
计算子模块1302,用于计算所述待选作业的执行开始时间点与所述执行结束时间点之间的时间差;
第一确定子模块1303,用于在所述时间差大于第一阈值时间段的情况下,将所述待选作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
在一种实施方式中,所述作业监控模块130包括:
第二确定子模块1304,用于在与当前时间点相差第二阈值时间段的过去时间点,并未查询到所述运行状态表中包含有所述数据处理作业对应的作业名,则将所述过去时间点对应的数据处理作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。
如图12所示,是根据本申请实施例的一种数据处理方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。
如图12所示,该电子设备包括:一个或多个处理器1201、存储器1202,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示图形用户界面(Graphical User Interface,GUI)的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图12中以一个处理器1201为例。
存储器1202即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请所提供的一种数据处理方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的一种数据处理方法。
存储器1202作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的一种数据处理方法对应的程序指令/模块(例如,附图9所示的数据处理模块110、状态管理模块120和作业监控模块130)。处理器1201通过运行存储在存储器1202中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的一种数据处理方法。
存储器1202可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据一种数据处理方法的电子设备的使用所创建的数据等。此外,存储器1202可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器1202可选包括相对于处理器1201远程设置的存储器,这些远程存储器可以通过网络连接至一种数据处理方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
一种数据处理方法的电子设备还可以包括:输入装置1203和输出装置1204。处理器1201、存储器1202、输入装置1203和输出装置1204可以通过总线或者其他方式连接,图12中以通过总线连接为例。
输入装置1203可接收输入的数字或字符信息,以及产生与一种数据处理方法的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置1204可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(Liquid Cr12stal Displa12,LCD)、发光二极管(LightEmitting Diode,LED)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用集成电路(Application Specific Integrated Circuits,ASIC)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(programmable logic device,PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(Cathode Ray Tube,阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
根据本申请实施例的技术方案,ETL系统基于Spark构建,天然具有并行处理能力,而且可以方便地在yarn集群上进行部署,具备高度的水平扩展性。对ETL作业进行Zookeeper加锁,保证了同一时间只能执行一个作业,保证作业唯一性。在MySQL数据库中保存了每次消费Kafka的最新Offset以及作业运行状态,作为作业监控和作业重启的数据来源。每隔一个小时启动监控程序,监控并重启失败作业。充分考虑容错机制,确保在作业失败的情况下,数据不会丢失。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。
Claims (16)
1.一种数据处理方法,其特征在于,包括:
根据各数据处理作业对应的数据处理范围和配置文件,执行至少一个所述数据处理作业;
根据执行结果更新各所述数据处理作业对应的数据处理范围和运行状态;
检查更新后的运行状态,确定运行失败的数据处理作业;
根据所述运行失败的数据处理作业对应的数据处理范围和配置文件,重新执行所述运行失败的数据处理作业,
其中,根据执行结果更新各所述数据处理作业对应的数据处理范围和运行状态,包括:在不存在开始消费数据的时间的情况下,向kafka集群获取所述数据处理作业消费kafka数据的偏移量范围,并将其作为所述数据处理范围,以更新数据偏移量表,所述偏移量范围为开始消费数据的时间对应的数据偏移量和结束消费数据的时间对应的数据偏移量之差。
2.根据权利要求1所述的方法,其特征在于,还包括:
根据数据量级、处理时长以及所需计算资源对所述至少一个所述数据处理作业进行分组;
确定各组数据处理作业提交至spark集群执行的周期。
3.根据权利要求1所述的方法,其特征在于,还包括:
对提交至spark集群的各所述数据处理作业进行分布式加锁,得到各所述数据处理作业对应的作业名,所述作业名包括:所述数据处理作业消费kafka数据的主题和作业执行的开始时间。
4.根据权利要求3所述的方法,其特征在于,对同时提交的两个不同的数据处理作业进行分布式加锁,包括:
在第一数据处理作业的第一临时顺序节点是序号最小节点的情况下,所述第一数据处理作业加锁成功;
在第二数据处理作业的第二临时顺序节点不是序号最小节点的情况下,对所述第二临时顺序节点的变化进行监控;
在所述第一数据处理作业执行完成的情况下,释放锁,并删除所述第一临时顺序节点;
将所述第二临时顺序节点变成序号最小节点,所述第二数据处理作业加锁成功。
5.根据权利要求3所述的方法,其特征在于,根据执行结果更新各所述数据处理作业对应的数据处理范围和运行状态,还包括:
执行结束后,记录执行开始时间和执行结束时间,设置执行成功或失败的标识,以更新运行状态表。
6.根据权利要求5所述的方法,其特征在于,检查更新后的运行状态,确定运行失败的数据处理作业,包括:
在所述运行状态表中,查询执行失败的标识对应的数据处理作业,标记为待选作业;
计算所述待选作业的执行开始时间点与执行结束时间点之间的时间差;
在所述时间差大于第一阈值时间段的情况下,将所述待选作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
7.根据权利要求5所述的方法,其特征在于,检查更新后的运行状态,确定运行失败的数据处理作业,包括:
在与当前时间点相差第二阈值时间段的过去时间点,并未查询到所述运行状态表中包含有所述数据处理作业对应的作业名,则将所述过去时间点对应的数据处理作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
8.一种数据处理装置,其特征在于,包括:
数据处理模块,用于根据各数据处理作业对应的数据处理范围和配置文件,执行至少一个所述数据处理作业;
状态管理模块,用于根据执行结果更新各所述数据处理作业对应的数据处理范围和运行状态;
作业监控模块,用于检查更新后的运行状态,确定运行失败的数据处理作业;
作业重执模块,用于根据所述运行失败的数据处理作业对应的数据处理范围和配置文件,重新执行所述运行失败的数据处理作业,
其中,所述状态管理模块包括第一更新子模块,用于在不存在开始消费数据的时间的情况下,向kafka集群获取所述数据处理作业消费kafka数据的偏移量范围,并将其作为所述数据处理范围,以更新数据偏移量表,所述偏移量范围为开始消费数据的时间对应的数据偏移量和结束消费数据的时间对应的数据偏移量之差。
9.根据权利要求8所述的装置,其特征在于,还包括:
作业调度模块,用于根据数据量级、处理时长以及所需计算资源对所述至少一个所述数据处理作业进行分组,确定各组数据处理作业提交至spark集群执行的周期。
10.根据权利要求8所述的装置,其特征在于,还包括:
作业管理模块,用于对提交至spark集群的各所述数据处理作业进行分布式加锁,得到各所述数据处理作业对应的作业名,所述作业名包括:所述数据处理作业消费kafka数据的主题和作业执行的开始时间。
11.根据权利要求10所述的装置,其特征在于,所述作业管理模块包括:
第一加锁子模块,用于在第一数据处理作业的第一临时顺序节点是序号最小节点的情况下,所述第一数据处理作业加锁成功;
节点监控子模块,用于在第二数据处理作业的第二临时顺序节点不是序号最小节点的情况下,对所述第二临时顺序节点的变化进行监控;
节点删除子模块,用于在所述第一数据处理作业执行完成的情况下,释放锁,并删除所述第一临时顺序节点;
第二加锁子模块,用于将所述第二临时顺序节点变成序号最小节点,所述第二数据处理作业加锁成功。
12.根据权利要求10所述的装置,其特征在于,所述状态管理模块包括:
第二更新子模块,用于执行结束后,记录执行开始时间和执行结束时间,设置执行成功或失败的标识,以更新运行状态表。
13.根据权利要求12所述的装置,其特征在于,所述作业监控模块包括:
查询子模块,用于在所述运行状态表中,查询执行失败的标识对应的数据处理作业,标记为待选作业;
计算子模块,用于计算所述待选作业的执行开始时间点与所述执行结束时间点之间的时间差;
第一确定子模块,用于在所述时间差大于第一阈值时间段的情况下,将所述待选作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
14.根据权利要求12所述的装置,其特征在于,所述作业监控模块包括:
第二确定子模块,用于在与当前时间点相差第二阈值时间段的过去时间点,并未查询到所述运行状态表中包含有所述数据处理作业对应的作业名,则将所述过去时间点对应的数据处理作业作为运行失败的数据处理作业,加入至运行失败作业行列中。
15.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的方法。
16.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910896836.7A CN110647570B (zh) | 2019-09-20 | 2019-09-20 | 数据处理方法、装置以及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910896836.7A CN110647570B (zh) | 2019-09-20 | 2019-09-20 | 数据处理方法、装置以及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110647570A CN110647570A (zh) | 2020-01-03 |
CN110647570B true CN110647570B (zh) | 2022-04-29 |
Family
ID=68992335
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910896836.7A Active CN110647570B (zh) | 2019-09-20 | 2019-09-20 | 数据处理方法、装置以及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110647570B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110928721B (zh) * | 2020-01-22 | 2020-06-19 | 北京懿医云科技有限公司 | 任务执行方法与装置、电子设备、存储介质 |
CN112269765A (zh) * | 2020-11-13 | 2021-01-26 | 中盈优创资讯科技有限公司 | 提升Spark结构化流文件数据源读取性能方法及装置 |
CN112615773B (zh) * | 2020-12-02 | 2023-02-28 | 海南车智易通信息技术有限公司 | 一种消息处理方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106776855A (zh) * | 2016-11-29 | 2017-05-31 | 上海轻维软件有限公司 | 基于Spark Streaming读取Kafka数据的处理方法 |
CN108846076A (zh) * | 2018-06-08 | 2018-11-20 | 山大地纬软件股份有限公司 | 支持接口适配的海量多源异构数据etl方法及系统 |
CN109525436A (zh) * | 2018-12-19 | 2019-03-26 | 福建新大陆软件工程有限公司 | 应用程序主备切换方法及系统 |
US20190244146A1 (en) * | 2018-01-18 | 2019-08-08 | D&B Business Information Solutions | Elastic distribution queuing of mass data for the use in director driven company assessment |
-
2019
- 2019-09-20 CN CN201910896836.7A patent/CN110647570B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106776855A (zh) * | 2016-11-29 | 2017-05-31 | 上海轻维软件有限公司 | 基于Spark Streaming读取Kafka数据的处理方法 |
US20190244146A1 (en) * | 2018-01-18 | 2019-08-08 | D&B Business Information Solutions | Elastic distribution queuing of mass data for the use in director driven company assessment |
CN108846076A (zh) * | 2018-06-08 | 2018-11-20 | 山大地纬软件股份有限公司 | 支持接口适配的海量多源异构数据etl方法及系统 |
CN109525436A (zh) * | 2018-12-19 | 2019-03-26 | 福建新大陆软件工程有限公司 | 应用程序主备切换方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110647570A (zh) | 2020-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110647570B (zh) | 数据处理方法、装置以及电子设备 | |
US8938421B2 (en) | Method and a system for synchronizing data | |
US9760595B1 (en) | Parallel processing of data | |
AU2004264635B2 (en) | Fast application notification in a clustered computing system | |
CN110795503A (zh) | 分布式存储系统的多集群数据同步方法及相关装置 | |
CN111506401B (zh) | 自动驾驶仿真任务调度方法、装置、电子设备及存储介质 | |
US7877757B2 (en) | Work item event monitor for procession of queued events | |
CN110019123B (zh) | 一种数据迁移方法和装置 | |
CN111782365B (zh) | 定时任务处理方法、装置、设备及存储介质 | |
CN111897638A (zh) | 分布式任务调度方法及系统 | |
US11392414B2 (en) | Cooperation-based node management protocol | |
CN111930487A (zh) | 作业流调度方法、装置、电子设备及存储介质 | |
US20160234108A1 (en) | Selective data collection using a management system | |
US20180300140A1 (en) | Information processing apparatus, information processing method, and non-transitory computer-readable storage medium | |
EP3825865A2 (en) | Method and apparatus for processing data | |
CN105589756A (zh) | 批处理集群系统以及方法 | |
CN112540914A (zh) | 单元测试的执行方法、执行装置、服务器和存储介质 | |
US10970143B1 (en) | Event action management mechanism | |
CN112667383A (zh) | 一种任务执行及调度方法、系统、装置、计算设备及介质 | |
US10515089B2 (en) | Pseudo-synchronous processing by an analytic query and build cluster | |
US8103905B2 (en) | Detecting and recovering from process failures | |
CN111913793A (zh) | 分布式任务调度方法、装置、节点设备和系统 | |
CN111782357A (zh) | 标签控制方法及装置、电子设备和可读存储介质 | |
EP3859529B1 (en) | Backup management method and system, electronic device and medium | |
JP2011123601A (ja) | イベント一致判定装置、イベント一致判定方法、および、イベント一致判定プログラム |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |