dremio ProfileStore 简单说明

以前简单说明过dremio 的jobprofile query,现在简单说明下dremio ProfileStore

参考实现

如下图,实际上只有一个LocalProfileStore,数据是存储咱爱kv storage 中的,但是对于kv 存储的只有完成的profile,其他阶段的数据是直接存储在
内存中的

使用

目前ProfileStore的实现只有LocalProfileStore,对于初始化是在LocalJobTelemetryServer 中,同时也会进行JobTelemetryServiceImpl 服务创建
(一个进程内rpc 的启动)

  • LocalJobTelemetryServer 创建
  public void start() throws Exception {
    profileStore = new LocalProfileStore(kvStoreProvider.get());
    profileStore.start();
 
    metricsStore = new LocalMetricsStore();
    metricsStore.start();
 
    server = JobTelemetryRpcUtils.newInProcessServerBuilder(grpcFactory,
      selfEndpoint.get().getFabricPort())
      .maxInboundMetadataSize(81920) // GrpcUtil.DEFAULT_MAX_HEADER_LIST_SIZE * 10
      .intercept(TransmitStatusRuntimeExceptionInterceptor.instance())
       // 会传递profileStore 到 JobTelemetryServiceImpl ,我们的jobprofile 查询会使用到
      .addService(new JobTelemetryServiceImpl(metricsStore, profileStore, tracer, true, executorService))
      .build();
 
    server.start();
    logger.info("LocalJobTelemetryServer is up");
  }

同时此服务只能在协调节点同时配置了job 开启(默认就开启,通过配置继承处理的)
DACDaemonModule 中

    if (isCoordinator && config.getBoolean(DremioConfig.JOBS_ENABLED_BOOL)) {
      registry.bindSelf(new LocalJobTelemetryServer(
        registry.lookup(GrpcServerBuilderFactory.class),
        registry.provider(LegacyKVStoreProvider.class),
        currentEndPoint,
        bootstrapRegistry.lookup(GrpcTracerFacade.class),
        new ContextMigratingExecutorService(new ThreadPoolExecutor(12, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>())))
      );
 
      registry.bindSelf(new LocalJobCountsServer(
        registry.lookup(GrpcServerBuilderFactory.class),
        registry.provider(KVStoreProvider.class),
        currentEndPoint)
      );
    }
  • JobTelemetryServiceImpl 以及BackgroundProfileWriter 的使用
    JobTelemetryServiceImpl 会进行ProfileStore 的实际操作,包含了添加,删除,查询,更新,BackgroundProfileWriter 主要是写入
    profile到ProfileStore 中
  • ProfilesExportery以及ExportProfilesResource的使用
    这个主要是cli 以及rest api 的提供,方便进行profile 的导出

说明

以上是一个简单ProfileStore的说明,后边会结合JobTelemetryServiceImpl的写入操作进行详细的说明

参考资料

services/jobtelemetry/server/src/main/java/com/dremio/service/jobtelemetry/server/store/ProfileStore.java
services/jobtelemetry/server/src/main/java/com/dremio/service/jobtelemetry/server/store/LocalProfileStore.java
services/jobtelemetry/server/src/main/java/com/dremio/service/jobtelemetry/server/BackgroundProfileWriter.java
services/jobtelemetry/server/src/main/java/com/dremio/service/jobtelemetry/server/JobTelemetryServiceImpl.java
services/jobtelemetry/server/src/main/java/com/dremio/service/jobtelemetry/server/LocalJobTelemetryServer.java
dac/backend/src/main/java/com/dremio/dac/server/admin/profile/ProfilesExporter.java
dac/backend/src/main/java/com/dremio/dac/resource/ExportProfilesResource.java

posted on 2024-03-03 08:00  荣锋亮  阅读(7)  评论(0编辑  收藏  举报

导航