一种数据广播系统、数据广播方法及设备与流程

文档序号:11147467阅读:623来源:国知局
一种数据广播系统、数据广播方法及设备与制造工艺

本发明涉及大数据领域,尤其涉及一种数据广播系统、数据广播方法及设备。



背景技术:

随着大数据时代的到来,基于内存的并行计算平台Spark已经广泛成为业界处理海量数据的流行框架,与Hadoop相比,Spark更适合基于迭代的机器学习算法和图算法,加上Spark开源社区非常活跃,基于Spark并行框架的生态圈也日益丰富,例如Spark-SQL,Spark-Streaming等。

Spark的运行模式有几种模式:例如:local、standalone、yarn、mesos等。弹性分布式数据集(英文:Resilient Distributed Dataset,简称:RDD)是Spark的核心概念之一,表示只读、可分区、容错、可以全部或部分缓存到内存中、在多次并行计算间重用。

当一个RDD需要操作另一个RDD的数据时,Spark支持将较小RDD广播到每个数据节点上,优化关联操作;

现有技术中,Spark集群模式运行情况下,当广播一个变量时,会按照数据节点上启动任务执行器(executor)的个数N,分发广播变量N份到该数据节点上,导致系统网络IO(Input/Output)和内存资源多余占用,从而引发任务失败。



技术实现要素:

本发明实施例提供了一种数据广播系统、数据广播方法及设备,能够减少对系统网络IO和内存资源的占用。

第一方面,本发明实施例提供了一种数据广播方法,该方法应用于数据广播系统,该数据广播系统包括:控制节点和至少一个数据节点,每个数据节点上运行有至少一个任务执行器,每个数据节点上包括堆外内存,所述堆外内存存储的数据可被至少一个任务执行器使用,该方法包括:

控制节点生成广播数据,并设置第一数据节点上的其中一个任务执行器为主任务执行器,第一数据节点为至少一个数据节点中的一个数据节点;主任务执行器获取广播数据,并将广播数据保存至目标堆外内存,将目标堆外内存的地址发送至非主任务执行器,其中,目标堆外内存为第一数据节点上的堆外内存,非主任务执行器为第一数据节点上除主任务执行器以外的其他任务执行器;非主任务执行器根据目标堆外内存的地址,从目标堆外内存中获取广播数据。

本发明实施例中,并不是每个数据节点上的每个任务执行器都从控制节点获取广播数据,而是由控制节点在每个数据节点上设置一个主任务执行器,仅由主任务执行器获取广播数据,将获取的广播数据存储至数据节点上的堆外内存中,该数据节点上的其他任务执行器从堆外内存中获取广播数据。因此,在同一个数据节点上,只需要分发一份广播数据,从而能够减少对系统网络IO和内存资源的占用。

结合第一方面,在第一方面的第一种可能的实现方式中,该方法还包括:

控制节点在非主任务执行器获取广播数据后,发送广播数据清除消息给主任务执行器;主任务执行器接收控制节点发送的广播数据清除消息后,清除目标堆外内存中存储的广播数据。

可选的,非主任务执行器在获取广播数据后,通知控制节点广播数据获取完成。

因此,控制节点能获取各数据节点上的广播数据的获取情况,当数据节点上的各非主任务执行器获取到广播数据后,指示主任务执行器清除堆外内存中存储的广播数据,从而能够减少对系统内存资源的占用,提高内存利用率。

结合第一方面,或第一方面的任一种实现方式,在第一方面的第二种可能的实现方式中,控制节点设置第一数据节点上的其中一个任务执行器为主任务执行器包括:控制节点根据第一数据节点中每个任务执行器的负载信息设置一个任务执行器为主任务执行器。

如此,控制节点根据各任务执行器的负载情况选择主任务执行器,例如:选择一个负载较小的任务执行器为主任务执行器,从而能够使各任务执行器负载均衡。

结合第一方面,或第一方面的任一种实现方式,在第一方面的第三种可能的实现方式中,控制节点设置第一数据节点上的其中一个任务执行器为主任务执行器包括:控制节点随机选择一个任务执行器,将该任务执行器设置为主任务执行器。

结合第一方面,或第一方面的任一种实现方式,在第一方面的第四种可能的实现方式中,该方法还包括:控制节点生成广播优化执行计划,广播优化执行计划包括主任务执行器计划和非主任务执行器计划;控制节点将广播优化执行计划发送至第一数据节点上的每个任务执行器;主任务执行器从广播优化执行计划中选择主任务执行器计划执行;非主任务执行器从广播优化执行计划中选择非主任务执行器计划执行。

其中,主任务执行器计划包括第一方面中主任务执行器执行的步骤,非主任务执行器计划包括第一方面中非主任务执行器执行的步骤。

第二方面,本发明实施例提供了一种数据广播方法,该方法应用于数据广播系统,数据广播系统包括控制节点和至少一个数据节点,每个数据节点上运行有至少一个任务执行器,每个数据节点上包括堆外内存,堆外内存存储的数据可被至少一个任务执行器使用,该方法包括:

第一数据节点上的主任务执行器获取广播数据,将广播数据保存至目标堆外内存,并将目标堆外内存的地址发送至非主任务执行器,第一数据节点上的非主任务执行器根据目标堆外内存的地址,从目标堆外内存中获取广播数据。其中,目标堆外内存为第一数据节点上的堆外内存,主任务执行器为控制节点在第一数据节点上所指定的一个任务执行器,非主任务执行器为第一数据节点上除主任务执行器之外的其他任务执行器,第一数据节点为至少一个数据节点中的一个数据节点。

本发明实施例中,每个数据节点上,只有主任务执行器去获取广播数据,将获取的广播数据存储至数据节点上的堆外内存中,其他任务执行器从堆外内存中获取广播数据。因此,在同一个数据节点上,只需要分发一份广播数据,从而能够减少对系统网络IO和内存资源的占用。

结合第二方面,在第二方面的第一种可能的实现方式中,该方法还包括:

主任务执行器接收控制节点发送的广播数据清除消息,之后,清除目标堆外内存中存储的广播数据。从而可以及时清理内存中缓存的数据,减少对内存的占用,提高内存利用率。

结合第二方面,或第二方面的任一种可能的实现方式,在第二方面的第二种可能的实现方式中,该方法还包括:第一数据节点上的每个任务执行器接收控制节点发送的广播优化执行计划,广播优化执行计划包括主任务执行器计划和非主任务执行器计划;主任务执行器从广播优化执行计划中选择主任务执行器计划执行以执行第二方面及第二方面的第一种可能的实现方式中的步骤;非主任务执行器从广播优化执行计划中选择非主任务执行器计划执行以执行第二方面中所描述的步骤。

第三方面,本发明实施例提供了一种数据广播方法,该方法应用于数据广播系统,数据广播系统包括控制节点和至少一个数据节点,每个数据节点上运行有至少一个任务执行器,每个数据节点上包括堆外内存,堆外内存存储的数据可被至少一个任务执行器使用,该方法包括:

控制节点生成广播数据;控制节点设置第一数据节点上的多个任务执行器中的一个任务执行器为主任务执行器,第一数据节点为至少一个数据节点中的一个数据节点;主任务执行器用于获取广播数据,并将广播数据保存至目标堆外内存,将目标堆外内存的地址发送至非主任务执行器,非任务执行器为第一数据节点上除主任务执行器之外的其他任务执行器,非主任务执行器用于根据目标堆外内存的地址,从目标堆外内存获取广播数据,目标堆外内存为第一数据节点上的堆外内存。

本发明实施例中,是由控制节点在每个数据节点上设置一个主任务执行器,仅由主任务执行器获取广播数据。因此,在同一个数据节点上,只需要分发一份广播数据,从而能够减少对系统网络IO和内存资源的占用。

结合第三方面,在第三方面的第一种可能的实现方式中,控制节点设置第一数据节点上的多个任务执行器中的一个任务执行器为主任务执行器包括:控制节点根据第一数据节点中每个任务执行器的负载信息设置一个任务执行器为主任务执行器。从而可以尽可能均衡每个任务执行器负载。

结合第三方面,或第三方面的任一种可能的实现方式,在第三方面的第二种可能的实现方式中,该方法还包括:当非任务执行器获取广播数据后,控制节点发送广播数据清除消息给主任务执行器,广播数据清除消息用于使主任务执行器清除目标堆外内存中存储的广播数据。从而可以及时清理内存中缓存的数据,减少对内存的占用,提高内存利用率。

结合第三方面,或第三方面的任一种可能的实现方式,在第三方面的第三种可能的实现方式中,该方法还包括:控制节点生成广播优化执行计划,广播优化执行计划包括主任务执行器计划和非主任务执行器计划;将广播优化执行计划发送至第一数据节点上的每个任务执行器,以使得第一数据节点上的每个任务执行器根据控制节点所设置的任务执行器类型,从主任务执行器计划和非主任务执行器计划中选择一个进行执行,任务执行器类型包括主任务执行器和非主任务执行器。

第四方面,本发明实施例还提供了一种数据服务器,该数据服务器应用于数据广播系统,该数据广播系统包括控制服务器和至少一个数据服务器,数据服务器包括:处理器、存储器和IO接口;处理器上运行有多个任务执行器,任务执行器包括主任务执行器和非主任务执行器,主任务执行器为控制服务器在第一数据服务器上所指定的一个任务执行器,非主任务执行器为第一数据服务器上除主任务执行器之外的其他任务执行器;存储器中包括堆外内存,堆外内存存储的数据可被至少一个任务执行器使用;存储器还用于存储程序代码,主任务执行器调用存储器中的程序代码,以执行以下操作:

通过IO接口获取广播数据,将广播数据保存至目标堆外内存,并将目标堆外内存的地址发送至非主任务执行器,其中,目标堆外内存为第一数据服务器上的堆外内存;非主任务执行器调用存储器中的程序代码,以执行以下操作:根据目标堆外内存的地址,从目标堆外内存中获取广播数据。

结合第四方面,在第四方面的第一种可能的实现方式中,主任务执行器还用于执行以下操作:接收控制节点发送的广播数据清除消息,再清除目标堆外内存中存储的广播数据。

结合第四方面,或第四方面的任一种可能的实现方式,在第四方面的第二种可能的实现方式中,数据服务器上的每个任务执行器,还用于接收控制节点发送的广播优化执行计划,广播优化执行计划包括主任务执行器计划和非主任务执行器计划;主任务执行器,还用于从广播优化执行计划中选择主任务执行器计划执行;非主任务执行器,还用于从广播优化执行计划中选择非主任务执行器计划执行。

第五方面,本发明实施例还提供了一种控制服务器,控制服务器应用于数据广播系统,数据广播系统包括控制服务器和至少一个数据服务器;数据服务器上有多个任务执行器;控制服务器包括:处理器、存储器及IO接口,存储器用于存储程序代码,处理器调用存储器中的程序代码,以执行以下操作:

生成广播数据,设置数据服务器上的多个任务执行器中的一个任务执行器为主任务执行器;主任务执行器用于获取广播数据,并将广播数据保存至目标堆外内存,将目标堆外内存的地址发送至非主任务执行器,非主任务执行器用于根据目标堆外内存的地址,从目标堆外内存获取广播数据,其中,非主任务执行器为数据服务器上除主任务执行器之外的其他任务执行器,目标堆外内存为数据服务器上的堆外内存,堆外内存存储的数据可被多个任务执行器使用。

结合第五方面,在第五方面的第一种可能的实现方式中,处理器调用存储器中的应用程序,具体执行:根据第一数据节点中每个任务执行器的负载信息设置一个任务执行器为主任务执行器。

结合第五方面,或第五方面的任一种可能的实现方式,在第五方面的第二种可能的实现方式中,处理器还用于执行:当非任务执行器获取广播数据后,发送广播数据清除消息给主任务执行器,广播数据清除消息用于使主任务执行器清除目标堆外内存中存储的广播数据。

结合第五方面,或第五方面的任一种可能的实现方式,在第五方面的第三种可能的实现方式中,处理器还用于执行:生成广播优化执行计划,广播优化执行计划包括主任务执行器计划和非主任务执行器计划;将广播优化执行计划发送至数据服务器上的每个任务执行器,以使得数据服务器上的每个任务执行器根据控制服务器所设置的任务执行器类型,从主任务执行器计划和非主任务执行器计划中选择一个进行执行,任务执行器类型包括主任务执行器和非主任务执行器。

第六方面,本发明实施例还提供了一种数据广播系统,该系统包括第四方面提供的控制服务器和至少一个第五方面所提供的数据服务器。

第七方面,本发明实施例还提供了一种数据服务器,该数据服务器应用于数据广播系统,该数据广播系统包括控制服务器和至少一个数据服务器,数据服务器包括多个任务执行器,任务执行器包括主任务执行器和非主任务执行器,主任务执行器为控制服务器在第一数据服务器上所指定的一个任务执行器,非主任务执行器为第一数据服务器上除主任务执行器之外的其他任务执行器;

所述主任务执行器包括:

广播数据获取单元,用于获取广播数据;

广播数据存储单元,用于将广播数据保存至目标堆外内存,其中,目标堆外内存为第一数据服务器上的堆外内存;

堆外内存地址广播单元,用于将目标堆外内存的地址发送至非主任务执行器;

所述非主任务执行器包括:

广播数据获取单元,用于根据目标堆外内存的地址,从目标堆外内存中获取广播数据。

第八方面,本发明实施例还提供了一种控制服务器,控制服务器应用于数据广播系统,数据广播系统包括控制服务器和至少一个数据服务器;数据服务器上有多个任务执行器;控制服务器包括:

广播数据生成单元,用于生成广播数据;

主任务执行器设置单元,用于设置数据服务器上的多个任务执行器中的一个任务执行器为主任务执行器;主任务执行器用于获取广播数据,并将广播数据保存至目标堆外内存,将目标堆外内存的地址发送至非主任务执行器,非主任务执行器用于根据目标堆外内存的地址,从目标堆外内存获取广播数据,其中,非主任务执行器为数据服务器上除主任务执行器之外的其他任务执行器,目标堆外内存为数据服务器上的堆外内存,堆外内存存储的数据可被多个任务执行器使用。

从以上技术方案可以看出,本发明实施例具有以下优点:

本发明实施例中的数据广播系统包括控制节点和至少一个数据节点,每个数据节点上运行有至少一个任务执行器;控制节点生成广播数据,对于每个数据节点,控制节点设置数据节点上的其中一个任务执行器为主任务执行器,主任务执行器获取广播数据,将广播数据保存至堆外内存,将堆外内存的地址发送至该数据节点上的其他任务执行器;其他任务执行器从堆外内存的地址获取广播数据。本发明实施例中是由主任务执行器从其他节点获取广播数据,其他任务执行器仅需要从本节点上的堆外内存中获取广播数据,因此,在同一个数据节点上,只需要分发一份广播数据,从而能够减少对系统网络IO和内存资源的占用。

附图说明

图1为本发明实施例中的一种并行化架构示意图;

图2为本发明实施例中的一种Spark运行模式示意图;

图3为现有技术中的一种广播变量广播方法的示意图;

图4为现有技术中的一种Spark数据广播原理示意图;

图5为现有技术中的Spark数据广播内存膨胀对比图;

图6为现有技术中的Spark数据广播网络IO开销对比图;

图7为本发明实施例中数据广播系统及数据广播优化原理示意图;

图8为本发明实施例中数据广播信息交互流程图;

图9为本发明实施例中的数据服务器和控制服务器的硬件结构示意图。

具体实施方式

为了使本发明的技术方案及有益效果更加清楚,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

Spark为一种基于内存的并行计算框架,由UCBerkeley的AMP实验室开发。Spark不同于MapReduce的是,Spark的Job中间输出和结果可以保存在内存中,从而不再需要读写Hadoop分布式文件系统(英文:Hadoop Distributed File System,简称:HDFS),因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的算法。

本发明实施例中的数据广播系统、数据广播方法及设备应用于Spark集群,Spark集群模式包括但不限于StandAlone、yarn-client、yarn-cluster、Mesos等模式。

Spark集群在部署时,可以采用如图1所示的并行化架构。并行化架构是一种可以加速任务运行的一种技术,具体是将输入数据在多个数据节点上均衡分布,任务启动时在多个数据节点上并行计算,从而可以加速任务的运行。

如图1所示的并行化架构中包括控制节点(Master),一个Master节点连接多个数据节点(Worker)。其中每一个控制节点和数据节点都有独立的处理器(英文:Central Processing Unit,CPU)和存储资源(包括:内存、磁盘),不同节点通过高速网络(如以太网、光纤交换网络)进行连接,其中:

控制节点负责管理整个集群中每个数据节点,对外提供任务提交接口和任务查询等接口,接收客户端提交的作业,将外部任务请求分解到数据节点上并行执行,并收集执行结果反馈给客户端。

数据节点受控制节点控制,负责管理本节点的资源,定期向控制节点汇报心跳,接收控制节点的命令,执行提交的作业,按控制节点执行模型训练等。

图2为基于Spark on yarn一种Spark运行模式架构图,从集群部署的角度来看,Spark集群由以下部分组成:

集群管理器(Cluster Manager):Spark的集群管理器,承担如图1中所示的控制节点(Master节点)的角色,主要负责资源的分配与管理。

数据节点(Worker):承担如图1中所示的数据节点(Worker节点)角色,每个Worker上有至少一个任务执行器(Executor),Worker负责创建Executor,将资源和任务进一步分配给Executor,同步资源信息给Cluster Manager。

任务管理器(Executor):是Spark上的某个应用(Application)运行在worker节点上的一个进程,该进程负责运行任务(Task),并且负责将数据存在内存或者磁盘上。每个应用(Application)都有各自独立的任务执行器。

客户端驱动程序(Driver App):为客户端应用程序,用于将任务程序转换为弹性分布式数据集(英文:Resilient Distributed Datasets,简称:RDD),并与Cluster Manager进行通信与调度。

弹性分布式数据集RDD是Spark最核心的概念,表示已被分区,不可变的并能够被并行操作的数据集合,RDD通常被分区到集群的每个数据节点上,不同的数据集格式对应不同的RDD实现。Spark的计算过程主要是RDD的迭代计算过程。

当一个RDD需要访问另一个RDD的数据时,则Spark可以通过将承载数据量较小的RDD广播到每个任务执行器上,优化关联操作。

将较小的RDD广播到每个任务执行器上可以采用广播(broadcast)变量的方式。Spark源码中Hadoop RDD的实现中,就采用广播(broadcast)变量进行Hadoop JobConf的传输。

Broadcast变量是Spark所支持的两种共享变量(shared variables)的一种,为共享分布式计算过程中各个task都会用到的只读变量,broadcast变量只会在每个任务执行器上保存一份,而不会每个task都传递一份,节省空间,效率也高。Spark使用高效的广播算法去分配广播变量,以降低通信成本。

图3为现有技术中的一种数据广播的方法示意图。图中的m表示广播变量(Broadcast变量),Spark应用驱动(Spark application Driver)相当于图1所示的并行化框架中的控制节点,从属数据节点(Slave Worker)就相当于图1所示的并行化框架中的数据节点Worker,Worker上运行有Executor,Executor运行有多个task。

现有Spark集群模式运行,当广播变量m时,每个任务执行器都会从控制节点拉取广播变量,按照某一数据节点上启动的任务执行器的个数N,分发广播变量N份到该数据节点上,导致系统网络IO和内存资源多余占用,从而引发任务失败。

图4以Spark on yarn运行模式为示例,说明了Spark在广播数据时,每个数据节点上被分发了多份广播数据的问题。图中的driver_master与图3中的Spark应用驱动、与图1中的Master节点一样,都表示控制节点。

Spark任务运行时,都是以Executor为基本单位,而每个Executor各自对应一个数据管理器(BlockManager),driver_master侧有一个数据管理控制器(BlockManagerMaster)。每个Executor上的BlockManager用于从集群的其他节点(driver_master节点或其他数据节点)上拉取数据,读取本地数据缓存到内存或磁盘,在拉取完数据后,向driver_master的BlockManagerMaster汇报Block的信息和接收来自BlockManagerMaster的消息。因此,每个Executor都需要从集群的其他节点拉取数据,并向driver_master汇报。

这种广播数据的实现方式,存在严重的内存多余占用和网络IO通信开销。例如:以10个数据节点为集群、每个数据节点上启动9个任务管理器、广播数据大小为2GB,广播分块大小为4MB为例。现有Spark广播数据方法,当广播数据的大小为2GB的时候,需要2GB*9*10=180GB的内存开销,广播变量的内存膨胀对比如图5所示,2GB的广播数据大小需要180GB的内存开销;当广播数据的大小为2GB的时候,广播数据块为2GB/4MB=512,广播数据块传输次数需要(2GB/4MB)*10*9=46080次,网络IO开销对比图如图6所示,广播数据块为512时,实际需要传输46080次。

本发明中提出一种Spark在集群模式下数据广播系统、数据广播方法及设备,能够减少对系统网络IO和内存资源的占用。下面进行详细介绍。

图7为本发明实施例中的数据广播系统,该系统包括:

控制节点(图7中所示的driver_master)和至少一个数据节点(图7中所示的Worker),每个数据节点上运行有至少一个任务执行器。

除此之外,每个数据节点上包括堆外内存(off-heap memory),堆外内存中存储的数据可被该数据节点上的所有任务执行器访问。堆外内存是与堆内内存(on-heap memory)相对的概念,堆内内存是把内存对象分配在Java虚拟机的堆内的内存,由Java虚拟机进行管理;堆外内存是把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理,而不是受Java虚拟机管理,不会因为系统内存不够而让虚拟机进行垃圾回收,也能使得资源隔离的多个进程之间可以共享堆外数据的读取。因此数据节点的堆外内存中存储的数据可被该节点上的多个任务执行器访问。

控制节点与各数据节点中的任务执行器进行通信,任务执行器包括主任务执行器(图7中的ExecutorMaster)和非主任务执行器(图7中的Executor1……ExecutorN),主任务执行器为控制节点在数据节点上所指定的一个任务执行器,具体的指定过程请参阅图8所示的实施例中的步骤802中的描述。非主任务执行器为该数据节点上除主任务执行器之外的其他任务执行器。

控制节点与与其连接的多个数据节点中进行通信,下面以控制节点和其中一个数据节点(为了描述方便,称之为第一数据节点)之间的信息交互为例,对本发明实施例中的广播方法进行详细介绍,如图8所示。

801、控制节点生成广播数据;

控制节点driver_master从所有任务执行器上收集待广播数据到本地,形成完整数据源,并按照任务运行时指定的广播数据块大小参数(broadcast_block_size),将广播数据分块,构造数据块,并构造广播数据的元数据信息,元数据信息包括:“分块块数量、分块总字节大小、元数据编号”等。

可选的,为了在元数据上进行区分,在构造广播数据的元数据信息时,在元数据信息中加入“是否优化广播”字段,“是否优化广播”字段用于标识每个任务执行器在执行广播数据相关任务时的数据读取方式,如果该字段的值是“是”时,表示任务执行器是采用本发明中的方式读取的数据,如果该字段的值是“否”时,表示该任务执行器是采用的现有技术中的方式读取数据。

802、控制节点设置第一数据节点上的其中一个任务执行器为主任务执行器;

控制节点从第一数据节点上选取一个任务执行器作为主任务执行器,具体的选取方式包括但不限于以下几种:

第一种:控制节点从数据节点上随机选取一个任务执行器作为主任务执行器(ExecutorMaster),其他任务执行器为非主任务执行器(Executor1……ExecutorN)。

第二种:控制节点按照每个任务执行器的负载信息情况选择主任务执行器,例如:选择其中负载最小的一个任务执行器作为主任务执行器。

具体的,控制节点设置主任务执行器的方式包括:

控制节点给第一数据节点上的每个任务执行器下发标志位,以标识当前任务执行器是否被选中为主任务执行器,例如:当某一任务标识器接收的标志位为1时,表示该任务执行器被设置为主任务执行器,某一任务标识器接收的标识位为0时,表示该任务执行器被设置为非主任务执行器。

需要说明的是,步骤801中生成广播数据和步骤802中的设置主任务执行器之间的执行顺序不做具体限制,可以先生成广播数据,再设置主任务执行器,也可以先设置主任务执行器,再生成广播数据,也可以并行执行。

在现有技术中,控制节点通过下发广播执行计划(或广播任务执行计划)给各任务执行器,各任务执行器按照广播执行计划中的指示从数据源节点(控制节点或其他数据节点)拉取广播数据。可选的,为了使方案更完善,本发明实施例在广播执行计划中新增以下执行计划,以形成广播优化执行计划:

1)控制节点执行计划:控制节点从数据节点上选取ExecutorMaster,指定选取的具体策略,步骤802中控制节点从第一数据节点上选取一个任务执行器作为主任务执行器时所使用的策略为广播任务执行计划中所指定的策略。

2)主任务执行器计划:数据节点上的ExecutorMaster执行广播数据的拉取和保存,将广播数据保存至堆外内存,通知广播数据的保存地址到该数据节点的非主任务执行器(Executor1……ExecutorN)中;

3)非主任执行器计划:数据节点上的非主任务执行器不需要执行广播数据的拉取,只要等待ExecutorMaster发送广播数据的保存地址,再从本地堆外内存(本数据节点的堆外内存)中读取广播数据。

控制节点下发广播优化执行计划(主任务执行器计划和非主任务执行器计划)到各任务执行器上。

可选的,控制节点在下发广播优化执行计划时,可以是下发主任务执行器计划到主任务执行器上,并下发非主任务执行器计划到非主任务执行器上。还可以是,将主任务执行器计划和非主任务执行器计划下发到每个任务执行器上,由主任务执行器选择主任务执行器计划执行,非主任务执行器选择非主任务执行器计划执行。

803、主任务执行器获取广播数据;

主任务执行器根据收到的广播优化任务执行计划,执行从待广播数据源上按指定策略拉取广播数据,拉取广播数据的策略根据各节点间通信方式的不同而不同:

如果各节点间采用超文本传输协议(英文:HyperText Transfer Protocol,简称:HTTP)方式通信,则主任务执行器从控制节点上拉取所有广播数据块。

如果各节点采用对等网络传输(英文:Peer to Peer,简称:P2P)方式通信,则第一轮拉取是由各数据节点上的各主任务执行器从控制节点拉取广播数据块,广播数据块被打散分块到各数据节点上,之后,第一数据节点的主任务执行器从其他数据节点上拉取广播数据的其他块,通过多次拉取,能够获得完整的广播数据。

804、主任务执行器将广播数据保存至目标堆外内存;

主任务执行器将拉取的广播数据块保存至第一数据节点上的堆外内存中(目标堆外内存),通过多次拉取,使得保存在目标堆外内存中的数据为广播数据的完整分块。

可选的,ExecutorMaster的BlockManager通知BlockManagerMaster广播数据拉取已完成。

805、主任务执行器将目标堆外内存的地址发送至非主任务执行器;

ExecutorMaster发送消息到第一数据节点的其余任务执行器(即非主任务执行器)上,将广播数据所在的目标堆外内存的地址发送给非主任务执行器。

具体的,ExecutorMaster通过Akka消息机制将目标堆外内存的地址发送给非主任务执行器。

其中,Akka消息机制是一种可在Java虚拟机上提供分布式、高并发、容错的消息传输工具包,可实现并发、容错的分布式系统;通过异步、非阻塞方式,进行消息或事件传送;具有高性能、易扩展、以构建应用等优势,开源并行计算框架Spark就是基于Akka实现控制节点和数据节点之间消息的传递。

806、非主任务执行器根据目标堆外内存的地址,从目标堆外内存中获取广播数据。

第一数据节点上的非主任务执行器在接收到主任务执行器发送的目标堆外内存地址后,根据非主任务执行器计划中的指示,根据目标堆外内存的地址,从目标堆外内存中获取广播数据,各任务执行器上的Task再进行运算。

除此之外,每个非主任务执行器在从目标堆外内存获取广播数据后,通知driver_master上的BlockManagerMaster广播数据获取完成,driver_master接收第一数据节点上的所有的非主任执行器发送的广播数据获取完成消息后,表示广播任务已完成,driver_master发通知消息到每个数据节点上的ExecutorMaster,清除广播数据。

可选的,为了更好地兼容本发明实施例中的方案与现有技术中的方案,本发明实施例通过在driver_master侧配置开关变量,表明是否开启广播数据的优化选项;当开关变量开启时,则driver_master和数据节点上的各任务执行器执行上述步骤801至步骤806;当开关变量不开启时,则driver_master和数据节点上的各任务执行器不执行上述步骤801至步骤806,而是执行现有技术中的方案。

需要说明的是,图8所示的实施例只是以第一数据节点与控制节点的信息交互对本方案进行说明,在实际应用中,控制节点同时与其控制的多个数据节点进行交互,实施本发明实施例中的方案。

本发明实施例基于堆外内存和Akka消息机制,优化Spark广播数据的方案,由driver_master在每个数据节点上设置一个任务执行器为ExecutorMaster,由ExecutorMaster负责从数据源处拉取广播数据,并保存广播数据到堆外内存中,然后该ExecutorMaster发送消息通知该数据节点上其余Executor广播数据的堆外内存地址,使得该数据节点上的其余Executor可以从堆外内存中获取广播数据。从而使得同一个数据节点上,只需要有一个executor从数据源处拉取广播数据,只需要复制分发一份广播数据,从而能够减少对系统网络IO和内存资源的占用。

通过本发明实施例中的方案,则只需要给每个数据节点ExecutorMaster分发一份数据,则只需要2GB*10=20GB内存开销,广播数据块传输次数只需要(2GB/4MB)*10=5120次。而现有技术中的方案需要2GB*9*10=180GB的内存开销,广播数据块传输次数需要(2GB/4MB)*10*9=46080次。相比之下,本发明实施例能够节省系统网络开销和减少对内存的占用。

以上是对本发明实施中的数据广播方法的介绍,上述控制节点和控制节点可以是服务器,控制节点和数据节点可以是位于不同的服务器上,也可以位于同一台服务器上。本发明实施例以位于不同服务器上为例进行说明。其中,控制节点为控制服务器,数据节点为数据服务器。

下面对本发明实施例中的控制服务器和数据服务器分别进行介绍。

应用服务器和数据服务器硬件结构都可以是如图9所示的服务器结构示意图,只是应用服务器和数据服务器的处理器执行的应用程序的不同,从而具备不同的功能。

图9是本发明实施例提供的一种服务器结构示意图,该服务器900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器922和存储器932,一个或一个以上存储应用程序(或程序代码)942或数据944的存储器930(例如一个或一个以上海量存储设备)。其中,存储器930可以是短暂存储或持久存储。存储在存储介质930的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,处理器922与存储器930通信,在服务器900上执行存储器930中的一系列指令操作。

服务器900还可以包括一个或一个以上电源926,一个或一个以上有线或无线网络接口950,一个或一个以上输入输出(I/O)接口958,和/或,一个或一个以上操作系统941,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。

处理器922,可以是CPU或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路,用于执行操作系统与应用程序。

基于以上硬件结构,下面先介绍数据服务器所具备的功能。

本发明实施例中的数据服务器中的处理器922上处理器上运行有多个任务执行器,任务执行器包括主任务执行器和非主任务执行器,主任务执行器为控制服务器在第一数据服务器上所指定的一个任务执行器,非主任务执行器为第一数据服务器上除主任务执行器之外的其他任务执行器;

数据服务器中存储器932中包括堆外内存,堆外内存存储的数据可被至少一个任务执行器使用;

处理器922中的主任务执行器调用存储器930中的程序代码942,执行上述图8所示的实施例中的主任务执行器所执行的步骤,同样,非主任务执行器调用存储器930中的程序代码,执行上述图8所示的实施例中的非主任务执行器所执行的步骤。具体请参阅图8所示的实施例,此处不再赘述。

基于以上硬件结构,下面介绍控制服务器所具备的功能。

本发明实施例中的控制服务器中的处理器922调用所述存储器930中的所述程序代码942,执行上述图8所示的实施例中的控制节点(即driver_master)所执行的步骤,具体请参阅图8所示的实施例,此处不再赘述。

另外,处理器922通过服务器的内部总线和I/O连接,I/O再和外部设备连接,最终实现处理器922和外部设备的信息传输,用户可以通过I/O对处理器922下达命令。外部设备包括例如鼠标、键盘、打印机等。

另外,本发明实施例还提供了一种数据广播系统,该系统示意图可以参阅图7,包括图9中所述的控制服务器和至少一个图9中所述的数据服务器,数据服务器对应于图7中所示的数据节点,控制服务器对应于图7中所示的driver_master。此处不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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