掌桥专利:专业的专利平台
掌桥专利
首页

基于容器的物联网数据批处理方法、处理器及存储介质

文献发布时间:2023-06-19 19:21:53


基于容器的物联网数据批处理方法、处理器及存储介质

技术领域

本发明涉及计算机技术领域,具体地涉及一种基于容器的物联网数据批处理方法、处理器及存储介质。

背景技术

在工业互联网领域,各种工业设备核心价值数据(设备、工艺、材料)通过各种不同类型的传感器和终端设备,经过各种传输协议加密之后通过4G/5G无线网络实时传输到物联网管理平台,这些数据存在数据量大(PB级),多样性,数据积累速度快,数据价值密度低等特点,因此,在物联网管理平台侧每天需要对这些数据进行大量的分布式计算分析,进而挖掘物联网数据潜在的价值。在分布式计算领域,现有的分布式计算技术的解决方案通常是采用spark(一种分布式计算引擎)+yarn(一种计算资源管理调度引擎)或者sparkstandalone(一种独立部署spark集群并依赖spark自身进行业务和计算资源管理的架构方式)两种常用的大数据计算架构设计,来完成海量物联网数据的统计分析。而现有大数据计算架构中由于不同的spark计算任务共享相同的计算资源,都在同一个spark集群上进行分析计算,资源的隔离性较差,导致不同任务之间相互抢占计算资源(cpu,内存,带宽,IO等),一些紧急的数据分析任务不能优先被优先计算。

发明内容

针对现有技术中的上述不足,本发明实施例的目的是提供一种基于容器的物联网数据批处理方法、处理器及存储介质。

为了实现上述目的,本发明第一方面提供一种基于容器的物联网数据批处理方法,包括:

从预设的kyuubi镜像服务器中拉取kyuubi镜像,以基于kyuubi镜像在k8s中进行kyuubi容器化部署;

通过jdbc客户端向部署的kyuubi容器提交数据分析任务;

通过kyuubi容器基于下载的k8s客户端向k8sapiserver发起spark容器构建请求;

基于spark容器构建请求从预设的spark镜像服务器中拉取spark镜像,以基于spark镜像在k8s中进行spark容器化部署;

通过部署后的spark容器从hive数仓中获取存储数据,以通过spark容器基于存储数据执行数据分析任务。

本发明实施例中,spark镜像的制作步骤,包括:

获取并解压spark安装包;

获取外部系统配置文件,其中,外部系统配置文件包括hadoop、hive及minio集群对应的系统配置文件;

确定spark安装包解压的第一解压目录;

将外部系统配置文件以依赖文件的形式复制到第一解压目录;

在第一解压目录下的配置脚本中增加外部配置文件所在位置的环境变量;

获取spark镜像构建指令文件,spark镜像构建指令文件中包括第一解压目录中的系统配置文件和配置脚本;

基于spark镜像构建指令文件执行构建指令,得到spark镜像。

本发明实施例中,通过kyuubi容器基于下载的k8s客户端向k8sapi server发起spark容器构建请求之前,还包括:

执行第一脚本,其中,第一脚本用于在kyuubi容器启动时安装k8s客户端并添加k8s集群认证的证书。

本发明实施例中,kyuubi镜像的制作步骤,包括:

获取并解压kyuubi安装包;

构建用于在kyuubi容器启动时安装k8s客户端并用于添加k8s集群认证的证书的第一脚本;

确定kyuubi安装包解压的第二解压目录;

在第二解压目录的kyuubi启动脚本中增加第一脚本的位置和启动方式;

获取kyuubi镜像构建指令文件,kyuubi镜像构建指令文件中包括kyuubi启动脚本;

基于kyuubi镜像构建指令文件执行构建指令,得到kyuubi镜像。

本发明实施例中,从预设的kyuubi镜像服务器中拉取kyuubi镜像,以基于kyuubi镜像在k8s中进行kyuubi容器化部署之前,还包括:

依次启动kyuubi对应的资源文件,其中,资源文件包括部署资源文件、资源配置文件、服务资源文件。

本发明实施例中,构建部署资源文件的步骤,包括:

确定需要启动的kyuubi容器所属的命名空间;

确定kyuubi容器的名称以及kyuubi容器对应的配置参数;

基于命名空间、名称以及kyuubi容器对应的配置参数构建部署资源文件。

本发明实施例中,构建资源配置文件的步骤,包括:

获取用于确定kyuubi环境变量的环境变量配置参数、用于执行数据分析任务提交的提交配置参数以及spark配置参数;

获取简易信息聚合服务的shuttle配置参数和spark的资源动态调整参数;

获取用于确定spark与minio之间的连接关系的连接参数;

基于环境变量配置参数、提交配置参数、spark配置参数、shuttle配置参数、spark的资源动态调整参数以及连接参数构建资源配置文件。

本发明实施例中,服务资源文件的构建步骤,包括:

确定用于定义kyuubi容器的源端口、目标端口以及端口映射形式的端口配置参数;

基于端口配置参数构建服务资源文件,其中,服务资源文件中指定的资源类型为service,所属命名空间为kyuubi。

本发明第二方面提供一种处理器,其特征在于,被配置成执行如上述实施例所述的基于容器的物联网数据批处理方法。

本发明第三方面提供一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令用于使得机器执行如上述实施例所述的基于容器的物联网数据批处理方法。

通过上述技术方案,从预设的kyuubi镜像服务器中拉取kyuubi镜像,以基于kyuubi镜像在k8s中进行kyuubi容器化部署;通过jdbc客户端向部署的kyuubi容器提交数据分析任务;通过kyuubi容器基于下载的k8s客户端向k8sapiserver发起spark容器构建请求;基于spark容器构建请求从预设的spark镜像服务器中拉取spark镜像,以基于spark镜像在k8s中进行spark容器化部署;通过部署后的spark容器从hive数仓中获取存储数据,以通过spark容器基于存储数据执行数据分析任务。不需要对spark镜像做与单个数据分任务相关特殊的配置,保持spark镜像最大程度的复用,融合kyuubi与spark,简化了数据分析任务提交过程,提升了开发效率,基于容器实现了数据存储和数据计算的分离,计算引擎spark跑在容器里,实现计算资源的自由扩缩容,将数据存储与数据计算分离,使得数据存储也可以实现自由扩缩容,并通过spark容器从hive数仓中获取存储数据,实现数据计算和数据存储两个环境之间的数据交换,大幅提高资源利用率,且基于k8s对容器的自动维护功能,即当pod因为某些原因挂掉之后会自动拉起新的pod,这样可以确保spark在执行数据分析任务时永不宕机,极大地降低了运维成本。

本发明实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:

图1为根据本发明一实施例的基于容器的物联网数据批处理方法的流程示意图;

图2为根据本发明一实施例的kyuubi架构设计的示意图;

图3为根据本发明一实施例的执行数据分析任务的框架示意图。

具体实施方式

以下结合附图对本发明实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明实施例,并不用于限制本发明实施例。

图1为根据本发明一实施例的基于容器的物联网数据批处理方法的流程示意图。如图1所示,在本发明实施例中,提供了一种基于容器的物联网数据批处理方法,以该方法应用于处理器为例进行说明,该方法可以包括以下步骤:

步骤S100,从预设的kyuubi镜像服务器中拉取kyuubi镜像,以基于kyuubi镜像在k8s中进行kyuubi容器化部署;

需要说明的是,kyuubi是一个分布式和多租户网关,为数据湖查询引擎(例如spark、flink或trino等)提供SQL等查询服务。本实施例中,将kyuubi与spark进行融合,并进行kyuubi和spark的容器化部署,从而降低spark应用开发难度,降低spark的使用门槛,降低运维成本。kyuubi是一个分布式和多租户网关,为物联网数据的分析计算引擎Spark提供SQL接入服务,即仅需要通过jdbc客户端向kyuubi提交数据分析任务的SQL代码,即可实现海量物联网数据分析任务的提交,计算和分析,无需提前构建spark集群,编写任务提交脚本,配置计算资源参数等操作,大大简化spark数据分析任务开发,部署,运维的复杂度。

参考图2,kyuubi架构设计主要分为4层:

用户层(UserSide),指通过不同方式使用Kyuubi的用户(User1,User2),比如通过JDBC或beeline方式使用Kyuubi的用户。

服务发现层(ServiceDiscoverySide),服务发现层依赖于Zookeeper实现,其又分为KyuubiServer层的服务发现和KyuubiEngine层的服务发现。

KyuubiServer层,由多个不同的KyuubiServer实例组成,每个KyuubiServer实例本质上为基于ApacheThrift实现的RPC服务端,其接收来自用户的请求,但并不会真正执行该请求的相关SQL操作,只会作为代理转发该请求到KyuubiEngine层用户所属的SparkSQLEngine实例上。

KyuubiEngine层,由多个不同的SparkSQLEngine实例组成,每个SparkSQLEngine实例本质上为基于ApacheThrift实现的并且持有一个SparkSession实例的RPC服务端,其接收来自KyuubiServer实例的请求,并通过SparkSession实例来执行。在kyuubi的USER共享层级上,每个SparkSQLEngine实例都是用户级别的,即不同的用户其会持有不同的SparkSQLEngine实例,以实现用户级别的资源隔离和控制;为了实现向容器化的spark提交任务,kyuubi也必须实现容器化,本实施例中,实现kyuubi的容器化并与容器化的spark进行了融合。

本实施例中,基于k8s容器化技术进行大数据相关组件的部署,k8s是docker容器的编排和管理系统,kyuubi实现容器化部署,必须需要一个虚拟文件系统,该虚拟文件系统包含kyuubi所有的目录,这些目录文件再加上宿主机的内核提供了一个linux的虚拟环境,当在k8s所管理编排的docker中启动该虚拟linux环境,即可把kyuubi集群拉启动起来;包含kyuubi的所有目录的虚拟文件系统即为kyuubi镜像,该镜像只能在k8s中运行。为了简化不同数据分析任务的部署过程,kyuubi的镜像是需要复用的,kyuubi镜像可以预先构建并上传至预设的kyuubi镜像服务器中,例如,harbor镜像服务器,以在每次发版或者更新时可以快速拉取kyuubi镜像,避免重复进行kyuubi镜像的构建。

具体地,从预设的kyuubi镜像服务器中拉取kyuubi镜像,以基于kyuubi镜像在k8s中进行kyuubi容器化部署。

步骤S200,通过jdbc客户端向部署的kyuubi容器提交数据分析任务;

本实施例中,需要说明的是,数据分析任务包括sparkSQL分析代码。通过hive的beeline客户端,输入kyuubi的jdbc连接地址,按提示输入用户名和密码,即可建立与kyuubiserver的jdbc连接,此时,将预先准备好的数据分析任务在该jdbc客户端进行提交,kyuubiserver收到数据分析任务请求之后,将该请求发送到kyuubiengine。

步骤S300,通过kyuubi容器基于下载的k8s客户端向k8sapiserver发起spark容器构建请求;

具体地,通过kyuubi容器基于下载的k8s客户端向k8sapiserver发起spark容器构建请求之前,还包括:

执行第一脚本,其中,第一脚本用于在kyuubi容器启动时安装k8s客户端并添加k8s集群认证的证书。

本实施例中,需要说明的是,处理器在执行第一脚本时,将会基于第一脚本在kyuubi容器在启动时将下载k8s客户端并添加k8s集群认证的证书。kyuubiengine通过k8s客户端kubectl向k8sapiserver服务发起spark容器构建请,以请求建立spark集群。

步骤S400,基于spark容器构建请求从预设的spark镜像服务器中拉取spark镜像,以基于spark镜像在k8s中进行spark容器化部署;

本实施例中,k8s是docker容器的编排和管理系统,spark要在容器中进行运行,必须需要一个虚拟文件系统,该虚拟文件系统包含spark分布式计算引擎所有的目录,这些目录文件再加上宿主机的内核提供了一个linux的虚拟环境,当在k8s所管理编排的docker中启动该虚拟linux环境,即可把spark集群拉启动起来;包含spark的所有目录的虚拟文件系统即为spark镜像,该镜像只能在k8s中运行,为了在提交不同spark数据分析任务时,方便快捷地在k8s中搭建spark分布式计算环境,需要能够复用spark镜像,需要将spark镜像提前准备好并上传至预设的spark镜像服务器中,以在提交数据分析任务时,只要从该spar镜像服务器拉取spark镜像即可。

具体地,kyuubiengine通过k8s客户端kubectl向k8sapiserver服务发起建立sparkdriverpod的请求,sparkdriverpod向k8s申请计算资源,拉起一定数量的sparkexecutorpods,并开始数据分析任务的计算。

步骤S500,通过部署后的spark容器从hive数仓中获取存储数据,以通过spark容器基于存储数据执行数据分析任务。

本实施例中,将海量物联网数据存储在hadoop文件系统中,仅把计算引擎spark放在容器中运行,这样可以做到存储和计算的分离,将计算和存储彻底解耦,以实现spark计算节点的弹性扩缩容。需要说明的是,存储数据即海量物联网数据,hive数仓基于hadoop分布式文件系统,在spark容器执行数据分析任务时,需要从远程的hive数仓拉取存储数据进来,从而基于获取到的存储数据执行数据分析任务。

本实施例中,当数据分析任务计算完成之后,不同的sparkexecutorpod会根据计算是否完成将pod的状态打上completed的标签,然后将该pod的资源释放出来,供其他pod使用,使资源利用率最大化,当所有sparkexecutor状态都变为completed时,表示数据分析任务已结束,spark集群的资源可以得到全部的释放,同时sparkdiverpod会将计算分析结果返回给jdbc客户端,整个数据分析任务结束。

通过上述基于容器的物联网数据批处理方法,从预设的kyuubi镜像服务器中拉取kyuubi镜像,以基于kyuubi镜像在k8s中进行kyuubi容器化部署;通过jdbc客户端向部署的kyuubi容器提交数据分析任务;通过kyuubi容器基于下载的k8s客户端向k8sapiserver发起spark容器构建请求;基于spark容器构建请求从预设的spark镜像服务器中拉取spark镜像,以基于spark镜像在k8s中进行spark容器化部署;通过部署后的spark容器从hive数仓中获取存储数据,以通过spark容器基于存储数据执行数据分析任务。不需要对spark镜像做与单个数据分任务相关特殊的配置,保持spark镜像最大程度的复用,融合kyuubi与spark,简化了数据分析任务提交过程,提升了开发效率,基于容器实现了数据存储和数据计算的分离,计算引擎spark跑在容器里,实现计算资源的自由扩缩容,将数据存储与数据计算分离,使得数据存储也可以实现自由扩缩容,并通过spark容器从hive数仓中获取存储数据,实现数据计算和数据存储两个环境之间的数据交换,大幅提高资源利用率,且基于k8s对容器的自动维护功能,即当pod因为某些原因挂掉之后会自动拉起新的pod,这样可以确保spark在执行数据分析任务时永不宕机,极大地降低了运维成本。

参考图3,将准备好的sparkSQL分析代码在该jdbc客户端进行提交,kyuubiserver收到数据分析任务请求之后,将该请求发送到kyuubiengine,kyuubiengine通过k8s客户端kubectl向k8s的apiserver服务发起建立sparkdriverpod的请求,driverpod向k8s申请计算资源,拉起一定数量的sparkexecutorpods,并开始sparkSQL分析任务的计算,各个服务容器启动过程中都会根据之前步骤指定的yaml约束文件进行相应服务pod的自动拉起,并自动完成计算。本实施例中,海量物联网数据存储在hadoop文件系统中,仅把计算引擎spark放在容器中运行。

在一个实施例中,spark镜像的制作步骤,包括:

获取并解压spark安装包;

获取外部系统配置文件,其中,外部系统配置文件包括hadoop、hive及minio集群对应的系统配置文件;

确定spark安装包解压的第一解压目录;

将外部系统配置文件以依赖文件的形式复制到第一解压目录;

在第一解压目录下的配置脚本中增加外部配置文件所在位置的环境变量;

获取spark镜像构建指令文件,spark镜像构建指令文件中包括第一解压目录中的系统配置文件和配置脚本;

基于spark镜像构建指令文件执行构建指令,得到spark镜像。

本实施例中,需要说明的是,spark安装包存在多个版本,不同的spark安装包具有不同的功能,可以适配其他不同版本的大数据组件,根据不同版本的spark安装包可制作不同版本spark镜像,以不同docker镜像标签tag进行区分。第一解压目录为linux系统下spark安装包解压的目录。经过解压后,可以进入到第一解压目录下的任何次级目录进行查看、文件的修改以及参数的配置。

本实施例中,将spark与hadoop、hive及minio(一种分布式对象存储系统)进行系统集成。海量物联网数据存储在hadoop文件系统中,仅把计算引擎spark放在容器中运行,做到存储和计算的分离,将计算和存储彻底解耦。spark镜像制作过程,很多数据分析任务依赖的第三方jar包或者配置项文件都是跟具体任务相关,因此为了得到一个可以复用的spark镜像,本实施例中,将这些跟具体任务相关的文件放到预先搭建好的minio系统中。

为了实现基于spark镜像启动的sparkcluster集群可以正常访问k8s集群之外的hive和hadoop的hdfs(HadoopDistributedFileSystem,分布式文件系统)中的物联网数据以及minio中的相关依赖对象文件,需要将外部已有的hadoop、hive及minio集群相关的外部系统配置文件以依赖的javajar文件复制到第一解压目录中特定位置,外部系统配置文件主要包括hdfs-site.xml、core-site.xml及hive-site.xml,复制第一解压目录的conf中,同时将依赖的jar包复制到第一解压目录的jars下面。

需要说明的是,为了spark容器启动时就可以找到hadoop和hive的配置,以便spark集群与hadoop、hive建立连接,读取hive数仓中海量物联网数据,通过在第一解压目录下的配置脚本中增加上述外部配置文件所在位置的环境变量。具体为,第一解压目录下conf中,对spark-env.sh的shell脚本进行配置,增加hadoop和hive配置文件所在位置的环境变量。

需要说明的是,通过docker来构建spark镜像时,必须制作好spark镜像构建指令文件,也即Dockerfile文本文件,spark镜像构建指令文件包含了很多构建spark镜像所需的指令和说明。本实施例中,spark镜像构建指令文件中指明了:spark所依赖的jdk环境、spark集群的操作用户、spark镜像启动后的容器内需要安装的系统工具、创建容器中的一些目录、复制第一解压目录中一些文件和目录到容器中、指定容器中的环境变量和工作目录、为spark容器中一些目录赋权以及指定spark容器运行时执行预处理逻辑的shell脚本entrypoint.sh。基于该spark镜像构建指令文件执行构建指令,即可得到spark镜像。在spark镜像构建完成后,为该spark镜像赋予标签后,推送到预设的spark镜像服务器,例如harbor镜像服务器,以便每次发布数据分析任务时自动从spark镜像服务器拉取spark的镜像,避免重复进行spark镜像的构建。

本实施例中,通过预先构建spark镜像,实现spark镜像一次制作反复使用,简化了不同数据分析任务的部署过程。

在一个实施例中,kyuubi镜像的制作步骤,包括:

获取并解压kyuubi安装包;

构建用于在kyuubi容器启动时安装k8s客户端并用于添加k8s集群认证的证书的第一脚本;

确定kyuubi安装包解压的第二解压目录;

在第二解压目录的kyuubi启动脚本中增加第一脚本的位置和启动方式;

获取kyuubi镜像构建指令文件,kyuubi镜像构建指令文件中包括kyuubi启动脚本;

基于kyuubi镜像构建指令文件执行构建指令,得到kyuubi镜像。

本实施例中,需要说明的是,kyuubi安装包存在多个版本,不同版本的kyuubi安装包具有不同的功能,可以适配其他不同版本的大数据组件,根据不同版本的kyuubi安装包制作不同版本kyuubi镜像,以不同docker镜像标签tag进行。第二解压目录为linux系统下kyuubi安装包解压的目录。经过解压后,可以进入到第二解压目录下的任何次级目录进行查看、文件的修改以及参数的配置。

需要说明的是,为了当用户通过kyuubi提交spark数据分析任务时,kyuubi容器可以通过容器内的k8s客户端并且有权限向k8sapiserver发起请求,即拉起一个spark计算集群并执行kyuubi传递过来的spark数据分析计算任务请求,需要构建用于在kyuubi容器启动时安装k8s客户端并用于添加k8s集群认证的证书的第一脚本。具体地,第一脚本包括的指令有:创建目录并且赋予可读可写权限、复制k8s集群认证文件到相应目录、配置容器内的k8s认证地址环境变量、下载k8s的客户端kubectl。确定kyuubi安装包解压的第二解压目录;在第二解压目录中修改kyuubi启动脚本,增加第一脚本的位置和启动方式。

需要说明的是,为了得到可以运行的kyuubi镜像,我们需要制作构建kyuubi镜像构建指令文件,也即Dockerfile文件,kyuubi镜像构建指令文件包含了很多构建kyuubi镜像所需的指令和说明,本实施例中,kyuubi镜像构建指令文件包括:修改openjdk的源、修改拉取debian的源、安装相关软件、复制第一脚本,用来在镜像拉起后进行修改/etc/hosts文件、设置user用户为0(root)、复制第二解压目录到容器内的相应的目录中、指定kyuubi的在容器中运行的指令。基于该kyuubi镜像构建指令文件执行构建指令,即可得到kyuubi镜像。在kyuubi镜像构建完成后,为该kyuubi镜像赋予标签后,推送到预设的kyuubi镜像服务器,以便每次发版或者更新时可以快速拉取kyuubi镜像,避免重复进行kyuubi镜像的构建。在需要搭建kyuubisql多租户统一提交服务平台时,只要从该kyuubi镜像服务器拉取kyuubi镜像在k8s中进行部署。

本实施例中,通过预先构建kyuubi镜像,进一步简化了不同数据分析任务的部署过程。

在一个实施例中,从预设的kyuubi镜像服务器中拉取kyuubi镜像,以基于kyuubi镜像在k8s中进行kyuubi容器化部署之前,还包括:

依次启动kyuubi对应的资源文件,其中,资源文件包括部署资源文件、资源配置文件、服务资源文件。

本实施例中,在k8s集群的其中一台节点上依次启动kyuubi相应的资源文件,即执行k8s的相关工作负载创建指令,即可依次在k8s创建configmap,service,deployment三种资源对象,然后kyuubi的工作负载就会被创建成功,kyuubi-deployment下面就会包括kyuubi-server和kyuubi-engine的pod,pod中就会运行具体的容器。等到kyuubi相关的pod在k8s容器中完全启动之后,就可以在k8s集群外面通过beeline客户端连接kyuubi-server进行数据分析任务的提交。

具体地,构建部署资源文件的步骤,包括:

确定需要启动的kyuubi容器所属的命名空间;

确定kyuubi容器的名称以及kyuubi容器对应的配置参数;

基于命名空间、名称以及kyuubi容器对应的配置参数构建部署资源文件。

本实施例中,需要说明的是,在向k8s提交spark的数据分析任务前,需要在k8s容器中将kyuubi相关的服务(kyuubiserver和kyuubiengine)启动起来;k8s中部署服务只需要将相应的资源对象通过yaml语言描述清楚,最终以yaml文件形式向k8s集群提交即可在k8s中拉起相应的服务。yaml文件为资源文件,本实施例中,资源文件包括部署资源文件,部署资源文件为kyuubi-deployment资源yaml文件。

k8s的deployment是最常用的工作负载,也是基础设施扩缩容基础。deployment的作用:发布应用,升级应用,回退应用,扩缩容,因此我们也采用deployment来发布kyuubi应用,部署资源文件配置主要包括:kyuubi-deployment的名称,标签,需要启动的kyuubi容器所属的命名空间;容器中需要解析的ip和hostname的映射关系;需要启动的容器及相关配置参数、容器中环境变量、容器需要加载的配置文件、容器的持久化存储等,按照yaml的编程规范,将上述配置参数配置完成之后就得到部署资源文件。

具体中,构建资源配置文件的步骤,包括:

获取用于确定kyuubi环境变量的环境变量配置参数、用于执行数据分析任务提交的提交配置参数以及spark配置参数;

获取简易信息聚合服务的shuttle配置参数和spark的资源动态调整参数;

获取用于确定spark与minio之间的连接关系的连接参数;

基于环境变量配置参数、提交配置参数、spark配置参数、shuttle配置参数、spark的资源动态调整参数以及连接参数构建资源配置文件。

本实施例中,需要说明的是,Kyuubi容器启动时需要进行很多参数的配置,例如,kyuubi自身的、与spark相关的、与minio相关的等,主要包括:确定kyuubi环境变量的环境变量配置参数、用于执行数据分析任务提交的提交配置参数以及spark配置参数,由于这一部分配置都是以不同文件形式存在,为了将这些配置文件(kyuubi-en.sh,kyuub-defauts.conf)集中到一起并方便kyuubi容器的加载,我们通过k8s的configMap资源对象进行这些配置的管理,通过最终形成configmap的yaml文件,将这些配置文件统一到一起,构成资源配置文件。

需要说明的是,为了避免sparkexecutorpod在扩缩容重建时由于shuffle数据的丢失导致的任务运行失败,本实施例中采用shuttle(一种sparkremote shuffleservice)来对spark的数据分析任务运行时不同stage的map/reduce任务数据交换过程数据进行远程存储,管理和优化,从而提高了spark的计算效率的同时保障了spark计算pod在动态调整时运行的稳定性。

将容器化的spark与远程的简易信息聚合服务(RSS服务)shuttle进行融合,解决sparkexecutorpod在缩容(pod数量减少)时shuffle数据丢失导致任务重新计算的问题,使得容器化后spark动态资源调整功能可以有效发挥作用,本实施例中,将提前部署好的shuttle配置参数在资源配置文件中进行配置,以spark容器启动时就可以通过该资源配置文件对应的configmap资源对象读取到shuttle连接信息,进而将spark的map/reduceshuffle数据在远程的shuttle中进行处理,提高spark的计算性能。

需要说明的是,Spark分布式计算任务运行时,随着数据量的不同,不同计算任务所需的资源不一定相同,为了加快计算效率,配置容器中spark集群的executorpod数量能够随着数据量的大小和计算任务所需资源的大小,自动进行pod数量的调整,即进行计算资源的动态调整,针对容器化的spark,本实施例在资源配置文件中配置shuttle配置参数的同时配置spark的资源动态调整参数,以在当spark容器启动时,就可以根据数据分析任务要计算的数据量的大小进行自动的扩缩容了,实现计算资源的利用率的最大化。

需要说明的是,为实现在spark容器在启动时可以从外部服务minio上拉取本次数据分析任务需要的文件到spark容器内,参与数据的计算,将用于确定spark与minio之间的连接关系的连接参数在资源配置文件中进行配置。

具体地,服务资源文件的构建步骤,包括:

确定用于定义kyuubi容器的源端口、目标端口以及端口映射形式的端口配置参数;

基于端口配置参数构建服务资源文件,其中,服务资源文件中指定的资源类型为service,所属命名空间为kyuubi。

在k8s中把相应服务(kyuubi-server,kyuubi-engine)的容器启动之后,如果不做其他处理,这些服务只能在容器内访问,在k8s集群之外的服务如果要访问kyuubi-server就会因网络问题而无法实现,k8s集群内容器中的服务,由于集群内网络限制等原因,是不能对外访问的,为了解决这个问题,本实施例中,通过k8s的service资源进行端口和网络约定,把容器内的服务端口通过NodePort或者Ingress形式暴露到k8s集群外面,实现远程向k8s集群提交spark的数据分析任务。通过NodePort进行服务端口的暴露,具体地,在服务资源文件的配置内容主要包括:指定资源类型为service,所属命名空间为kyuubi,用于定义kyuubi容器的源端口、目标端口以及端口映射形式的端口配置参数。

需要说明的是,K8s中不同资源的隔离是通过命名空间(namespace)进行的,通过在k8s中创建一个命名空间,并为该命名空间指定一定的cpu,内存资源,那么绑定到该命名空间的项目,或者任务就只能使用该命名空间中的资源,不能共享或者抢占其他命名空间的资源,创建了命名空间之后,需要在该命名空间下创建服务账号(serviceAcount)和角色,并将二者进行绑定,之后所有的操作都以该服务账号在k8s中进行pod的创建和删除。本实施例中,根据此为spark创建命名空间,服务账号和角色绑定,以达到spark不同分析计算任务资源的隔离和相关权限的精细化管理。

本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述基于容器的物联网数据批处理方法。

本发明实施例提供了一种机器可读存储介质,其上存储有程序,该程序被处理器执行时实现所述基于容器的物联网数据批处理方法。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

相关技术
  • 体测数据的处理方法、装置、系统、存储介质、处理器
  • 变更数据处理方法、装置、存储介质、处理器及服务器
  • 数据展示方法、装置、存储介质及处理器
  • 数据请求的处理方法和装置、存储介质、处理器
  • 数据处理方法、装置、存储介质和处理器
  • 一种企业数据中台基于批处理的数据共享方法、装置及存储介质
  • 数据批处理方法及其批处理装置、存储介质和计算机设备
技术分类

06120115884575