Couple things. You need to do the business logic and status update sending in a different thread than synchronously in launchTask(). This is because the driver doesn't send messages to the agent unless the launchTask() method returns. See https://github.com/apache/mesos/blob/master/src/examples/java/TestExecutor.java for example.
Regarding exiting the executor, driver.stop() or driver.abort() only stops the driver, i.e., your executor won't be able to send or receive messages from the agent. It is entirely up to the executor process to exit. HTH, On Mon, Jun 6, 2016 at 4:05 AM, Yao Wang <[email protected]> wrote: > Hi , all ! > > I write my own executor to run code, > > I override the launchTask method like that : > > > ------------------------------------------------------------------------------------------------------------------------------------------------ > > @Override public void launchTask(ExecutorDriver driver, Protos.TaskInfo > task) { > LOGGER.info("Executor is launching task#{}\n...", task); > //before launch > driver.sendStatusUpdate( > > Protos.TaskStatus.newBuilder().setTaskId(task.getTaskId()).setState( > Protos.TaskState.TASK_RUNNING).build()); > > LOGGER.info("Add your bussiness code hear .. "); > //bussiness code hear > > > //after launch > driver.sendStatusUpdate( > > Protos.TaskStatus.newBuilder().setTaskId(task.getTaskId()).setState(Protos.TaskState.TASK_FINISHED).setData( > ByteString.copyFromUtf8( > "${taksData}")).build()); > > > } // end method launchTask > ------------------------------------------------------------------------------------------------------------------------------------------------ > > > And i build the commandInfo like that: > > ------------------------------------------------------------------------------------------------------------------------------------------------ > > > String executorCommand = String.format("java -jar %s", > extractPath(executorJarPath)); > > Protos.CommandInfo.URI.Builder executorJarURI = > Protos.CommandInfo.URI.newBuilder().setValue(executorJarPath); // > executorJarURI is local uri or hadoop > > Protos.CommandInfo.Builder commandInfoBuilder = > Protos.CommandInfo.newBuilder().setEnvironment(envBuilder).setValue( > executorCommand).addUris(executorJarURI); // executorJarURI is > local uri or hadoop > > long ctms = System.nanoTime(); > > Protos.ExecutorID.Builder executorIDBuilder = > Protos.ExecutorID.newBuilder().setValue(new StringBuilder().append( > ctms).append("-").append(task.getTaskRequestId()).toString()); > Protos.ExecutorInfo.Builder executorInfoBuilder = > Protos.ExecutorInfo.newBuilder().setExecutorId( > > executorIDBuilder).setCommand(commandInfoBuilder).setName("flexcloud-executor-2.0.1-" > + ctms).setSource("java"); > > // TaskInfo > Protos.TaskInfo.Builder taskInfoBuilder = > Protos.TaskInfo.newBuilder().setName(task.getTaskName()).setTaskId( > > taskIDBuilder).setSlaveId(offer.getSlaveId()).setExecutor(executorInfoBuilder); > > > return taskInfoBuilder.build(); > ------------------------------------------------------------------------------------------------------------------------------------------------ > > > After run the executor with mesos for several times , i found every > executor was not exit , > > I execute $ ps -ef | grep “java -jar” on the slave machine , that shows > me : > > wangyao$ ps -ef | grep "java -jar" > 501 20078 19302 0 3:54下午 ?? 0:15.77 /usr/bin/java -jar > flexcloud-executor.jar > 501 20154 19302 0 3:54下午 ?? 0:17.92 /usr/bin/java -jar > flexcloud-executor.jar > 501 20230 19302 0 3:54下午 ?? 0:16.13 /usr/bin/java -jar > flexcloud-executor.jar > > In order to stop these process after running a executor, first , i > tried to add code "driver.stop()” or “driver.abort()” to the Executor’s > launchTask method, but it is unused. > So, I add code “System.exit(0)” , stop the JVM directly……. it works … > > I have doubt about this way to stop executor , it is the only way to do > that? > >

