1

Mesos 自定义框架:我们的目标是启动 docker 容器。如果容器可以访问作为 URI 的一部分传递的 jar 文件,则此 docker 容器应该运行自定义执行程序。这是作为框架起点的独立主类的一部分的编辑代码摘录。

String path = "http://localhost/example/example-1.0-SNAPSHOT-jar-with-dependencies.jar";
Protos.CommandInfo.URI uri = Protos.CommandInfo.URI.newBuilder().setValue(path).setExtract(false).build();

String command = "java -cp example-1.0-SNAPSHOT-jar-with-dependencies.jar com.example.ExampleExecutor";
Protos.CommandInfo commandInfo = Protos.CommandInfo.newBuilder().setValue(command).addUris(uri).build();

Protos.ContainerInfo.DockerInfo.Builder dockerInfo = Protos.ContainerInfo.DockerInfo.newBuilder();
dockerInfo.setImage(imageName);
dockerInfo.setNetwork(Protos.ContainerInfo.DockerInfo.Network.BRIDGE);

Protos.ContainerInfo.Builder containerInfo = Protos.ContainerInfo.newBuilder();
containerInfo.setType(Protos.ContainerInfo.Type.DOCKER);
containerInfo.setDocker(dockerInfo.build());

Protos.ExecutorInfo exampleExecutor = Protos.ExecutorInfo.newBuilder()
    .setExecutorId(Protos.ExecutorID.newBuilder().setValue("ExampleExecutor"))
        .setCommand(commandInfo)
        .setName("Example Executor")
        .setContainer(containerInfo)
        .setSource("java")
    .build();

Mesos 自定义调度程序:下面是用于启动 docker 任务的代码摘录。我们希望将 docker 作为执行者而不是任务来运行。

Protos.TaskInfo task = Protos.TaskInfo.newBuilder()
                                .setName("task " + taskId).setTaskId(taskId)
                                .setSlaveId(offer.getSlaveId())
                                .addResources(buildResource("cpus", job.getCpu()))
                                .addResources(buildResource("mem", 128))                                     .setData(ByteString.copyFromUtf8(ExampleModelObject.toJSON()))

.setExecutor(Protos.ExecutorInfo.newBuilder(exampleExecutor))
                                .build();

我不确定它到底在做什么。我们的容器是由 mesos 启动的,但 jar 文件在容器内不可用,因此在容器内运行 executor 类的命令失败,原因是无法加载主类。另外,我不确定 docker 容器是作为任务还是执行者运行。在互联网上没有找到任何相关问题。

4

0 回答 0