Skip to content

Instantly share code, notes, and snippets.

@allwefantasy
Last active August 29, 2015 14:16
Show Gist options
  • Save allwefantasy/4d701720370979aa46ca to your computer and use it in GitHub Desktop.
Save allwefantasy/4d701720370979aa46ca to your computer and use it in GitHub Desktop.
索引全量构建

索引服务

索引全量构建

全量构建索引包含两个三方面工作:

  1. 数据源准备
  2. 数据并行化索引构建
  3. 索引替换,合并新增索引

数据源准备

数据源准备也涉及到三部分:

  1. 获取内容id集合
  2. 根据内容id集合获取到数据网关完整内容
  3. 生成文件放到集群上

获取内容id集合的方式有多种:

  • 数据库dump出id (小数据采用)
  • track 日志获取id (大量数据采用)
  • 内容网关接口

大约一人两天的工作量。

数据并行化索引构建

在获取到内容源后,就是跑集群任务,构建索引。对于一个60G的大文本而言,分四个分区

  1. 约1000个mapper,产生大约4000个文件夹

  2. 对文件夹进行合并,有两种方式:

    • 起四个reducer,每个reducer合并1000个文件夹
    • 起20*4个reducer,每个reducer合并 50个文件夹,最后起四个reducer,每个reducer 合并20个文件夹 ,这种方式可以加快并行度。

两种合并方式各有优劣。第一种简单,但会比较慢。第二种提高了并行度,但代码略复杂些。

最终将四个文件放置到集群上。

工作上,分成两部分:

  1. 提供jar包,可以在MR任务中进行调用,生成索引文件。支持分片,表结构设置。
  2. 开发MR任务

两人,各三天,研发加调试。

索引替换,合并新增索引

过程会比较复杂。部分功能已经实现,但需要更多测试和使用。

首先,我们还需要一种方式到集群将全量索引抓取下来。方式为shell脚本。

其次,我们将索引进行状态划分,保证新构建的全量索引能够顺利的取代老的索引。

   阶段:
   normal:  正常增量索引阶段
   split:   当需要构建全量索引时,新增索引会写入两份,一份旧的索引A,一份新的索引B
   replace: 已经构建好的的全量索引C 替换老的全量索引A
   merge:   新增索引写入C,同时合并B
   normal:  重新进入正常增量索引阶段

该功能已经实现,但是需要经过更充分的测试。

测试成本较高。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment