本公开涉及数据处理领域,尤其涉及大数据存储、大数据计算等领域,特别的涉及一种基于分布式计算的数据处理方法、装置及电子设备。
背景技术:
1、数据已经成为一项非常重要的资源。如何对数据进行利用,发现其价值,人们已经为其开发了多种多样的技术及工具。当数据达到一定的规模后,普通的技术或者工具可能就不再适用,这时就需要使用大数据相关技术或者工具进行数据的存储、计算、挖掘。在大数据存储领域,hdfs(hadoop distributed file system,hadoop分布式文件系统)是广泛使用的大数据存储基础设施,在大数据的计算领域,spark(分布式计算引擎)则已经成为批处理中最重要且广泛使用的计算引擎。spark不仅支持灵活的scala(一门多范式的编程语言)或者java(一门面向对象的编程语言)编程的方式进行数据处理,还支持使用sql(structured query language,结构化查询语言)进行数据处理,或者两者结合使用,功能强大,满足各种各样的特殊需求。
2、spark处理的数据,有可能是中间数据,后期需要提供给其他系统。但是,目前尚缺乏如何实现指定数据分布的有效手段。
技术实现思路
1、本公开实施例提出了一种基于分布式计算的数据处理方法、装置及电子设备。
2、根据本公开实施例的第一方面,提供一种基于分布式计算的数据处理方法,包括:
3、对待处理数据表中的数据进行业务逻辑处理,得到经过所述业务逻辑处理后的数据结果;
4、确定所述数据结果中每行数据对应的期望分区号;
5、基于集群分区法和所述数据结果中每行数据对应的期望分区号,将所述每行数据重分区至指定的分布式计算引擎spark集群的分区中;其中,所述数据结果中所述每行数据重分区到的指定分区的分区号与对应行数据的期望分区号相同。
6、在上述实施例中,对待处理数据进行业务逻辑处理后,基于集群分区法和数据对应的期望分区号,将指定数据分布到特定分区中,实现精确的分布控制。
7、结合第一方面的一些实施例,在一些实施例中,所述确定所述数据结果中每行数据对应的期望分区号,包括:获取预设的数据分区规则表,所述数据分区规则表中包括一行或多行数据的标识、所述一行或多行数据中每行数据对应的期望分区号,所述数据结果中每行数据属于所述一行或多行数据;基于所述数据结果中每行数据的标识,从所述数据分区规则表中确定出所述数据结果中每行数据对应的期望分区号。
8、在上述实施例中,可以设置数据分区规则表,该数据分区规则表中包括数据的标识及数据对应的期望分区号,从而便于根据不同的分区规则(也叫映射规则)灵活地将数据分布到不同的分区中。
9、结合第一方面的一些实施例,在一些实施例中,所述基于集群分区法和所述数据结果中每行数据对应的期望分区号,将所述每行数据重分区至指定的分布式计算引擎spark集群的分区中,包括:基于预设的逆哈希函数对应的映射结构,将所述数据结果中每行数据对应的期望分区号进行映射处理,得到所述数据结果中每行数据对应的映射值;通过集群分区法,将所述数据结果中每行数据对应的映射值重分区至spark集群的分区中,得到所述数据结果中每行数据的指定分区的分区号。
10、在上述实施例中,在采用集群分区法进行数据的分布时,会让该集群分区法并不直接哈希某个字段,而是对哈希函数取逆,这样就可以指定数据到特定分区中,从而可以进行精确地分布控制。
11、结合第一方面的一些实施例,在一些实施例中,所述逆哈希函数包括第一输入参数和第二输入参数,所述第一输入参数为所述期望分区号,所述第二输入参数为所述spark集群的分区数;其中,所述集群分区法采用的哈希函数的输入与所述逆哈希函数的输出相同,所述集群分区法采用的哈希函数的输出与所述逆哈希函数的所述第一输入参数相同。
12、结合第一方面的一些实施例,在一些实施例中,所述逆哈希函数对应的映射结构在所述逆哈希函数第一次被使用时通过以下方式进行构造:对于所述spark集群的每个区分的分区号,从第一序列中查找第一个数值,对所述第一个数值进行哈希处理后与所述spark集群的分区数进行求模运算,确定所述求模运算后的结果是否与所述分区号相同;如果所述求模运算后的结果与所述分区号不相同,则继续从所述第一序列中查找第二个数值,并对所述第二个数值进行哈希处理后与所述spark集群的分区数进行求模运算,确定求模运算后的结果是否与所述分区号相同,依此类推,直至对所述第一序列中第n个数值进行哈希处理后与所述spark集群的分区数进行求模运算,确定求模运算后的结果与所述分区号相同;其中,所述第一序列包括m个数值,所述n为小于或等于所述m的正整数,所述m与所述spark集群的分区数相关;将所述分区号作为所述映射结构中的键key,将所述第n个数值作为所述键key对应的值value。
13、结合第一方面的一些实施例,在一些实施例中,所述方法还包括:在完成对所述逆哈希函数对应的映射结构的构造后,将所述逆哈希函数对应的映射结构在所述spark集群中每个节点上定义为全局变量。
14、在上述实施例中,在逆哈希函数对应的映射结构的构造过程中,只在逆哈希函数第一次被使用时进行构造,并将该映射结构在spark集群中每个节点上作为全局变量存在,便于后续直接使用该映射结构,从而可以节省算力资源。
15、结合第一方面的一些实施例,在一些实施例中,所述方法还包括:基于spark的注册函数,将所述逆哈希函数注册到spark sql中。
16、在上述实施例中,通过将逆哈希函数注册到spark sql中,便于可以在spark sql中使用,解决了通过sql决定数据分布的方式,从而可以更加简单易用。
17、结合第一方面的一些实施例,在一些实施例中,所述方法还包括:通过所述spark集群的分区,按照所述数据结果中所述每行数据的指定分区的分区号,将对应行数据写入至指定的分布式文件系统目录或文件中。
18、根据本公开实施例的第二方面,提供一种基于分布式计算的数据处理装置,包括:
19、业务逻辑处理模块,用于对待处理数据表中的数据进行业务逻辑处理,得到经过所述业务逻辑处理后的数据结果;
20、确定模块,用于确定所述数据结果中每行数据对应的期望分区号;
21、分区模块,用于基于集群分区法和所述数据结果中每行数据对应的期望分区号,将所述每行数据重分区至指定的分布式计算引擎spark集群的分区中;其中,所述数据结果中所述每行数据重分区到的指定分区的分区号与对应行数据的期望分区号相同。
22、结合第二方面的一些实施例,在一些实施例中,所述确定模块具体用于:获取预设的数据分区规则表,所述数据分区规则表中包括一行或多行数据的标识、所述一行或多行数据中每行数据对应的期望分区号,所述数据结果中每行数据属于所述一行或多行数据;基于所述数据结果中每行数据的标识,从所述数据分区规则表中确定出所述数据结果中每行数据对应的期望分区号。
23、结合第二方面的一些实施例,在一些实施例中,所述分区模块具体用于:基于预设的逆哈希函数对应的映射结构,将所述数据结果中每行数据对应的期望分区号进行映射处理,得到所述数据结果中每行数据对应的映射值;通过集群分区法,将所述数据结果中每行数据对应的映射值重分区至spark集群的分区中,得到所述数据结果中每行数据的指定分区的分区号。
24、结合第二方面的一些实施例,在一些实施例中,所述逆哈希函数包括第一输入参数和第二输入参数,所述第一输入参数为所述期望分区号,所述第二输入参数为所述spark集群的分区数;其中,所述集群分区法采用的哈希函数的输入与所述逆哈希函数的输出相同,所述集群分区法采用的哈希函数的输出与所述逆哈希函数的所述第一输入参数相同。
25、结合第二方面的一些实施例,在一些实施例中,所述逆哈希函数对应的映射结构在所述逆哈希函数第一次被使用时通过以下方式进行构造:对于所述spark集群的每个区分的分区号,从第一序列中查找第一个数值,对所述第一个数值进行哈希处理后与所述spark集群的分区数进行求模运算,确定所述求模运算后的结果是否与所述分区号相同;如果所述求模运算后的结果与所述分区号不相同,则继续从所述第一序列中查找第二个数值,并对所述第二个数值进行哈希处理后与所述spark集群的分区数进行求模运算,确定求模运算后的结果是否与所述分区号相同,依此类推,直至对所述第一序列中第n个数值进行哈希处理后与所述spark集群的分区数进行求模运算,确定求模运算后的结果与所述分区号相同;其中,所述第一序列包括m个数值,所述n为小于或等于所述m的正整数,所述m与所述spark集群的分区数相关;将所述分区号作为所述映射结构中的键key,将所述第n个数值作为所述键key对应的值value。
26、结合第二方面的一些实施例,在一些实施例中,所述装置还包括:定义模块,用于在完成对所述逆哈希函数对应的映射结构的构造后,将所述逆哈希函数对应的映射结构在所述spark集群中每个节点上定义为全局变量。
27、结合第二方面的一些实施例,在一些实施例中,所述装置还包括:注册模块,用于基于spark的注册函数,将所述逆哈希函数注册到spark sql中。
28、结合第二方面的一些实施例,在一些实施例中,所述装置还包括:写入模块,用于通过所述spark集群的分区,按照所述数据结果中所述每行数据的指定分区的分区号,将对应行数据写入至指定的分布式文件系统目录或文件中。
29、根据本公开实施例的第三方面,提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行前述第一方面所述的方法。
30、根据本公开实施例的第四方面,提供一种存储介质,所述存储介质存储有指令,当所述指令在电子设备上运行时,使得所述电子设备执行前述第一方面所述的方法。
31、根据本公开实施例的第五方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现前述第一方面所述方法的步骤。
32、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
1.一种基于分布式计算的数据处理方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述确定所述数据结果中每行数据对应的期望分区号,包括:
3.如权利要求1所述的方法,其特征在于,所述基于集群分区法和所述数据结果中每行数据对应的期望分区号,将所述每行数据重分区至指定的分布式计算引擎spark集群的分区中,包括:
4.如权利要求3所述的方法,其特征在于,所述逆哈希函数包括第一输入参数和第二输入参数,所述第一输入参数为所述期望分区号,所述第二输入参数为所述spark集群的分区数;
5.如权利要求3所述的方法,其特征在于,所述逆哈希函数对应的映射结构在所述逆哈希函数第一次被使用时通过以下方式进行构造:
6.如权利要求3所述的方法,其特征在于,所述方法还包括:
7.如权利要求3-6中任一项所述的方法,其特征在于,所述方法还包括:
8.如权利要求1所述的方法,其特征在于,所述方法还包括:
9.一种基于分布式计算的数据处理装置,其特征在于,包括:
10.一种电子设备,其特征在于,包括:
11.一种存储介质,所述存储介质存储有指令,其特征在于,当所述指令在电子设备上运行时,使得所述电子设备执行权利要求1至8中任一项所述的方法。
12.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序在被处理器执行时实现权利要求1至8中任一项所述方法的步骤。