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?

Reply via email to