2018-12-03 jobClient作业提交类

2018-12-03  本文已影响0人  北子萌

作为从ClusterClient内提交的作业图,首先会提交到jobClient端进行作业的解析。经过jobClient解析、提交并且优化后的作业提交给jobManager去执行。涉及到jobClient中的方法有以下几个:

retrieveBlobServerAddress:负责抓取jobManager入口的地址和端口,给作业传输提供一条通路。返回类型为CompletableFuture类的对象。

获取jobManager地址及端口的函数体

jobClient端还有一个上下文监听器,作为启动作业客户端之后对于作业执行结果的捕获。类名为submitJob。返回类型是一个jobListeningContext。首先会启动一个作业客户端的Actor作为通信者,这是由于Actor的原理就类似一个信箱。互相之间传递消息,其中的几个形参囊括了作业图还有一些配置信息。Future模式的结构可以理解为:使用Future模式,获取数据的时候无法立即得到需要的数据。而是先拿到一个契约,你可以再将来需要的时候再用这个契约去获取需要的数据,这个契约就好比叫外卖的例子里的外卖订单。

Props jobClientActorProps = JobSubmissionClientActor.createActorProps(

highAvailabilityServices.getJobManagerLeaderRetriever(HighAvailabilityServices.DEFAULT_JOB_ID),

  timeout,

  sysoutLogUpdates,

  config);

ActorRef jobClientActor = actorSystem.actorOf(jobClientActorProps);

Future submissionFuture = Patterns.ask(

jobClientActor,

      new JobClientMessages.SubmitJobAndWait(jobGraph),

      new Timeout(AkkaUtils.INF_TIMEOUT()));

创建的 jobClientActorProps就是一个作业客户端的Actor,负责通信,后面的ask方法体主要是为了夹带作业与作业管理器进行通信,成功与否可以用Future设计模式来负责获取,如同之前的 外卖的例子一样。

接着是可以使用jobID连接到正在运行的作业,并且可以通过jar下载ClassLoader所需的jar文件的方法:

通过jobID鉴别操作的是哪个作业

以上两种方法都含有jobListeningContext,负责监听上下文是否执行成功。

之后就是一个获取ClassLoader的方法:

retrieveClassLoader,首先在JobManager请求关于类加载器的信息,从而重构类加载器 *然后下载丢失的JAR文件

上一篇下一篇

猜你喜欢

热点阅读