mesos-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Yao Wang <yao.w...@ozstrategy.com>
Subject how to stop the mesos executor process in JVM?
Date Mon, 06 Jun 2016 08:05:37 GMT
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?


Mime
View raw message