首页 > 其他分享 >dremio AppBundleRunner 简单说明

dremio AppBundleRunner 简单说明

时间:2023-02-04 22:22:50浏览次数:42  
标签:dremio java yarn AppBundleRunner arguments 简单 provision jarFile

AppBundleRunner 的作用

  • 运行通过AppBundleGenerator 生成的jar
  • 加载上边jar 相关依赖到类加载器中
  • 初始化实例,并调用main 方法
  • 同时还包含运行实例的停止

参考处理说明

  • 类加载处理
    实际上是load 方法,通过解析jar 元数据信息,同时也会进行jar 的解压处理
  • 实例初始化
    也在load 方法中处理,参考代码
 
// 会包含自己的类加载器
// Pick-up the classloader used as the parent to the System (application) classloader
// so that JVM extension classloader is also included, but application classloader used
// to bootstrap twill container is excluded.
final ClassLoader parentClassLoader = ClassLoader.getSystemClassLoader() != null
    ? ClassLoader.getSystemClassLoader().getParent()
    : null;
bundleJarClassLoader = new BundledDaemonClassLoader(classPathUrlArray, parentClassLoader, nativeLibraryPaths);
 
Thread.currentThread().setContextClassLoader(bundleJarClassLoader);
// 通过配置参数进行类的实例化
final String mainClassName = arguments.getMainClassName();
logger.debug("Instantiating instance of {}", mainClassName);
final Class<?> cls = bundleJarClassLoader.loadClass(mainClassName);
checkArgument(Runnable.class.isAssignableFrom(cls), "{} does not implement `java.lang.Runnable` interface");
Constructor<? extends Runnable> constructor = cls.asSubclass(Runnable.class).getConstructor(String[].class);
 
runnable = constructor.newInstance(new Object[] { arguments.getMainArgs() });
 
return bundleJarClassLoader;
  • 运行
    因为对于运行的类实现了Runnable 接口直接运行就可以了(实际上就是以前介绍的YarnDaemon)
  • 运行实例的停止
    因为实现了AutoCloseable,调用服务的close 就可以了,实际上是对于DACDaemon服务的shutdown

使用

就是在标准的apache twill 实现中AppBundleRunnable 调用的
参考代码

 
@Override
public final void initialize(TwillContext context) {
  arguments = Arguments.fromArray(context.getArguments());
 
  final File jarFile = new File(arguments.getJarFileName());
  Objects.requireNonNull(jarFile, String.format("Jar file %s cannot be null", jarFile.getAbsolutePath()));
  checkArgument(jarFile.exists(), "Jar file %s must exist", jarFile.getAbsolutePath());
  checkArgument(jarFile.canRead(), "Jar file %s must be readable", jarFile.getAbsolutePath());
  // 加载AppBundleRunner
  jarRunner = loadJarRunner(jarFile, arguments);
}

AppBundleRunner 创建

private AppBundleRunner loadJarRunner(File jarFile, Arguments arguments) {
  AppBundleRunner jarRunner = new AppBundleRunner(jarFile, arguments);
 
  try {
   // 会运行到上边说到的流程中
    jarRunner.load();
    return jarRunner;
  } catch (Exception e) {
    logger.error("Error loading classes into jarRunner", e);
  }
  return null;
}

说明

AppBundleRunner 核心还是对于YarnDaemon 服务实例的管理,之后方便在TwillRunnable的子类中使用,属于YarnService 服务中的一部分

参考资料

provision/yarn/yarntwill/src/main/java/com/dremio/provision/yarn/AppBundleRunner.java
provision/yarn/yarntwill/src/main/java/com/dremio/provision/yarn/BundledDaemonClassLoader.java
provision/yarn/yarntwill/src/main/java/com/dremio/provision/yarn/AppBundleRunnable.java

标签:dremio,java,yarn,AppBundleRunner,arguments,简单,provision,jarFile
From: https://www.cnblogs.com/rongfengliang/p/17092529.html

相关文章

  • dremio yarn 集成之 AppBundleGenerator 简单说明
    AppBundleGenerator的目的是方便yarn应用的运行,dremio自己开发了一个方便软件打包的服务,可以简化参考处理默认生成的jar包名称dremio-bundle.jarpublicPa......
  • 使用c语言完成简单的三子棋
    完成一个三子棋项目首先我们要知道要学会对头文件和不同源文件功能的划分首先创建一个头文件两个源文件如图其中我们将所有要引用函数的头文件放入头文件.h中主逻辑里面放的......
  • P5572 [CmdOI2019]简单的数论题
    [CmdOI2019]简单的数论题题意即求:\[\sum_{i=1}^{n}\sum_{j=1}^{m}\varphi\left(\dfrac{\operatorname{lcm}(i,j)}{\gcd(i,j)}\rig......
  • 在macOS系统中编译FFmpeg(简单编译)
    官方文档:https://trac.ffmpeg.org/wiki/CompilationGuide/macOS步骤:gitclonehttps://git.ffmpeg.org/ffmpeg.git./configure--disable-x86asmmakemakeinstall(......
  • vue-seamless-scroll(一个简单的基于vue.js的无缝滚动)
    一般在数据可视化项目中经常会看到无缝滚动的表格,即轮播表,我们可以使用 vue-seamless-scroll来实现,使用起来也很方便 vue-seamless-scroll官网:​​vue-seamless-scroll​......
  • dremio 的 YarnDaemon 简单说明
    YarnDaemon与DremioDaemon基本类似,都是启动dremio服务,只是YarnDaemon更多是关于执行器节点的运行模式与DremioDaemon差异比较大,DremioDaemon就是一个longrunning......
  • 简单三步ssh连接到虚拟机中的ubuntu
       设置共享文件夹1.首先安装这个工具VMwaretool,具体操作就是在ubuntu里面解压,然后sudo执行那个pl安装脚本2.执行命令挂载共享文件夹   sudovmhgfs-fuse......
  • 中间件Canal之Canal简单使用
    一.简单介绍​​Canal​​​是​​Java​​​开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,​​Canal​​​主要支持了​​MySQL​​​的​​Binlog​......
  • 国内简单注册chatGPT流程
        挂代理,选美国那些国家注册#ChatGPT的步骤:-挂代理,注册,登陆-http://sms-activate.org/cn支付宝充值0.5美元,选择印度手机号收验证码激活-访问http://c......
  • ZOJ4113 Calandar (简单模拟)
    Description:Input OutputSampleInput42019512Monday20195142019512Tuesday201912302019512Friday100000000011100000000011Wednesday201951......