【源码剖析】一篇看懂havenask索引构建任务全流程

第四篇:bs_admin构建任务流程

上一篇介绍了bs_admin的主流程,包括顶层的 Admin Worker,作为系统的主要入口,负责接收用户的请求,并将这些请求分发给 ServiceKeeper 进行处理 ;ServiceKeeper 是后台的核心管理者,负责所有构建任务的管理、调度和生命周期维护 ;针对单个构建任务,则由GenerationKeeper 负责单个构建任务(Build)的生命周期管理,包括任务的启动、恢复、停止和状态同步 ;GenerationKeeper 主要通过 GenerationTask 来执行具体的构建任务,并使用 WorkerTable 来管理工作节点。上面就是整个顶层的一些核心概念,本节我们会结合具体的代码,对一个构建任务做个分析。

1提交新的构建任务

bash 复制代码
hape create table -t in1 -p 2 -s /ha3_install/example/cases/normal/in0_schema.json  -f hdfs://HDFS4001844/luotian/test.data -c /ha3_install/hape_conf/k8s  

执行这个命令的时候,他会向catalog Service发送一个create_table的请求,里面会包含表的全量数据、swift上的topic(增量数据),表的schema定义。

2感知到新构建

CatalogServiceKeeper 中感知到有新的构建,CatalogServiceKeeper会周期性的查询Catalog,看是否有新的构建任务,一旦发现有新增,就会启动一个新的构建任务,一个具体的日志如下:

3通过startBuild方法启动1个新构建

在 CatalogServiceKeeper 中,他最终会调用到 ServiceKeeper::startBuild 方法,启动一个新的

代次管理器(GenerationKeeper)=> 代次任务(GenerationTask)。

4代次任务加载配置

在加载配置的时候,会先调用基类GenerationTaskBase的loadFromConfig,然后回调到子类GenerationTask的doLoadFromConfig方法。

5加载图配置

在GenerationTask的doLoadFromConfig方法中,会去读取具体的构建任务的图配置,在这个例子中,会去读取 BuildIndexV2.graph 文件,里面定义了5个工作流TaskFlow,每个工作流由一系列任务组成,这就是对一个具体的索引构建任务的描述,下面分别介绍。

5.1数据预处理

任务类型是:prepare_data_source,具体实现类是:PrepareDataSourceTaskController,创建的位置在 BuildIndexV2.graph 中通过lua脚本调用loadSimpleFlow创建,在初始化 PrepareDataSourceTaskController 过程中,发现数据源中有文件,所以会设置 PrepareDataSourceTaskController 中存在一个处理目标,执行的时候下发给具体的Worker,他的主要功能是:

●根据用户提供的数据描述,扫描文件系统并收集所有符合条件的文件清单。这份清单最终会被整理并存储在一个元数据文件中,为后续的数据抽取和构建任务提供可靠的数据源信息。

最终会在hdfs上产出一个bs_raw_file_meta的文件,里面的内容如下:

5.2全量processor

任务类型是:processor,具体的实现类是:ProcessorTask。在初始化的时候,会去解析输入、输出。

●输入包括了文件和swift两部分

●输出此处没有提供的话,ProcessorTask内部会自动创建一个topic

典型:

5.3增量processor

增量processor和全量一致,也会创建一个topic

5.4全量build

定义在FullBuildV2.flow中,任务类型:builderV2,具体实现类:SingleBuilderTaskV2。他的输入输出为:

●输入:前置flow全量processor的swift topic

●输出:hdfs上一个地址,每个分片单独一个地址

5.5增量build

定义在IncBuildV2.flow中,任务类型也是builderV2,输入和输出也类似:

●输入:前置flow增量processor的swift topic

●输出:hdfs上一个地址,每个分片单独一个地址

6任务执行

上面完成任务初始化后,代次管理器(GenerationKeeper)会启动一个线程,周期性的调用代次任务(GenerationTask)的 makeDecision 方法,完成整个任务的驱动。整个调用路径如下:

arduino 复制代码
- GenerationKeeper::makeDecision
  - TaskFlowManager::stepRun 【驱动任务流】
  - TaskFlowManager::getAllTask() 【获取所有任务】
    - 针对每个Task执行 Task::syncTaskProperty
      - BuildServiceTask::doSyncTaskProperty
        - AdminTaskBase::run
          - TaskController::operate

最终在每个循环里会产出需要的WorkerNode,以及每个Node的目标。

7资源调度

除了上面的这个循环外,服务管理器 (ServiceKeeper)还有有一个循环,他会周期性的调用当前执行的GenerationKeeper,收集他需要的workerNode,最终生成一个执行计划,调用底层的carbon做二层调度。

总结

本文详细分析了bs_admin系统中构建任务的完整流程,从任务提交到执行及资源调度,涵盖了多个核心组件及其交互过程,但是具体的一些细节还未展开,后续会针对每个组件专门介绍。

相关推荐
Allen_LVyingbo19 小时前
用Python实现辅助病案首页主诊断编码:从数据清洗到模型上线(下)
开发语言·python·安全·搜索引擎·知识图谱·健康医疗
SEO_juper1 天前
AI+SEO全景决策指南:10大高价值方法、核心挑战与成本效益分析
人工智能·搜索引擎·seo·数字营销
CCPC不拿奖不改名1 天前
两种完整的 Git 分支协作流程
大数据·人工智能·git·python·elasticsearch·搜索引擎·自然语言处理
Elastic 中国社区官方博客1 天前
使用瑞士风格哈希表实现更快的 ES|QL 统计
大数据·数据结构·sql·elasticsearch·搜索引擎·全文检索·散列表
AC赳赳老秦2 天前
Prometheus + DeepSeek:自动生成巡检脚本与告警规则配置实战
前端·javascript·爬虫·搜索引擎·prometheus·easyui·deepseek
哪里不会点哪里.2 天前
Elasticsearch
大数据·elasticsearch·搜索引擎
LaughingZhu2 天前
Product Hunt 每日热榜 | 2026-01-20
数据库·人工智能·经验分享·神经网络·搜索引擎·chatgpt
TOPGUS2 天前
谷歌将移除部分搜索功能:面对AI时代的一次功能精简策略
前端·人工智能·搜索引擎·aigc·seo·数字营销
李尚朋20212 天前
搜嗖工具箱|小众有个性的趣味网站合集
深度学习·搜索引擎·游戏引擎
G皮T2 天前
【Elasticsearch】OpenDistro/Elasticsearch 权限分类详解
大数据·elasticsearch·搜索引擎·全文检索·kibana·权限管理·opensearch