美文网首页
2018-12-03 jobClient作业提交类

2018-12-03 jobClient作业提交类

作者: 北子萌 | 来源:发表于2018-12-03 11:28 被阅读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文件

    相关文章

      网友评论

          本文标题:2018-12-03 jobClient作业提交类

          本文链接:https://www.haomeiwen.com/subject/whbecqtx.html