以前简单说明过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