mesos定制框架:我们的目标是启动docker容器。这个docker容器应该运行自定义的executor,如果容器有权访问作为uri的一部分传递的jar文件,这是可能的。这是作为框架起点的独立主类的一部分编辑的代码摘录。
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类的命令失败,原因是无法加载main类。另外,我不确定docker容器是否作为任务或执行者运行。在网上没有发现任何相关问题。
暂无答案!
目前还没有任何答案,快来回答吧!