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

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 对象。
  • 其他方法这里就不再赘述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值