Zeppelin源码分析-独立解释器 JVM 相关分析(4)

来源:互联网 发布:出租屋网络千兆方案 编辑:程序博客网 时间:2024/06/01 11:06

RemoteInterpreterServer 类

该类由 interpreter.sh 脚本启动,在运行时会判断是否是 spark 解释器,如果是的话则使用 spark-submit 命令启动该类,否则则使用普通的 java 命令启动该类。

if [[ "${INTERPRETER_ID}" == "spark" ]]; then

该类的 main 方法根据端口号构造了一个 RemoteInterpreterServer 对象( Thirft 相关代码在构造函数中,其实都是规定的写法,这里就不再赘述了),然后开启该线程( run 方法那句话才真正开启了 Thrift 服务端 ),并一直等待该线程死掉才退出。

public static void main(String[] args)    throws TTransportException, InterruptedException {  int port = Constants.ZEPPELIN_INTERPRETER_DEFAUlT_PORT;  if (args.length > 0) {    port = Integer.parseInt(args[0]);  }  RemoteInterpreterServer remoteInterpreterServer = new RemoteInterpreterServer(port);  remoteInterpreterServer.start();  remoteInterpreterServer.join();  System.exit(0);}

该类中是基本上所有的方法都是给 Thirft 的客户端的对象也就是 Client 对象调用的,当 Client 调用相应的方法时,会调用这个类中同名的方法,然后在这个方法中再去调用别的类完成相应的功能,这里对其中一些方法的作用进行总结:

  • createInterpreter 方法根据客户端传入的 className , interpreterGroupId 等参数和反射机制构建出一个对应的解释器对象。
  • getInterpreter 方法根据该 JVM 中唯一的 InterpreterGroup 对象以及传入的 sessionKey 和 className 参数直接获取到指定的解释器。
  • interpret 方法就是最关键的方法,每次调用这个方法时,都会直接向调度队列中提交一个 job,然后一直等待 job 运行结束并将结果返回。
  • convert 有两个重载方法,两个重载方法都在干一个事情,就是将 RemoteInterpreterContext 重新转化成 InterpreterContext 对象。
  • 其他方法这里就不再赘述。
原创粉丝点击