用于大数据的数据处理方法和数据处理装置

文档序号:29623461发布日期:2022-04-13 13:51阅读:126来源:国知局
用于大数据的数据处理方法和数据处理装置

1.本公开涉及一种用于大数据的数据处理方法和数据处理装置。


背景技术:

2.大数据是指异构格式的大量快速增长的数据集。apache hadoop是早期的开源大数据解决方案,其包括用于持久存储大数据的分布式文件系统(hdfs),以及基于mapreduce抽象的分析框架。apache spark是专为大规模数据处理而设计的快速通用的计算系统,spark是一种与hadoop相似的开源集群计算环境,但是spark在某些工作负载方面表现得更加优越。最近,apache spark引入了一种称为弹性分布式数据集(rdd)的新抽象,以支持用于迭代工作负载的容错数据重用,可以实现比hadoop mapreduce好一个数量级的性能。spark提供了一个丰富的且易于使用的应用程序接口,可以构建用于图形计算、流处理、机器学习和sql查询的支持库。如今,spark被广泛地部署以服务于大数据分析。


技术实现要素:

3.本公开至少一实施例提供一种用于大数据的数据处理方法,包括:获取用原生编程语言编写的主程序;在原生系统中将主程序进行编译并生成可加载模块,其中,可加载模块包括第一部分程序和第二部分程序,第一部分程序包括第一运算符的功能实现,第二部分程序包括对第二运算符对应的函数进行调用的函数指针;由原生系统中运行的虚拟机加载可加载模块,并且将第二部分程序转换为预定虚拟机大数据处理体系支持的虚拟机代码,虚拟机代码调用预定虚拟机大数据处理体系的函数的功能实现;以及由虚拟机运行可加载模块包含的主程序,其中,在主程序的运行过程中,虚拟机构建可加载模块对应的有向无环图程序,然后运行有向无环图程序,将第一部分程序交由原生系统运行,将转换后的第二部分程序交由预定虚拟机大数据处理体系运行。
4.例如,在本公开至少一实施例提供的数据处理方法中,数据处理方法采用分布式计算,第一运算符为本地类运算符,并且第二运算符为全局类运算符。
5.例如,在本公开至少一实施例提供的数据处理方法中,在原生系统中将主程序进行编译并生成可加载模块,包括:对第一部分程序进行优化操作以降低原生系统与虚拟机之间的交互开销。
6.例如,在本公开至少一实施例提供的数据处理方法中,对第一部分程序进行优化操作,包括:将第一部分程序中的一连串运算步骤融合为一个运算步骤。
7.例如,在本公开至少一实施例提供的数据处理方法中,对第一部分程序进行优化操作,包括:将第一部分程序中的至少一个运算符设置为每次批处理多个数据。
8.例如,在本公开至少一实施例提供的数据处理方法中,对第一部分程序进行优化操作,包括:针对第一部分程序要处理的数据,将相同数据类型的数据转换成连续存放在内存中的数据排布。
9.例如,在本公开至少一实施例提供的数据处理方法中,第一部分程序中的至少一
个运算符的输入被设置为数据排布的起始地址指针。
10.例如,在本公开至少一实施例提供的数据处理方法中,预定虚拟机大数据处理体系为apache spark。
11.本公开至少一实施例提供一种用于大数据的数据处理装置,包括:程序获取单元,配置为获取用原生编程语言编写的主程序;程序编译单元,配置为在原生系统中将主程序进行编译并生成可加载模块,其中,可加载模块包括第一部分程序和第二部分程序,第一部分程序包括第一运算符的功能实现,第二部分程序包括对第二运算符对应的函数进行调用的函数指针;加载和转换单元,配置为由原生系统中运行的虚拟机加载可加载模块,并且将第二部分程序转换为预定虚拟机大数据处理体系支持的虚拟机代码,虚拟机代码调用预定虚拟机大数据处理体系的函数的功能实现;以及运行单元,配置为由虚拟机运行可加载模块包含的主程序,其中,在主程序的运行过程中,虚拟机构建可加载模块对应的有向无环图程序,然后运行有向无环图程序,将第一部分程序交由原生系统运行,将转换后的第二部分程序交由预定虚拟机大数据处理体系运行。
12.本公开至少一实施例提供的数据处理装置,还包括:优化单元,被配置为:对第一部分程序进行优化操作以降低原生系统与虚拟机之间的交互开销。
13.例如,在本公开至少一实施例提供的数据处理装置中,对第一部分程序进行优化操作,包括:将第一部分程序中的一连串运算步骤融合为一个运算步骤。
14.例如,在本公开至少一实施例提供的数据处理装置中,对第一部分程序进行优化操作,包括:将第一部分程序中的至少一个运算符设置为每次批处理多个数据。
15.例如,在本公开至少一实施例提供的数据处理装置中,对第一部分程序进行优化操作,包括:针对第一部分程序要处理的数据,将相同数据类型的数据转换成连续存放在内存中的数据排布。
16.例如,在本公开至少一实施例提供的数据处理装置中,第一部分程序中的至少一个运算符的输入被设置为数据排布的起始地址指针。
附图说明
17.为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
18.图1示出了本公开至少一实施例提供的一种用于大数据的数据处理方法的示意性流程图;
19.图2示出了本公开至少一实施例提供的对第一部分程序进行的优化操作的示例性示意图;
20.图3示出了本公开至少一实施例提供的有向无环图程序的示例性示意图;
21.图4a示出了本公开至少一实施例提供的虚拟机大数据处理体系(apache spark)的示例性示意图;
22.图4b示出了本公开至少一实施例提供的原生系统大数据处理体系的示例性示意图;
23.图5示出了利用本公开至少一实施例提供的数据处理方法的示例工作流程的示意图;
24.图6示出了本公开至少一实施例提供一种用于大数据的数据处理装置的示意框图。
具体实施方式
25.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
26.除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
27.尽管spark在内存分布数据集方面具有优势,除了能够提供交互式查询外,还可以优化迭代工作负载,但是最近的工作表明其性能仍然存在很大的提升空间。spark程序是运行在jvm(java virtual machine,java虚拟机)的基础之上的,程序需要先被翻译成jvm可以间接执行的代码,而通过用c++编程语言构建的大数据分析框架与spark相比具有很大的性能优势,这是因为c++编写的代码可以翻译成机器可以直接执行的代码。例如基于c++的大数据分析框架thrill在典型的大数据工作负载上实现了3.26倍于spark的平均加速。另外,对于java矩阵乘法内核,将java切换到c会产生4.4倍的加速,并且由c编译器提供的矢量化和avx内在函数(avx intrinsics)的性能被提高了9.45倍。然而,性能只是大数据处理的一个方面,基于c++的大数据分析框架虽然具有比spark更好的性能,但是不具备spark提供的用于大数据处理的许多关键的功能,例如基于世系的弹性:大数据分析通常采用分布式计算,即在基于商用硬件构建的多租户集群(multi-tenant commodity cluster)中执行,其中由于机器故障、网络抖动和抢占式调度而导致任务失败是非常常见的,这使得检查点处理这些频繁故障的效率低下。spark的基于世系的容错机制允许仅重新计算部分数据而不是全部数据。spark的弹性还支持其它功能,例如负载均衡、掉队缓减(straggler mitigation)和自动缩放等,从而提高了集群的资源利用率。此外,spark的生态系统,例如具有web ui的性能分析器以及与各种资源管理器的集成,使得在各种私有云或公有云上部署、监控和分析应用程序变得容易。thrill具有称为dia的原生rdd(弹性分布式数据集,resilient distributed datasets)式抽象,但是其将数据分布与物理机器紧密耦合使得弹性失效。husky使用上游消息日志容错机制,即使没有故障也会产生不可忽略的开销。与spark相比,这些基于c++的大数据分析框架缺少许多基本功能。
28.显然,需要设计一个功能齐全的原生大数据框架。一个直接的解决方案是用原生编程语言(例如c++)将spark提供的功能重新实现,该解决方案在理论上可行,但是可能过
于昂贵且不必要:spark 3.0.1的核心组件有74k行代码,其中与编程框架直接相关的只有9k行(包括rdd应用程序接口和运算符实施方式),并且其它代码都是服务于各种大数据功能的组件。因此,可以构建一个大数据框架,该大数据框架可以重用spark成熟的大数据功能而不用重新实现这些功能。
29.然而,重用spark的大数据功能的方法产生了很多挑战。第一,现有的原生大数据框架(例如,thrill、husky等)与spark的执行模型不兼容,使得将原生大数据框架集成到spark中是不可行的。例如,thrill将每个数据集分区耦合到特定的机器,并且husky依赖有状态的任务执行,这违反了spark的动态调度和无状态假设。第二,无论是通过jni(java native interface,java本机接口)还是jna(java native access,java本机访问)的jvm和原生世界之间的细粒度交互都会产生高开销并有可能成为新的性能瓶颈。
30.本公开至少一实施例提供一种用于大数据的数据处理方法,包括:获取用原生编程语言编写的主程序;在原生系统中将主程序进行编译并生成可加载模块,其中,可加载模块包括第一部分程序和第二部分程序,第一部分程序包括第一运算符的功能实现,第二部分程序包括对第二运算符对应的函数进行调用的函数指针;由原生系统中运行的虚拟机加载可加载模块,并且将第二部分程序转换为预定虚拟机大数据处理体系支持的虚拟机代码,虚拟机代码调用预定虚拟机大数据处理体系的函数的功能实现;以及由虚拟机运行可加载模块包含的主程序,其中,在主程序的运行过程中,虚拟机构建可加载模块对应的有向无环图程序,然后运行有向无环图程序,将第一部分程序交由原生系统运行,将转换后的第二部分程序交由预定虚拟机大数据处理体系运行。
31.该数据处理方法将用于处理大数据的程序分为第一部分程序和第二部分程序分别进行处理,既可以复用预定虚拟机大数据处理体系(例如,apache spark)的重要功能,又可以提升大数据处理的性能。第一部分程序包括第一运算符的功能实现,可以交由原生系统运行而不调用预定虚拟机大数据处理体系的功能,因而处理速度更快;而第二部分程序调用预定虚拟机大数据处理体系的功能,能够容易地实现预定虚拟机大数据处理体系已有的功能。因而,根据本公开实施例的数据处理方法既可以实现大数据的高速处理又可以充分利用已有大数据处理体系的功能而实现全功能的大数据处理。
32.原生(native)系统是相对于虚拟机的概念,其指计算机上固有的操作系统,例如计算机上本身安装的linux系统、window系统等。原生编程语言表示在原生系统上使用的编程语言,例如c++编程语言。例如,在本公开的一些实施例中,主程序由c++编程语言编写,主程序被编译形成目标代码(例如机器码)形式的可加载模块,然后可加载模块被加载到原生系统中运行的虚拟机中,例如加载到linux系统上运行的jvm中。
33.需要说明的是,虽然本公开的某些实施例以apache spark作为预定虚拟机大数据处理体系的示例进行说明,但本公开不限于以apache spark为基础。本领域的技术人员能够理解,其他虚拟机大数据处理体系也同样存在类似的技术问题,本公开实施例的技术方案同样适用于其他虚拟机大数据处理体系。在本公开中,虚拟机大数据处理体系(framework)表示基于虚拟机(例如jvm)运行的大数据处理系统,包括引擎和编程框架。大数据处理体系提供了大数据处理的各种功能,例如,如上文所述的apache spark的功能。
34.本公开至少一实施例还提供对应于上述数据处理方法的数据处理装置。
35.下面结合附图对本公开的实施例进行详细说明,但是本公开并不限于这些具体的
实施例。
36.图1示出了本公开至少一实施例提供的一种用于大数据的数据处理方法的示意性流程图。
37.如图1所示,该数据处理方法包括如下的步骤s101~s104。
38.步骤s101:获取用原生编程语言编写的主程序。
39.用户利用例如c++编程语言的原生编程语言编写主程序,处理装置获取用户编写的主程序。
40.步骤s102:在原生系统中将主程序进行编译并生成可加载模块,其中,可加载模块包括第一部分程序和第二部分程序,第一部分程序包括第一运算符的功能实现,第二部分程序包括对第二运算符对应的函数进行调用的函数指针。
41.在步骤s102中,主程序被编译成目标代码形式(例如机器代码形式)的模块,其可以被加载到虚拟机中,因而称为可加载模块。主程序一般会包括对系统提供的功能函数的调用,主程序在编译时会结合系统提供的函数库或数据集进行编译,这些函数库或数据集会对调用的函数进行解析,以便进行相应的处理。根据本公开的实施例,编译后的可加载模块可以包括第一部分程序和第二部分程序,第一部分程序和第二部分程序在后续步骤中进行不同的处理。在本公开的实施例中,也将“第一部分程序”称为“编译时部分程序”,将“第二部分程序”称为“运行时部分程序”。第一部分程序和第二部分程序的区别在于该部分程序是否包括程序中运算符的具体的功能实现,如果包括运算符的具体的功能实现则为第一部分程序,对应的运算符称为第一运算符,否则为第二部分程序,对应的运算符称为第二运算符。第二部分程序不包括对运算符的具体的功能实现,而包括对运算符对应的函数进行调用的函数指针。这些运算符(第二运算符)的具体实现可以通过在后续的过程中将实现功能的函数的地址设置给函数指针(下文将具体说明)。第一运算符和第二运算符的划分可以根据运算符的类别进行,例如根据预定划分策略将某些类别的运算符划分为第一运算符,而将其他类别的运算符划分为第二运算符。划分策略可以根据具体应用确定,例如可以将功能实现相对简单的运算符划分为第一运算符,而将功能实现相对复杂的运算符划分为第二运算符,从而可以对功能实现复杂的第二运算符复用虚拟机大数据处理体系的功能。再例如,在采用分布式计算的数据处理方法中,可以将本地类运算符划分为第一运算符,而将全局类运算符的部分划分为第二运算符。换言之,在本公开的一些实施例中,数据处理方法采用分布式计算,第一运算符为本地类运算符,第二运算符为全局类运算符。
42.本地类运算符表示不需要考虑分布式运算中不同运算节点之间的协调的运算符,例如,映射值(mapvalues)运算符、过滤(filter)运算符、变换(flatmap)运算符、哈希(hash)运算符(例如hash aggregate、build hash)等。
43.全局类运算符表示需要考虑分布式运算中不同运算节点之间的协调的运算符,例如,分区剪枝(partition-pruning)运算符、具有多于一个依赖关系的运算符(例如,联合(union)运算符、zip运算符(例如zip partitions)、cartesian运算符)、洗牌(shuffle)运算符(例如shuffle write、shuffle read)、缓存(cache)运算符以及数据源(data-source)运算符等。
44.对于全局类运算符,由于需要考虑不同运算节点之间的协调,因而实现比较复杂,所以在本公开的实施例中将其划分为第二运算符以便复用已有虚拟机大数据处理体系(例
如spark)的全局类运算符功能。
45.例如,分区剪枝运算符和具有多个一个依赖关系的运算符可以向spark提供世系相关的信息,并且可以重用spark的基于世系的容错机制。
46.例如,洗牌运算符可以重用spark的容错数据洗牌机制,该机制不仅难以实现,而且部署起来很麻烦。
47.例如,缓存运算符可以重用spark的中间数据管理机制。数据源运算符可以向spark提供位置信息并且重用spark的位置感知任务调度。
48.将本地类运算符的部分划分为第一运算符,将全局类运算符划分为第二运算符,从而可以在后续步骤中将包含第二运算符的第二部分程序交给例如spark的虚拟机大数据处理体系来处理而不用重新实现复杂的功能,可以避免不必要的人力消耗。
49.在本公开的一些实施例中,在步骤s102中在原生系统中将主程序进行编译时可以包括:对第一部分程序进行优化操作以降低原生系统与虚拟机之间的交互开销。
50.对于原生系统的程序集成到虚拟机大数据处理体系将导致原生系统与虚拟机之间的交互开销。根据本公开的一些实施例,通过对第一部分程序进行优化能够降低这些开销。
51.图2中示出了对第一部分程序进行优化操作的示例性示意图。以“contribs.reducebykey(_+_).mapvalues(v=》0.85*v).mapvalues(v=》0.15+v).join(links)”程序中的两个mapvalues运算符为例进行说明。原生系统和虚拟机通过jna pointer(jna指针)进行交互。
52.图2的(a)是不进行优化的情形。在图2的(a)中,每个mapvalues变换直接映射到虚拟机中的数据集(例如,spark rdd),并且每个值被映射为一个虚拟机程序对象(例如java对象)。这种方式简单,但带来很大的开销。处理诸如长双精度对这样一个简单的值都需要在虚拟机和原生系统分别进行一次序列化/反序列化,并且创建一个虚拟机程序对象,这产生了很大的交互开销,可能会抵消原生系统的性能优势。
53.在本公开的一些实施例中,对第一部分程序进行优化操作可以包括:将第一部分程序中的一连串运算步骤融合为一个运算步骤。此优化操作可以被称为运算符融合操作,如图2的(b)所示。
54.在图2的(b)中,两个连续的mapvalues运算步骤(.mapvalues(v=》0.85*v)和.mapvalues(v=》0.15+v))被融合成一个mapvalues运算步骤(.mapvalues(v=》0.15+0.85*v)),这使得序列化/反序列化的次数减少,从而减小了原生系统和虚拟机之间的交互开销。
55.在本公开的一些实施例中,对第一部分程序进行优化操作可以包括:将第一部分程序中的至少一个运算符设置为每次批处理多个数据。此优化操作可以被称为矢量化操作,如图2的(c)所示。
56.在图2的(c)中,将第一部分程序中原先逐元素处理的运算符mapvalues设置为每次批处理多个数据。即,原先每次处理一个长双精度对数据,现在每次处理一个长双精度对数组,该长精度对数组(用r表示)里包含多个长双精度对数据,每个长双精度对数据是键值对类型((k,v)类型,k表示键,v表示值)的数据。这样可以减少虚拟世界对原生世界中的数据的调用次数,减少序列化/反序列化的次数,从而减小了原生系统和虚拟机之间的交互开
销。
57.在本公开的一些实施例中,对第一部分程序进行优化操作可以包括:针对第一部分程序要处理的数据,将相同数据类型的数据转换成连续存放在内存中的数据排布。此优化操作可以被称为数据排布操作。
58.通过内存(作为缓冲器)连续地存储批量数据,有助于避免由于分配小对象而导致的内存碎片,并消除了垃圾收集器运行时压缩的要求。此外,数据排布增加了数据局部性并提供了规则的内存访问模式,从而可以提高中央处理器的效率。例如,在本公开的一些实施例中,第一部分程序中的至少一个运算符的输入可以被设置为数据排布的起始地址指针。相同类型的数据往往会被某个或某些共同的运算符处理,因此,当这些运算符的数据被连续存放在内存中时,可以不需要提供每个数据或其地址指针,而只要提供起始数据的地址指针(即数据排布的起始地址指针),就可以获取这些连续存储的数据。在此情况下,虚拟机与原生系统之间不需要交互待处理的每个数据,而仅要交互数据排布的起始地址指针,大大降低了两者之间的交互开销。图2的(d)显示了虚拟机与原生系统之间的指针传递。在图2的(d)中,将这种数据排布称为“compactarray”,其是由连续的内存存储的长双精度对数组。虚拟机与原生系统之间仅传递地址指针,而无需进行数据序列化/反序列化。
59.在本公开的一些实施例中,提供了多种模板来为各种数据类型生成数据排布。例如,平面数组(flat array)可以将固定长度的元素放置在缓冲器中。位图数组(bitmap array)可以将布尔元素放置在缓冲器中。数组数组(array array)和字符串数组(string array)可以将数组元素放置在缓冲器中。可空数组(nullable array)可以将可空元素放置在缓冲器中。元组数组(tuple array)将元组元素放置在缓冲器中。
60.上述对第一部分程序进行的优化操作减小了原生系统和虚拟机之间的交互开销,从而提升了大数据处理的性能。需要说明的是,本公开不限于上述优化操作,还适用其他能够降低原生系统和虚拟机之间的交互开销的优化操作。
61.步骤s103:由原生系统中运行的虚拟机加载可加载模块,并且将第二部分程序转换为预定虚拟机大数据处理体系支持的虚拟机代码,虚拟机代码调用预定虚拟机大数据处理体系的函数的功能实现。
62.主程序被编译形成目标代码形式的可加载模块,该可加载模块被加载到原生系统中运行的虚拟机中,例如加载到linux系统上运行的jvm中。该加载过程可以采用虚拟机与原生系统之间的接口进行,例如采用jna进行。
63.在步骤s103的加载步骤之后,对于第二部分程序,还由虚拟机将其转换为预定虚拟机大数据处理体系支持的虚拟机代码。第二部分程序通常是实现比较复杂的程序,因而其调用虚拟机上的预定虚拟机大数据处理体系(例如spark)的功能,而不重新编程实现。因此,第二部分程序在加载到虚拟机的过程中由虚拟机转换为预定虚拟机大数据处理体系(例如spark)支持的代码。例如,将第二部分程序中的函数指针转换为可以对预定虚拟机大数据处理体系中的函数实际调用的指针地址,所调用的这些函数具有对第二部分程序中的第二运算符的功能实现。虚拟机代码调用预定虚拟机大数据处理体系的功能模块(例如,相应运算符的处理模块),避免对这些功能模块重复编程实现。需要说明的是,这里的“预定”表示预先确定,即预先选定所针对的处理体系以便进行代码转换和调用。
64.步骤s104:由虚拟机运行可加载模块包含的主程序,其中,在主程序的运行过程
中,虚拟机构建可加载模块对应的有向无环图程序,然后运行有向无环图程序,将第一部分程序交由原生系统运行,将转换后的第二部分程序交由预定虚拟机大数据处理体系运行。
65.有向无环图(dag,directed acyclic graph)是一种图论数据结构,如果一个有向图无法从任意顶点出发经过若干条边回到该点,则这个图就是有向无环图。有向无环图程序为呈现有向无环图的程序。用于处理大数据处理的有向无环图程序包括对大数据进行处理的一系列运算符。图3示出了有向无环图程序的示例。图3中的第一行是从某个应用中截取的对数据进行处理的代码(即用户编写的主程序的一部分),该代码对应的有向无环图程序位于代码的下方,其包括多个顺序执行的运算符hash aggregate(哈希聚合)、shuffle write(洗牌写入)、shuffle read(洗牌读取)、map values(映射值)、build hash(构建哈希)、zip partitions(压缩分区)、probe hash(探测哈希)。这些运算符会对待处理数据进行相应的处理。如图3的有向无环图程序所示,顶点表示运算符,带箭头的边表示两个运算符之间的依赖关系。步骤s104中的有向无环图程序可以基于用户编写的代码转换构建。例如,图3中的代码“reducebykey”可以构建为顺序执行的hash aggregate(哈希聚合)、shuffle write(洗牌写入)、shuffle read(洗牌读取)和hash aggregate(哈希聚合),代码“join(联合)”可以构建为顺序执行的build hash(构建哈希)、zip partitions(压缩分区)和probe hash(探测哈希)。这些运算符包括第一运算符和第二运算符,并被分别对应到第一部分程序和第二部分程序。
66.步骤s104还说明了对第一部分程序和第二部分程序的不同处理方式。
67.对于第一部分程序,其在原生系统中编译后的代码包含对运算符的功能实现,因而可以使用虚拟机的机器代码执行机制(例如,jni、jna)将其由原生系统运行。这部分程序在原生系统中运行后会对其中的运算符的功能完成处理。而对于第二部分程序,其在原生系统中编译后的代码不包含对运算符的功能实现,相反被转换为了预定虚拟机大数据处理体系支持的虚拟机代码,因而可以由驻留在虚拟机上的预定虚拟机大数据处理体系执行。虚拟机执行步骤s104时可以复用预定虚拟机大数据处理体系的引擎,以便实现例如分布式执行、弹性、掉队缓减、监测等功能。
68.如前所述,预定虚拟机大数据处理体系为一种大数据处理系统,包括执行引擎和编程框架,例如,预定虚拟机大数据处理体系为apache spark。下面参照图4a以apache spark介绍预定虚拟机大数据处理体系。
69.图4a示出了本公开至少一实施例提供的虚拟机大数据处理体系(apache spark)的示例性示意图。
70.如图4a所示,预定虚拟机大数据处理体系包括编程框架(rdd)和spark引擎,编程框架包括spark数据集表示(dataset representation),spark数据集表示可以向用户提供spark rdd应用程序接口(api)。
71.spark数据集表示包含分区集合、依赖项集合、计算定义以及关于数据集分布和数据放置的元数据。spark数据集表示提供的spark rdd应用程序接口可以用于构建dag程序。
72.spark引擎为spark的多种功能提供支持和管理,这些功能例如包括分布式执行、弹性、掉队缓减、监测等。spark引擎中包含资源管理器(例如yarn、aws),资源管理器可以为上层应用提供统一的资源管理和调度。
73.驻留在虚拟机上的apache spark可以通过其编程框架和spark引擎对第二部分程
序经转换后的代码(即符合spark rdd应用程序接口的代码)进行解析和执行。
74.根据本公开的实施例的数据处理方法,本公开的实施例提供了一种原生系统大数据处理体系,其结构类似于上述虚拟机大数据处理体系。
75.图4b示出了本公开至少一实施例提供的原生系统大数据处理体系的示例性示意图。本公开实施例的大数据处理体系包括编程框架和引擎,编程框架包括数据集表示(dataset representation),数据集表示可以提供应用程序接口(api)。
76.本公开实施例的原生系统大数据处理体系的应用程序接口可以被设计成类似于spark rdd应用程序接口的rdd式应用程序接口,例如,其运算符的名称和语义与spark的运算符的名称和语义相同,以便于spark用户使用。当然,其也可以设计为与spark rdd应用程序接口不同,只要能够被用户编程调用即可。
77.本公开实施例的原生系统大数据处理体系的数据集表示除了可以实现通常大数据处理体系的功能(例如上述spark数据集表示的功能),还可以实现第一运算符的功能实现、对第二运算符对应的函数进行调用的函数指针、以及对第一部分程序的优化操作。该数据集表示与第二部分程序相关的部分可以复用spark数据集表示,即包含对第二部分程序中的运算符对应的函数进行调用的函数指针。该数据集表示与第一部分程序相关的部分可以包含第一部分程序中的运算符的功能实现。该数据集表示中的操作符可以是代码模板的形式,从而可以通过例如c++模板元编程(meta-programming)实现对第一部分程序的优化。
78.本公开实施例的原生系统大数据处理体系的引擎可以是对虚拟机大数据处理体系(例如spark)引擎的封装以复用spark的大数据功能,并同时包括用于将原生代码集成到虚拟机中的附加功能单元。引擎用于对原生系统大数据处理体系的多种功能提供支持和管理,由于原生系统大数据处理体系的引擎是对现有的虚拟机大数据处理体系引擎的封装,因此它无需重新配置现有的集群资源管理器或重新编译现有的spark。本公开的原生系统大数据处理体系的引擎借用了spark引擎的大部分功能,但是对spark引擎进行了增强,以支持高效的spark集成。例如,本公开的原生系统大数据处理体系的引擎在原生系统包含一个库,该库提供spark的c++绑定(称为cppspark),cppspark是指虚拟机的功能用c++语言实现的接口,因此可以在原生系统中用cppspark调用虚拟机的功能。在转换第二部分程序时会调用cppspark提供的c++编程接口,cppspark的作用是把调用操作从原生系统转发给虚拟机,从而在虚拟机中实现第二部分程序的转换,即将第二部分程序转换为预定虚拟机大数据处理体系支持的虚拟机代码。本公开实施例的原生系统大数据处理体系的引擎在虚拟机系统中可以包括一个驱动器(driver),其是用虚拟机编程语言(例如java)实现的虚拟机大数据处理体系(例如spark)普通应用程序,用于从原生系统加载经编译的程序代码(即“可加载模块”)、转换第二部分程序、以及执行可加载模块。例如,在spark中,该驱动器可以如普通spark应用程序一样被提交到spark兼容的集群。成功提交后,驱动器从原生系统加载可加载模块、对可加载模块注册引擎实现、并启动可加载模块包含的主程序。此外,为了支持远程执行,驱动器还可以指示新创建的执行器准备环境,例如下载上述可加载模块。
79.下面参照图4b的原生系统大数据处理体系对本公开至少一实施例提供的数据处理方法的示例工作流程进行简要说明,工作流程在图5中示出。
80.如图5所示,在原生系统中,用户通过应用程序接口编写主程序。原生系统结合数据集表示将主程序进行编译并生成可加载模块,其中,可加载模块包括第一部分程序和第
二部分程序,第一部分程序包括第一运算符的功能实现,第二部分程序包括对第二运算符对应的函数进行调用的函数指针。原生系统中的驱动器加载可加载模块,并且在加载过程中,结合提供spark的c++绑定的库将第二部分程序转换为预定虚拟机大数据处理体系支持的虚拟机代码,以及对可加载模块注册引擎实现、并启动可加载模块包含的主程序。在主程序的运行过程中,驱动器构建可加载模块对应的有向无环图程序,然后运行有向无环图程序,将第一部分程序交由原生系统运行。驱动器可以通过集群资源管理器(例如yarn)将转换后的第二部分程序分配到集群执行器(图中以cloud(云)表示)上进行分布式计算。
81.图6示出了本公开至少一实施例提供一种用于大数据的数据处理装置600的示意框图,该数据处理装置600可以用于执行图1所示的数据处理方法。
82.如图6所示,数据处理装置600包括程序获取单元601、程序编译单元602、加载和转换单元603以及运行单元604。
83.程序获取单元601被配置为获取用原生编程语言编写的主程序。
84.程序编译单元602被配置为在原生系统中将主程序进行编译并生成可加载模块,其中,可加载模块包括第一部分程序和第二部分程序,第一部分程序包括第一运算符的功能实现,第二部分程序包括对第二运算符对应的函数进行调用的函数指针。
85.加载和转换单元603被配置为由原生系统中运行的虚拟机加载可加载模块,并且将第二部分程序转换为预定虚拟机大数据处理体系支持的虚拟机代码,虚拟机代码调用预定虚拟机大数据处理体系的函数的功能实现。
86.运行单元604被配置为由虚拟机运行可加载模块包含的主程序,其中,在主程序的运行过程中,虚拟机构建可加载模块对应的有向无环图程序,然后运行有向无环图程序,将第一部分程序交由原生系统运行,将转换后的第二部分程序交由预定虚拟机大数据处理体系运行。
87.例如,数据处理装置600的数据处理方法采用分布式计算,第一运算符为本地类运算符,并且第二运算符为全局类运算符。
88.例如,在至少一个实施例中,数据处理装置600还可以包括优化单元605。优化单元605被配置为对第一部分程序进行优化操作以降低原生系统与虚拟机之间的交互开销。
89.例如,在至少一个实施例中,优化单元605还被配置为将第一部分程序中的一连串运算步骤融合为一个运算步骤。
90.例如,在至少一个实施例中,优化单元605还被配置为将第一部分程序中的至少一个运算符设置为每次批处理多个数据。
91.例如,在至少一个实施例中,优化单元605还被配置为针对第一部分程序要处理的数据,将相同数据类型的数据转换成连续存放在内存中的数据排布。
92.例如,在至少一个实施例中,优化单元605还被配置为将第一部分程序中的至少一个运算符的输入设置为数据排布的起始地址指针。
93.例如,数据处理装置600可以采用硬件、软件、固件以及它们的任意可行的组合实现,本公开对此不作限制。
94.上文关于数据处理方法的说明同样适用于数据处理装置600,在此不再赘述。
95.根据本公开的实施例还提供一种计算机程序产品,包括程序代码,程序代码在被处理器执行时执行根据本公开实施例的数据处理方法。
96.根据本公开的实施例还提供一种计算机可读介质,其上存储程序代码,程序代码在被处理器执行时执行根据本公开实施例的数据处理方法。
97.对于本公开,还有以下几点需要说明:
98.(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
99.(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
100.以上所述仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1