全量构建索引包含两个三方面工作:
- 数据源准备
- 数据并行化索引构建
- 索引替换,合并新增索引
数据源准备也涉及到三部分:
- 获取内容id集合
- 根据内容id集合获取到数据网关完整内容
- 生成文件放到集群上
获取内容id集合的方式有多种:
- 数据库dump出id (小数据采用)
- track 日志获取id (大量数据采用)
- 内容网关接口
大约一人两天的工作量。
在获取到内容源后,就是跑集群任务,构建索引。对于一个60G的大文本而言,分四个分区
-
约1000个mapper,产生大约4000个文件夹
-
对文件夹进行合并,有两种方式:
- 起四个reducer,每个reducer合并1000个文件夹
- 起20*4个reducer,每个reducer合并 50个文件夹,最后起四个reducer,每个reducer 合并20个文件夹 ,这种方式可以加快并行度。
两种合并方式各有优劣。第一种简单,但会比较慢。第二种提高了并行度,但代码略复杂些。
最终将四个文件放置到集群上。
工作上,分成两部分:
- 提供jar包,可以在MR任务中进行调用,生成索引文件。支持分片,表结构设置。
- 开发MR任务
两人,各三天,研发加调试。
过程会比较复杂。部分功能已经实现,但需要更多测试和使用。
首先,我们还需要一种方式到集群将全量索引抓取下来。方式为shell脚本。
其次,我们将索引进行状态划分,保证新构建的全量索引能够顺利的取代老的索引。
阶段:
normal: 正常增量索引阶段
split: 当需要构建全量索引时,新增索引会写入两份,一份旧的索引A,一份新的索引B
replace: 已经构建好的的全量索引C 替换老的全量索引A
merge: 新增索引写入C,同时合并B
normal: 重新进入正常增量索引阶段
该功能已经实现,但是需要经过更充分的测试。
测试成本较高。