SlideShare a Scribd company logo
1 of 40
Download to read offline
.

.
    分布式索引构建

         恨少

      一淘搜索技术部


    2012 年 3 月 28 日




                       .   .   .   .   .   .

        恨少   分布式索引构建
1.   引擎基础知识


2.   Hadoop 工具链介绍


3.   abuild 原理


4.   bbuild 原理


5.   Hadoop 相关配置及 Job 优化




                                     .   .   .   .   .   .

                     恨少    分布式索引构建
1.   引擎基础知识


2.   Hadoop 工具链介绍


3.   abuild 原理


4.   bbuild 原理


5.   Hadoop 相关配置及 Job 优化




                                     .   .   .   .   .   .

                     恨少    分布式索引构建
. 索引种类



    检索
    使用倒排索引,(“手机”, (宝贝 0, 宝贝 10, 宝贝 15)).

    过滤和统计.
    使用正排索引,((宝贝 0, (价格:1500));(宝贝 1, (价格:1800))).

    返回宝贝
    使用宝贝原始数据.




                                    .   .   .   .   .   .

                     恨少   分布式索引构建
. I’m Feeling Lucky




                      .   .   .   .   .   .
. A 引擎索引




    索引分段.

    每个文档每个字段的正排索引存储在不同的文件中.




                             .   .   .   .   .   .

              恨少   分布式索引构建
. B 引擎索引




    索引不分段.

    每个文档的正排数据集中存储.




                             .   .   .   .   .   .

              恨少   分布式索引构建
. 索引构建示意图




            .   .   .   .   .   .
. 淘宝商品搜索索引构建问题




  商品数量巨大, 索引构建是个难题.

    数亿商品

    数百 GB 存放在 Hadoop 上的压缩 XML 数据




                                 .   .   .   .   .   .

                  恨少   分布式索引构建
. 单机索引构建流程




 目前单机建索引的流程:

   拉数据.
   建索引.
   链式分发索引.




               .   .   .   .   .   .
. 单机构建缺点



    建索引时间长
    对两千万商品建索引耗时半小时以上.

    分发索引时间长
    将所有索引分发完, 需要一个小时左右.

    容错能力差
    索引构建时遇到硬件故障, 目前需要人工进行干预.




                              .   .   .   .   .   .

               恨少   分布式索引构建
. 更好的构建方式?




                            .   .   .   .   .   .

             恨少   分布式索引构建
. 更好的构建方式!

  分布式索引构建的优点:

    XML 数据是分布式平台产出的, 处理起来更加方便.
    节省拉数据的时间.

    将构建任务进行分解, 分布式建索引, 速度更快.
    将索引构建的时间减少一半.

    利用 HDFS 多份拷贝, 加快索引分发速度.
    将集群分成几个独立的行组, 分别进行链式拷贝.

    可靠性有保障, 不会因为单台服务器硬件故障而失败.
    再也不担心硬件故障了.

                               .   .   .   .   .   .

                恨少   分布式索引构建
单机多线程 VS 多机多进程




                    .   .   .   .   .   .

     恨少   分布式索引构建
. 形象的对比


    单机构建索引时, 使用多线程建索引. 线程个数为 CPU 核数
    的 1.2 倍左右.
    ./index_builder -c build_conf.xml
        -t thread_count
        -i input
        -o output -T temp -z



    上百台服务器, 每台服务器很多块磁盘, 每个 task 运行在不
    同的磁盘上, 减少 IO 竞争.
    /dump/7/hadoop/local/taskTracker/admin/jobcache
        /job_201204102307_552289
        /attempt_201204102307_552289_m_000002_0/




                                                  .   .   .   .   .   .

                              恨少        分布式索引构建
. 云端小飞象




          .   .   .   .   .   .
1.   引擎基础知识


2.   Hadoop 工具链介绍


3.   abuild 原理


4.   bbuild 原理


5.   Hadoop 相关配置及 Job 优化




                                     .   .   .   .   .   .

                     恨少    分布式索引构建
. Hadoop Streaming


    Hadoop streaming is a utility that comes with the Hadoop
    distribution. The utility allows you to create and run map/reduce
    jobs with any executable or script as the mapper and/or the
    reducer. For example:


    $HADOOP_HOME/bin/hadoop
        jar $HADOOP_HOME/hadoop-streaming.jar 
        -input myInputDirs 
        -output myOutputDir 
        -mapper /bin/cat    
        -reducer /bin/wc



                                                 .   .   .    .    .    .

                                恨少     分布式索引构建
. Hadoop Pipes
    Hadoop Pipes allows C++ code to use Hadoop DFS and
    map/reduce.

    Hadoop Pipes 主要缺点是:

        出问题难于调试, 只能通过打印语句跟踪问题.

        升级 Hadoop 时, 需要重新编译程序以链接新的 Pipes 库, 否
        则可能有不兼容情况.

        效率比较低,map 和 reduce 得到的都是 string 字符串, 非字
        符类型需要进行一次转换.

    void map(HadoopPipes::MapContext& context) {
        std::string strDoc = context.getInputValue();
    }
                                            .   .   .    .   .   .

                             恨少   分布式索引构建
1.   引擎基础知识


2.   Hadoop 工具链介绍


3.   abuild 原理


4.   bbuild 原理


5.   Hadoop 相关配置及 Job 优化




                                     .   .   .   .   .   .

                     恨少    分布式索引构建
. 思路


  abuild 利用 Hadoop Pipes 构建 A 引擎的索引, 被用于构建一淘
  的索引.abuild 索引构建分为两个过程:

       建小段索引.
       从 HDFS 上读入一个个文档, 建成许多小段索引.

       合并小段索引的元数据.
       将第一个过程创建的小段索引进行合并, 比如将 384 个小段
       索引合并成 48 个, 合并后每份索引包含 8 个段. 由于只涉及
       元数据的合并, 所以速度非常快.




                                   .   .   .   .   .   .

                    恨少   分布式索引构建
. 建小段索引示意图




             .   .   .   .   .   .
. 合并示意图




          .   .   .   .   .   .
. 一次 Hadoop 升级导致的问题




  .
  Hadoop 从 0.19.1 升级到 0.20.2
  .
  发现 abuild 每次运行都失败。最后发现是 Hadoop Pipes 新旧版
  本不兼容导致,需要修改项目的 configure.ac,让 abuild 在不同
  的环境下,链接不同版本的 Hadoop Pipes 库。
  .




                           .   .   .   .   .   .
1.   引擎基础知识


2.   Hadoop 工具链介绍


3.   abuild 原理


4.   bbuild 原理


5.   Hadoop 相关配置及 Job 优化




                                     .   .   .   .   .   .

                     恨少    分布式索引构建
. 思路


  bbuild 用于在 Hadoop 上构建 B 引擎的索引.bbuild 使用 Hadoop
  Streaming, 主要基于以下几个想法:

       效率高.
       由于 HDFS 上的原始数据已经有规律,(nid/列数) 相同的宝
       贝会放在同一个 part 里面, 并不需要进行 map sort 和
       partition 操作.

       减少外部依赖.
       索引合并可以在非 Hadoop 环境运行, 既不依赖 Java, 也不
       依赖过时的 Hadoop Pipes.



                                     .   .   .   .   .   .

                      恨少   分布式索引构建
. 构建流程



  索引构建同样分为两个过程:

    建小段索引
    每个 task 拖一部分 XML 数据到本地建索引, 完成之后将其
    放回到 HDFS 上.

    对小段索引进行物理合并
    每个 task 拖若干个小段索引到本地进行合并.bbuild 的索引
    合并不同于 abuild, 它涉及到索引的物理合并, 比较耗时.




                                .   .   .   .   .   .

                 恨少   分布式索引构建
. 建小段索引示意图




             .   .   .   .   .   .
. 合并示意图




                         .   .   .   .   .   .

          恨少   分布式索引构建
. 增量也搞分布式?




                            .   .   .   .   .   .

             恨少   分布式索引构建
1.   引擎基础知识


2.   Hadoop 工具链介绍


3.   abuild 原理


4.   bbuild 原理


5.   Hadoop 相关配置及 Job 优化




                                     .   .   .   .   .   .

                     恨少    分布式索引构建
. 程序和配置文件的分发

   小文件直接使用 file 上传.
   使用 file 上传小文件不需要额外的 put 操作, 更新比较方便.

   使用 mapred.cache.files 来 cache 大文件.
   分词包数据文件超过 1GB, 使用 mapred.cache.files 将其缓存
   在 tasktracker, 第一次启动比较慢, 以后会非常快.
   <property>
     <name>mapred.create.symlink</name>
     <value>yes</value>
   </property>

   <property>
     <name>mapred.cache.files</name>
    <value>/app/bbuild/deps/split_package#split_package</value>
   </property>


                                          .   .   .    .   .      .

                          恨少    分布式索引构建
. 独占一个节点的资源



   使用 capacity scheduler.
   capacity scheduler 将资源分为 queue, 支持独占一个节点的
   map/reduce 资源.


   配置 mapred.job.map.memory.mb.
   如果一个节点配置 10 个 map 任务, 每个 map 任务可用
   2GB 内存, 那么需要设置该值为 20GB, 这样就可以独占一个
   节点的 map 资源.




                                  .   .   .   .   .   .

                   恨少   分布式索引构建
. 关闭推测执行




  .
  mapred.map.tasks.speculative.execution=false
  .
  由于索引构建是非典型的 Hadoop task, 所有相同的任务会往相
  同的目录下写数据, 导致冲突. 因此必须将该项置为 false.
  .




                                    .   .   .   .   .   .

                     恨少   分布式索引构建
. 性能问题
  bbuild 运行之后, 集群负载会出现一些 burst. 在多进程都在处理
  大数据时, 如果大量使用 swap 会导致很糟糕的后果.




                                 .   .   .   .   .   .

                  恨少   分布式索引构建
. 合理利用 IO 和网络资源



    持续优化合并程序, 减少对内存的占用.

    文件不落地,减少磁盘和 rm 的开销

    hadoop fs -cat index.tar | tar xf - -C output
    tar -c index | hadoop fs -put - index.tar

    分解任务, 尽量让任务并行起来.
    合并倒排索引的时候, 拖正排索引数据.




                                             .      .   .   .   .   .

                            恨少     分布式索引构建
. bbuild 第一阶段耗时




                                 .   .   .   .   .   .

                  恨少   分布式索引构建
. bbuild 第二阶段耗时




                                 .   .   .   .   .   .

                  恨少   分布式索引构建
. 它山之石



    将现有程序应用在 Hadoop 上, 量大也不怕.

    对 Java M/R, Streaming, Pipes 的抉择.

    分发程序和配置文件的方法.

    Hadoop 集群上资源竞争很激烈, 注意效率.




                                       .   .   .   .   .   .

                       恨少    分布式索引构建
. The End




            谢谢大家!




                            .   .   .   .   .   .

             恨少   分布式索引构建

More Related Content

What's hot

Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Wei-Yu Chen
 
HDInsight for Microsoft Users
HDInsight for Microsoft UsersHDInsight for Microsoft Users
HDInsight for Microsoft UsersKuo-Chun Su
 
Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Wei-Yu Chen
 
Hadoop安裝 (1)
Hadoop安裝 (1)Hadoop安裝 (1)
Hadoop安裝 (1)銘鴻 陳
 
Hadoop大数据实践经验
Hadoop大数据实践经验Hadoop大数据实践经验
Hadoop大数据实践经验Hanborq Inc.
 
Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)家雋 莊
 
Zh Tw Introduction To H Base
Zh Tw Introduction To H BaseZh Tw Introduction To H Base
Zh Tw Introduction To H Basekevin liao
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理Kay Yan
 
Zh Tw Introduction To Hadoop And Hdfs
Zh Tw Introduction To Hadoop And HdfsZh Tw Introduction To Hadoop And Hdfs
Zh Tw Introduction To Hadoop And Hdfskevin liao
 
HDInsight for Hadoopers
HDInsight for HadoopersHDInsight for Hadoopers
HDInsight for HadoopersKuo-Chun Su
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Wei-Yu Chen
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocessbabel_qi
 
Zh Tw Introduction To Map Reduce
Zh Tw Introduction To Map ReduceZh Tw Introduction To Map Reduce
Zh Tw Introduction To Map Reducekevin liao
 
Zh Tw Introduction To Cloud Computing
Zh Tw Introduction To Cloud ComputingZh Tw Introduction To Cloud Computing
Zh Tw Introduction To Cloud Computingkevin liao
 
How to plan a hadoop cluster for testing and production environment
How to plan a hadoop cluster for testing and production environmentHow to plan a hadoop cluster for testing and production environment
How to plan a hadoop cluster for testing and production environmentAnna Yen
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹國昭 張
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现iammutex
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習孜羲 顏
 
Ceph Day Beijing: Optimizations on Ceph Cache Tiering
Ceph Day Beijing: Optimizations on Ceph Cache Tiering Ceph Day Beijing: Optimizations on Ceph Cache Tiering
Ceph Day Beijing: Optimizations on Ceph Cache Tiering Ceph Community
 

What's hot (20)

Hadoop 介紹 20141024
Hadoop 介紹 20141024Hadoop 介紹 20141024
Hadoop 介紹 20141024
 
Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來
 
HDInsight for Microsoft Users
HDInsight for Microsoft UsersHDInsight for Microsoft Users
HDInsight for Microsoft Users
 
Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系
 
Hadoop安裝 (1)
Hadoop安裝 (1)Hadoop安裝 (1)
Hadoop安裝 (1)
 
Hadoop大数据实践经验
Hadoop大数据实践经验Hadoop大数据实践经验
Hadoop大数据实践经验
 
Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)
 
Zh Tw Introduction To H Base
Zh Tw Introduction To H BaseZh Tw Introduction To H Base
Zh Tw Introduction To H Base
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
 
Zh Tw Introduction To Hadoop And Hdfs
Zh Tw Introduction To Hadoop And HdfsZh Tw Introduction To Hadoop And Hdfs
Zh Tw Introduction To Hadoop And Hdfs
 
HDInsight for Hadoopers
HDInsight for HadoopersHDInsight for Hadoopers
HDInsight for Hadoopers
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess
 
Zh Tw Introduction To Map Reduce
Zh Tw Introduction To Map ReduceZh Tw Introduction To Map Reduce
Zh Tw Introduction To Map Reduce
 
Zh Tw Introduction To Cloud Computing
Zh Tw Introduction To Cloud ComputingZh Tw Introduction To Cloud Computing
Zh Tw Introduction To Cloud Computing
 
How to plan a hadoop cluster for testing and production environment
How to plan a hadoop cluster for testing and production environmentHow to plan a hadoop cluster for testing and production environment
How to plan a hadoop cluster for testing and production environment
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹
 
redis 适用场景与实现
redis 适用场景与实现redis 适用场景与实现
redis 适用场景与实现
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習
 
Ceph Day Beijing: Optimizations on Ceph Cache Tiering
Ceph Day Beijing: Optimizations on Ceph Cache Tiering Ceph Day Beijing: Optimizations on Ceph Cache Tiering
Ceph Day Beijing: Optimizations on Ceph Cache Tiering
 

Viewers also liked

单元测试必知必会
单元测试必知必会单元测试必知必会
单元测试必知必会智杰 付
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统智杰 付
 
Kingso profile
Kingso profileKingso profile
Kingso profile智杰 付
 
Nyc hadoop meetup introduction to h base
Nyc hadoop meetup   introduction to h baseNyc hadoop meetup   introduction to h base
Nyc hadoop meetup introduction to h base智杰 付
 
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika AldabaLightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldabaux singapore
 

Viewers also liked (6)

单元测试必知必会
单元测试必知必会单元测试必知必会
单元测试必知必会
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统
 
Kingso profile
Kingso profileKingso profile
Kingso profile
 
Nyc hadoop meetup introduction to h base
Nyc hadoop meetup   introduction to h baseNyc hadoop meetup   introduction to h base
Nyc hadoop meetup introduction to h base
 
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika AldabaLightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
 
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job? Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
 

Similar to 分布式索引构建

Hadoop开发者入门专刊
Hadoop开发者入门专刊Hadoop开发者入门专刊
Hadoop开发者入门专刊liangxiao0315
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructurekyhpudding
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBMonster Supreme
 
選擇正確的Solution 來建置現代化的雲端資料倉儲
選擇正確的Solution 來建置現代化的雲端資料倉儲選擇正確的Solution 來建置現代化的雲端資料倉儲
選擇正確的Solution 來建置現代化的雲端資料倉儲Herman Wu
 
rebar erlang 2
rebar erlang 2rebar erlang 2
rebar erlang 2致远 郑
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》easychen
 
雲端技術的新趨勢
雲端技術的新趨勢雲端技術的新趨勢
雲端技術的新趨勢Ben Huang
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big DataKuo-Chun Su
 
Python 数据库技术第三讲
Python 数据库技术第三讲Python 数据库技术第三讲
Python 数据库技术第三讲March Liu
 
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索liu sheng
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践isnull
 
Bluemix Node-Red Part II
Bluemix Node-Red Part IIBluemix Node-Red Part II
Bluemix Node-Red Part IIJoseph Chang
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介Herman Wu
 
Mongo简介
Mongo简介Mongo简介
Mongo简介wuda0112
 
Spark introduction - In Chinese
Spark introduction - In ChineseSpark introduction - In Chinese
Spark introduction - In Chinesecolorant
 
打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsight打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsightKuo-Chun Su
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集zhen chen
 
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1Yi-Feng Tzeng
 

Similar to 分布式索引构建 (20)

Hadoop开发者入门专刊
Hadoop开发者入门专刊Hadoop开发者入门专刊
Hadoop开发者入门专刊
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructure
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDB
 
選擇正確的Solution 來建置現代化的雲端資料倉儲
選擇正確的Solution 來建置現代化的雲端資料倉儲選擇正確的Solution 來建置現代化的雲端資料倉儲
選擇正確的Solution 來建置現代化的雲端資料倉儲
 
rebar erlang 2
rebar erlang 2rebar erlang 2
rebar erlang 2
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》
 
雲端技術的新趨勢
雲端技術的新趨勢雲端技術的新趨勢
雲端技術的新趨勢
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big Data
 
Python 数据库技术第三讲
Python 数据库技术第三讲Python 数据库技术第三讲
Python 数据库技术第三讲
 
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践
 
Bluemix Node-Red Part II
Bluemix Node-Red Part IIBluemix Node-Red Part II
Bluemix Node-Red Part II
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
 
Mongo简介
Mongo简介Mongo简介
Mongo简介
 
Spark introduction - In Chinese
Spark introduction - In ChineseSpark introduction - In Chinese
Spark introduction - In Chinese
 
打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsight打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsight
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
 
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
 

分布式索引构建

  • 1. . . 分布式索引构建 恨少 一淘搜索技术部 2012 年 3 月 28 日 . . . . . . 恨少 分布式索引构建
  • 2. 1. 引擎基础知识 2. Hadoop 工具链介绍 3. abuild 原理 4. bbuild 原理 5. Hadoop 相关配置及 Job 优化 . . . . . . 恨少 分布式索引构建
  • 3. 1. 引擎基础知识 2. Hadoop 工具链介绍 3. abuild 原理 4. bbuild 原理 5. Hadoop 相关配置及 Job 优化 . . . . . . 恨少 分布式索引构建
  • 4. . 索引种类 检索 使用倒排索引,(“手机”, (宝贝 0, 宝贝 10, 宝贝 15)). 过滤和统计. 使用正排索引,((宝贝 0, (价格:1500));(宝贝 1, (价格:1800))). 返回宝贝 使用宝贝原始数据. . . . . . . 恨少 分布式索引构建
  • 5. . I’m Feeling Lucky . . . . . .
  • 6. . A 引擎索引 索引分段. 每个文档每个字段的正排索引存储在不同的文件中. . . . . . . 恨少 分布式索引构建
  • 7. . B 引擎索引 索引不分段. 每个文档的正排数据集中存储. . . . . . . 恨少 分布式索引构建
  • 9. . 淘宝商品搜索索引构建问题 商品数量巨大, 索引构建是个难题. 数亿商品 数百 GB 存放在 Hadoop 上的压缩 XML 数据 . . . . . . 恨少 分布式索引构建
  • 10. . 单机索引构建流程 目前单机建索引的流程: 拉数据. 建索引. 链式分发索引. . . . . . .
  • 11. . 单机构建缺点 建索引时间长 对两千万商品建索引耗时半小时以上. 分发索引时间长 将所有索引分发完, 需要一个小时左右. 容错能力差 索引构建时遇到硬件故障, 目前需要人工进行干预. . . . . . . 恨少 分布式索引构建
  • 12. . 更好的构建方式? . . . . . . 恨少 分布式索引构建
  • 13. . 更好的构建方式! 分布式索引构建的优点: XML 数据是分布式平台产出的, 处理起来更加方便. 节省拉数据的时间. 将构建任务进行分解, 分布式建索引, 速度更快. 将索引构建的时间减少一半. 利用 HDFS 多份拷贝, 加快索引分发速度. 将集群分成几个独立的行组, 分别进行链式拷贝. 可靠性有保障, 不会因为单台服务器硬件故障而失败. 再也不担心硬件故障了. . . . . . . 恨少 分布式索引构建
  • 14. 单机多线程 VS 多机多进程 . . . . . . 恨少 分布式索引构建
  • 15. . 形象的对比 单机构建索引时, 使用多线程建索引. 线程个数为 CPU 核数 的 1.2 倍左右. ./index_builder -c build_conf.xml -t thread_count -i input -o output -T temp -z 上百台服务器, 每台服务器很多块磁盘, 每个 task 运行在不 同的磁盘上, 减少 IO 竞争. /dump/7/hadoop/local/taskTracker/admin/jobcache /job_201204102307_552289 /attempt_201204102307_552289_m_000002_0/ . . . . . . 恨少 分布式索引构建
  • 16. . 云端小飞象 . . . . . .
  • 17. 1. 引擎基础知识 2. Hadoop 工具链介绍 3. abuild 原理 4. bbuild 原理 5. Hadoop 相关配置及 Job 优化 . . . . . . 恨少 分布式索引构建
  • 18. . Hadoop Streaming Hadoop streaming is a utility that comes with the Hadoop distribution. The utility allows you to create and run map/reduce jobs with any executable or script as the mapper and/or the reducer. For example: $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar -input myInputDirs -output myOutputDir -mapper /bin/cat -reducer /bin/wc . . . . . . 恨少 分布式索引构建
  • 19. . Hadoop Pipes Hadoop Pipes allows C++ code to use Hadoop DFS and map/reduce. Hadoop Pipes 主要缺点是: 出问题难于调试, 只能通过打印语句跟踪问题. 升级 Hadoop 时, 需要重新编译程序以链接新的 Pipes 库, 否 则可能有不兼容情况. 效率比较低,map 和 reduce 得到的都是 string 字符串, 非字 符类型需要进行一次转换. void map(HadoopPipes::MapContext& context) { std::string strDoc = context.getInputValue(); } . . . . . . 恨少 分布式索引构建
  • 20. 1. 引擎基础知识 2. Hadoop 工具链介绍 3. abuild 原理 4. bbuild 原理 5. Hadoop 相关配置及 Job 优化 . . . . . . 恨少 分布式索引构建
  • 21. . 思路 abuild 利用 Hadoop Pipes 构建 A 引擎的索引, 被用于构建一淘 的索引.abuild 索引构建分为两个过程: 建小段索引. 从 HDFS 上读入一个个文档, 建成许多小段索引. 合并小段索引的元数据. 将第一个过程创建的小段索引进行合并, 比如将 384 个小段 索引合并成 48 个, 合并后每份索引包含 8 个段. 由于只涉及 元数据的合并, 所以速度非常快. . . . . . . 恨少 分布式索引构建
  • 23. . 合并示意图 . . . . . .
  • 24. . 一次 Hadoop 升级导致的问题 . Hadoop 从 0.19.1 升级到 0.20.2 . 发现 abuild 每次运行都失败。最后发现是 Hadoop Pipes 新旧版 本不兼容导致,需要修改项目的 configure.ac,让 abuild 在不同 的环境下,链接不同版本的 Hadoop Pipes 库。 . . . . . . .
  • 25. 1. 引擎基础知识 2. Hadoop 工具链介绍 3. abuild 原理 4. bbuild 原理 5. Hadoop 相关配置及 Job 优化 . . . . . . 恨少 分布式索引构建
  • 26. . 思路 bbuild 用于在 Hadoop 上构建 B 引擎的索引.bbuild 使用 Hadoop Streaming, 主要基于以下几个想法: 效率高. 由于 HDFS 上的原始数据已经有规律,(nid/列数) 相同的宝 贝会放在同一个 part 里面, 并不需要进行 map sort 和 partition 操作. 减少外部依赖. 索引合并可以在非 Hadoop 环境运行, 既不依赖 Java, 也不 依赖过时的 Hadoop Pipes. . . . . . . 恨少 分布式索引构建
  • 27. . 构建流程 索引构建同样分为两个过程: 建小段索引 每个 task 拖一部分 XML 数据到本地建索引, 完成之后将其 放回到 HDFS 上. 对小段索引进行物理合并 每个 task 拖若干个小段索引到本地进行合并.bbuild 的索引 合并不同于 abuild, 它涉及到索引的物理合并, 比较耗时. . . . . . . 恨少 分布式索引构建
  • 29. . 合并示意图 . . . . . . 恨少 分布式索引构建
  • 30. . 增量也搞分布式? . . . . . . 恨少 分布式索引构建
  • 31. 1. 引擎基础知识 2. Hadoop 工具链介绍 3. abuild 原理 4. bbuild 原理 5. Hadoop 相关配置及 Job 优化 . . . . . . 恨少 分布式索引构建
  • 32. . 程序和配置文件的分发 小文件直接使用 file 上传. 使用 file 上传小文件不需要额外的 put 操作, 更新比较方便. 使用 mapred.cache.files 来 cache 大文件. 分词包数据文件超过 1GB, 使用 mapred.cache.files 将其缓存 在 tasktracker, 第一次启动比较慢, 以后会非常快. <property> <name>mapred.create.symlink</name> <value>yes</value> </property> <property> <name>mapred.cache.files</name> <value>/app/bbuild/deps/split_package#split_package</value> </property> . . . . . . 恨少 分布式索引构建
  • 33. . 独占一个节点的资源 使用 capacity scheduler. capacity scheduler 将资源分为 queue, 支持独占一个节点的 map/reduce 资源. 配置 mapred.job.map.memory.mb. 如果一个节点配置 10 个 map 任务, 每个 map 任务可用 2GB 内存, 那么需要设置该值为 20GB, 这样就可以独占一个 节点的 map 资源. . . . . . . 恨少 分布式索引构建
  • 34. . 关闭推测执行 . mapred.map.tasks.speculative.execution=false . 由于索引构建是非典型的 Hadoop task, 所有相同的任务会往相 同的目录下写数据, 导致冲突. 因此必须将该项置为 false. . . . . . . . 恨少 分布式索引构建
  • 35. . 性能问题 bbuild 运行之后, 集群负载会出现一些 burst. 在多进程都在处理 大数据时, 如果大量使用 swap 会导致很糟糕的后果. . . . . . . 恨少 分布式索引构建
  • 36. . 合理利用 IO 和网络资源 持续优化合并程序, 减少对内存的占用. 文件不落地,减少磁盘和 rm 的开销 hadoop fs -cat index.tar | tar xf - -C output tar -c index | hadoop fs -put - index.tar 分解任务, 尽量让任务并行起来. 合并倒排索引的时候, 拖正排索引数据. . . . . . . 恨少 分布式索引构建
  • 37. . bbuild 第一阶段耗时 . . . . . . 恨少 分布式索引构建
  • 38. . bbuild 第二阶段耗时 . . . . . . 恨少 分布式索引构建
  • 39. . 它山之石 将现有程序应用在 Hadoop 上, 量大也不怕. 对 Java M/R, Streaming, Pipes 的抉择. 分发程序和配置文件的方法. Hadoop 集群上资源竞争很激烈, 注意效率. . . . . . . 恨少 分布式索引构建
  • 40. . The End 谢谢大家! . . . . . . 恨少 分布式索引构建