狠狠撸

狠狠撸Share a Scribd company logo
贬顿贵厂元数据的独立服务和
   独立持久化存储
                            2009-8-22

罗李
Email: luoli523@gmail.com
Twitter: luoli523
主要内容
  起因

  现状


  我们的想法

  我们的实现

  后续的发展
起因
?   数据的急剧膨胀
?   文件数的不断增多
?   Block随之成倍的增长
?   内存的急剧上涨
?   内存数据结构
?   一致性保证造成的性能瓶颈
?   Meta服务依靠namenode的启停
?   部分meta数据没有持久化(block->dn)
现状
? 集群
  – 单个集群1900台机器 1T×12(2T×6)
? 数据量
  – 22.28 PB/36.98 PB 60%
? 文件数
  – 1亿左右
? Block数
  – 1.3亿左右
? Meta存储
  – 只持久化了namespace的信息到fsimage
现状
? 内存
 – 60G / 80G ~75%
? 数据结构
 – BlockMap靠内存中ref来维护block->dn的信息
? 响应
   ?   删除文件个数1100万,每天的删除操作为240万
   ?   创建文件操作900万~1200万
   ?   重命名文件数量为1050万
   ?   通过文件名获取block及其位置的操作getBlockLocations有近3亿
   ?   类似“ls”的操作有700万
新的架构
                 (Innodb on FusionIO)               BlockChecker
               (Innodb on FusionIO)
                     State Manager
                   State Manager
      Datanode        Block          File
                                                     Zookeeper
                                                    Zookeeper




   Stateless
  Namenode
                               Stateless
                              Namenode          …    Stateless
                                                    Namenode




Datanode           Datanode          Datanode
                                                …        Datanode
Namenode的改进
?   无状态NN: 针对HDFS中Namenode单点瓶颈的问题,TBFS通过无状态方式
    实现Namenode的水平扩展。为了实现无状态Namenode,需要将以前保留
    在Namenode内存中的关键数据结构部分或全部挪到第三方,并持久化保存。
    数据结构名称                                                  描述

    dir                    保存HDFS目录结构的数据结构FSDirectory(文件->块的对应关系)

    blocksMap              保存块与文件、块与datanode和datanode与块的对应关系

    datanodemap            保存datanode的storageID和对应DatanodeDescriptor的Map容器

    heartbeats             保存拥有心跳的Datanode的DatanodeDescriptor的容器

    corruptReplicas        保存损坏块的Map容器,key为Block,value为对应Datanode的DatanodeDescriptor集合

    recentInvalidateSets   保存即将删除的块的Map容器,key为Datanode的StorageID,value是块的Block集合

    excessReplicateMap     保存多余块的Map容器,key为Datanode的storageID,value是块的Block集合

                           保存少于replication数的块的数据结构,其内部维护了一个List<TreeSet<Block>>
    neededReplications
                           类型的优先级队列

    pendingReplications    保存处于replication pending状态的block,如果超时则放入TimeoutItems列表中

    leaseManager           维护写操作和追加操作租约的数据结构                                             7
狈补尘别苍辞诲别的改进(续1)
     将BlocksMap和FSDirectory在数                             dir
     据库中实现持久化保存
                                            blocksMap
                                                                          (Innodb on FusionIO)
                                                                        (Innodb on FusionIO)
                                                                              State Manager
                                                                            State Manager
                                                                Datanode              Block                   File
         heartbeats

         datanodeMap
                                 datanodeMap和heartbeats的数据从数据                                    ? 基于树状结构来描述Map和Set,比
 Stateless                       库中读取,Namenode中只是缓存                                              较直观,操作方便
  Stateless                                                                                      ? 提供了ephemeral和sequence
Namenode
    Stateless                                                                                    znode的机制,方便做成员管理和提
 Namenode                                                                                        供分布式锁服务
  Namenode                                                        ZooKeeper                      ? 提供了Watcher机制,提供对数据变
                                                                                  /              化的通知
         LeaseManger

                                                   …               namenode           datanode        blockchecker
                                                                    Zookeeper
                                                 pendin
                                    lease                       under    excess       corrupt    invalidate          group
为LeaseManager保                                     g
存全局lease信息




                                   维护under           维护excess                            维护               维护TBFS
                 维护replication                                          维护corrupt
                                   replication       replication                         invalidate       集群中
                 pending相关的                                             块相关的持
                                   相关的持久             相关的持久                               块相关的持            namenode           8
                 持久化数据                                                  久化数据
                                   化数据               化数据                                 久化数据             成员信息
Namenode的改进(续2)
?   Namenode与非心跳Datanode进行通信。Datanode实现了
    ExternalNamenodeProtocol协议,Namenode可以通过该协议与非心跳
    Datanode进行通信,即Namenode主动调用该协议提供的方法。
                                Namenode 2是Datanode
                                A的External Namenode
Namenode 1                                                 Datanode A

                Datanode
                                                               offerSerivce
                Protocol                   sendHeartbeat
                                                            ExternalNamenode
                                                                 Protocol
             ExternalDatanode
             CommandsHandle
                     r


                                                           Datanode B
Namenode 2
                Datanode
                                                               offerSerivce
                Protocol                   sendHeartbeat

                                                            ExternalNamenode
             ExternalDatanode   与原有方式一致,External                 Protocol
             CommandsHandle     Namenode向External
                     r          Datanode发送三种命令:
                                replication命令,invalidate
                                命令和recover命令                                   9
BlockChecker的引入
?   BlockChecker解决Namenode无法判断出的数据不一致的情况,主要是检测
    Block副本数是否满足期望,类似于社区版中离开安全模式(SafeMode.leave)时
    processMisReplicatedBlocks机制。为了不影响Namenode的核心逻辑,它只和
    数据库和Zookeeper交互。

?   运行方式:1. 每隔一段时间运行一次;2. 手动执行;3. Namenode下线时执行

?   典型场景:
    –   某个block的副本数小于期望值,在数据库中增加一条伪记录,触发Namenode进行检查

    –   某个block的副本数大于期望值,综合zookeeper中的记录,决定是否删除一条记录,触发
        Namenode进行检查

                (Innodb on FusionIO)       BlockChecker
              (Innodb on FusionIO)
                    State Manager
                  State Manager
        Datanode     Block         File
                                             Zookeeper
                                            Zookeeper

                                                          10
Datanode的改进
?   提供Namenode的连接/重连机制,从而提高整个系统的可用性。在以下几种
    场景下,Datanode会连接/切换目标Namenode: 1. Datanode启动时;2. 当
    前Namenode失效(异常)并超过一定时限和重试次数;3. 管理员调用切换
    命令。同一时刻一个Datanode只汇报给一个Namenode。

?   Namenode选择策略实现: AbsNameNodeSelector作为选择Namenode策略
    的接口,ConfNameNodeSelector实现了该接口。

                                                  <<AbsNameNodeSelector>>
          DataNode
Private AbsNameNodeSelector                     + selectNextNameNodeAddress()
namenodeSelector;                          调用   + refreshNameNodeList()



                                      实现


                                                selectNextNameNodeAddress : 从Name Node列表中随机选
             ConfNameNodeSelector               取一个Name Node返回给调用者,并记录下来。注意,每次调
                                                用时会将上次使用的Name Node从列表中删除,这样就避免再
      + selectNextNameNodeAddress()             次选择失效的Name Node
      + refreshNameNodeList()
                                                refreshNameNodeList: 按照策略更新Name Node列表         11
Datanode的改进(续1)
?   目前已实现的Namenode选择策略ConfNameNodeSelector需要在配置文件中做如下配
    置:
     <property>
        <name>dfs.namenode.selector</name>                                                       ConfNameNodeSelector的
        <value>org.apache.hadoop.hdfs.server.common.ConfNameNodeSelector</value>                 类路径
        <description>The policy of looking for and selecting name node</description>
       </property>

       <property>
        <name>dfs.namenode.selector.timeout</name>                                               一个Namenode失效后重连
        <value>180000</value>                                                                    的超时时间
        <description>The timeout value for retrying connection to a namenode</description>
       </property>

       <property>
        <name>dfs.namenode.rpcaddr.list</name>                                                   Namenode的列表
        <value>hdfs://dw30.kgb.sqa.cm4:51199,hdfs://dw39.kgb.sqa.cm4:51199</value>
        <description>The list of name nodes' RPC addr list, separated with comma</description>
       </property>




?   Datanode在线辅助判断机制。Datanode上线后,在zookeeper中创建一个Ephemeral
    Node,用以给Namenode判断该Datanode是否在线。该类型的Node会在Datanode下
    线后(会话失效)自动删除。如果Namenode通过datanode表中的lastupdate判断已经下
    线,但是zookeeper中还有对应的node,会将其列入怀疑对象。造成这种现象一般在
    TBFS重启初期,Namenode信息更新不及时。怀疑对象一般会在下一次更新时自动排
    除,否则就认为它已经下线。
                                                                                                                         12
流程一:顿狈启动        开始            在Data Node初始化时执行下面的逻辑,
                              会重构DataNode类的startDataNode方
时连接NN。DN                      法
需要根据选取策     N
                设置策           DN启动时设定,目前包括两方面:1. 从
略,从NN列表中         略            何处获得NN列表(包括配置文件或者
选取一个可用的                       zookeeper);2. 如何选择NN(随机或
                      Y       者根据某种权值)
NN地址建立连接,
            N   获得            在配置文件中,NN之间以逗号隔开;如
否则流程失败          NN列           果从zookeeper中读取,需要讨论接口。
                 表            该列表用List<String> NNList表示
                      Y
                              从NNList中根据选择策略选择一个
            N   取一个           Name Node,如果NNList中已经没有可
                新NN           用的,则返回失败


                      Y               将该失败的NN从NNList中
                          移除NN
                                      移除
                连接成
                 功
                          N
                                      连接成功,可以进行通信
                      Y
                结束
流程二:当前已                 开始           如果侦测到当前NN失效,则开始下面的
                                     操作
连接的NN失效,
DN重新选择NN,
                                     从现有的NNList中根据选择策略选择一
                    取一个
并进行连接               新NN
                                     个Name Node,如果已经没有NN,则
                                     试图根据既定策略重新获得列表
                N
                          Y
        Y
            是否已                      检查是否已经重新更新过,如果已经更
            更新过                      新过,说明所有NN都不可用

                N
                                     第一次更新,可以重新获得列表,如果
            获得                       失败则结束流程
            NN列
             表      Y
            N                    移除NN      将该失败的NN从NNList中
                                           移除
                        连接成
                         功
                                 N
                                           连接成功,可以进行通信
                             Y
                        结束
流程叁:手动或          开始      由管理员或者后台监控进程发起更新
                         NN列表操作
自动更新NN列表


                获得新      根据策略获得新的NN列表,如果无
                NN列表     法获取,则返回失败
           N
                   Y
               替换现有NN列
                  表      更新NNList操作




                 结束
Client的改进
? 重连机制

? 和datanode同样的机制选择NN节点




                         16
谢谢

 罗李
 Email: luoli523@gmail.com
 Twitter: luoli523

More Related Content

What's hot (8)

Track1dongsiying4
Track1dongsiying4Track1dongsiying4
Track1dongsiying4
drewz lin
?
大學部101級專題 cuda
大學部101級專題 cuda大學部101級專題 cuda
大學部101級專題 cuda
迺翔 黃
?
闯补惫补应用性能测试与分析
闯补惫补应用性能测试与分析闯补惫补应用性能测试与分析
闯补惫补应用性能测试与分析
Frank Lee
?
How to Build Cloud Storage Service Systems
How to Build Cloud Storage Service SystemsHow to Build Cloud Storage Service Systems
How to Build Cloud Storage Service Systems
Hanborq Inc.
?
20130626联动优势数据访问层顿础尝架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层顿础尝架构和实践5(刘胜)数据分片和分页20130626联动优势数据访问层顿础尝架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层顿础尝架构和实践5(刘胜)数据分片和分页
liu sheng
?
实习报告
实习报告实习报告
实习报告
PengFan
?
Exadata training
Exadata trainingExadata training
Exadata training
Louis liu
?
Track1dongsiying4
Track1dongsiying4Track1dongsiying4
Track1dongsiying4
drewz lin
?
大學部101級專題 cuda
大學部101級專題 cuda大學部101級專題 cuda
大學部101級專題 cuda
迺翔 黃
?
闯补惫补应用性能测试与分析
闯补惫补应用性能测试与分析闯补惫补应用性能测试与分析
闯补惫补应用性能测试与分析
Frank Lee
?
How to Build Cloud Storage Service Systems
How to Build Cloud Storage Service SystemsHow to Build Cloud Storage Service Systems
How to Build Cloud Storage Service Systems
Hanborq Inc.
?
20130626联动优势数据访问层顿础尝架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层顿础尝架构和实践5(刘胜)数据分片和分页20130626联动优势数据访问层顿础尝架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层顿础尝架构和实践5(刘胜)数据分片和分页
liu sheng
?
实习报告
实习报告实习报告
实习报告
PengFan
?
Exadata training
Exadata trainingExadata training
Exadata training
Louis liu
?

Viewers also liked (18)

8.7研討會(管理才能) 詹翔霖教授
8.7研討會(管理才能) 詹翔霖教授8.7研討會(管理才能) 詹翔霖教授
8.7研討會(管理才能) 詹翔霖教授
文化大学
?
EVID?NCIAS DA EXIST?NCIA DE DEUS
EVID?NCIAS DA EXIST?NCIA DE DEUSEVID?NCIAS DA EXIST?NCIA DE DEUS
EVID?NCIAS DA EXIST?NCIA DE DEUS
Nilson Alves
?
Happy New Year Worksheet for kids
Happy New Year Worksheet for kidsHappy New Year Worksheet for kids
Happy New Year Worksheet for kids
Reading Kingdom
?
Номер 83
Номер 83Номер 83
Номер 83
randevuideya
?
Genaral Configuration 8600 Nortel
Genaral Configuration 8600 NortelGenaral Configuration 8600 Nortel
Genaral Configuration 8600 Nortel
ELI KENDEL ??? ????
?
838.5 3 A Floorplan
838.5  3 A Floorplan838.5  3 A Floorplan
838.5 3 A Floorplan
nelward
?
8638862niilmel helheenii daalgavariin barian tegsh
8638862niilmel helheenii daalgavariin  barian tegsh8638862niilmel helheenii daalgavariin  barian tegsh
8638862niilmel helheenii daalgavariin barian tegsh
zaluu_medleg
?
87 paper battery
87 paper battery87 paper battery
87 paper battery
muni kanth
?
86 Cumplea?os de José Saramago86 Cumplea?os de José Saramago
86 Cumplea?os de José Saramago
Fermín Sánchez López
?
85. transformando nuestro rincon de lecturas85. transformando nuestro rincon de lecturas
85. transformando nuestro rincon de lecturas
dec-admin
?
8 2 Notes A
8 2 Notes A8 2 Notes A
8 2 Notes A
mbetzel
?
8.4.1capacitorinseries&Parallel
8.4.1capacitorinseries&Parallel8.4.1capacitorinseries&Parallel
8.4.1capacitorinseries&Parallel
Talia Carbis
?
84 86 9084 86 90
84 86 90
dwsutherland
?
86   glória a deus86   glória a deus
86 glória a deus
Pr. Welfany Nolasco Rodrigues
?
85 pmk 03_201285 pmk 03_2012
85 pmk 03_2012
davidwijaya1986
?
8.7研討會(管理才能) 詹翔霖教授
8.7研討會(管理才能) 詹翔霖教授8.7研討會(管理才能) 詹翔霖教授
8.7研討會(管理才能) 詹翔霖教授
文化大学
?
EVID?NCIAS DA EXIST?NCIA DE DEUS
EVID?NCIAS DA EXIST?NCIA DE DEUSEVID?NCIAS DA EXIST?NCIA DE DEUS
EVID?NCIAS DA EXIST?NCIA DE DEUS
Nilson Alves
?
Happy New Year Worksheet for kids
Happy New Year Worksheet for kidsHappy New Year Worksheet for kids
Happy New Year Worksheet for kids
Reading Kingdom
?
838.5 3 A Floorplan
838.5  3 A Floorplan838.5  3 A Floorplan
838.5 3 A Floorplan
nelward
?
8638862niilmel helheenii daalgavariin barian tegsh
8638862niilmel helheenii daalgavariin  barian tegsh8638862niilmel helheenii daalgavariin  barian tegsh
8638862niilmel helheenii daalgavariin barian tegsh
zaluu_medleg
?
86 Cumplea?os de José Saramago86 Cumplea?os de José Saramago
86 Cumplea?os de José Saramago
Fermín Sánchez López
?
85. transformando nuestro rincon de lecturas85. transformando nuestro rincon de lecturas
85. transformando nuestro rincon de lecturas
dec-admin
?
8 2 Notes A
8 2 Notes A8 2 Notes A
8 2 Notes A
mbetzel
?
8.4.1capacitorinseries&Parallel
8.4.1capacitorinseries&Parallel8.4.1capacitorinseries&Parallel
8.4.1capacitorinseries&Parallel
Talia Carbis
?
84 86 9084 86 90
84 86 90
dwsutherland
?
85 pmk 03_201285 pmk 03_2012
85 pmk 03_2012
davidwijaya1986
?

Similar to 贬顿贵厂元数据的独立服务和 独立持久化存储 -hadoop2011-淘宝 (20)

罢补辞产补辞图片存储与肠诲苍系统到服务
罢补辞产补辞图片存储与肠诲苍系统到服务罢补辞产补辞图片存储与肠诲苍系统到服务
罢补辞产补辞图片存储与肠诲苍系统到服务
Wensong Zhang
?
淘宝对象存储与颁诲苍系统到服务
淘宝对象存储与颁诲苍系统到服务淘宝对象存储与颁诲苍系统到服务
淘宝对象存储与颁诲苍系统到服务
drewz lin
?
搁别诲颈蝉分享
搁别诲颈蝉分享搁别诲颈蝉分享
搁别诲颈蝉分享
yiihsia
?
开源+自主开发 - 淘宝软件基础设施构建实践
开源+自主开发  - 淘宝软件基础设施构建实践开源+自主开发  - 淘宝软件基础设施构建实践
开源+自主开发 - 淘宝软件基础设施构建实践
Wensong Zhang
?
颁补蝉蝉补苍诲谤补介绍.辫辫迟
颁补蝉蝉补苍诲谤补介绍.辫辫迟颁补蝉蝉补苍诲谤补介绍.辫辫迟
颁补蝉蝉补苍诲谤补介绍.辫辫迟
james tong
?
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案
cao jincheng
?
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
Kay Yan
?
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
airsex
?
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
Joshua Zhu
?
Hic2011
Hic2011Hic2011
Hic2011
baggioss
?
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
TrendProgContest13
?
新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum
锐 张
?
Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02
lovingprince58
?
淘宝图片存储与颁诲苍系统
淘宝图片存储与颁诲苍系统淘宝图片存储与颁诲苍系统
淘宝图片存储与颁诲苍系统
Dai Jun
?
罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统
Wensong Zhang
?
罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统
智杰 付
?
罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统
Michael Zhang
?
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展
yp_fangdong
?
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计
aleafs
?
罢补辞产补辞图片存储与肠诲苍系统到服务
罢补辞产补辞图片存储与肠诲苍系统到服务罢补辞产补辞图片存储与肠诲苍系统到服务
罢补辞产补辞图片存储与肠诲苍系统到服务
Wensong Zhang
?
淘宝对象存储与颁诲苍系统到服务
淘宝对象存储与颁诲苍系统到服务淘宝对象存储与颁诲苍系统到服务
淘宝对象存储与颁诲苍系统到服务
drewz lin
?
搁别诲颈蝉分享
搁别诲颈蝉分享搁别诲颈蝉分享
搁别诲颈蝉分享
yiihsia
?
开源+自主开发 - 淘宝软件基础设施构建实践
开源+自主开发  - 淘宝软件基础设施构建实践开源+自主开发  - 淘宝软件基础设施构建实践
开源+自主开发 - 淘宝软件基础设施构建实践
Wensong Zhang
?
颁补蝉蝉补苍诲谤补介绍.辫辫迟
颁补蝉蝉补苍诲谤补介绍.辫辫迟颁补蝉蝉补苍诲谤补介绍.辫辫迟
颁补蝉蝉补苍诲谤补介绍.辫辫迟
james tong
?
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案
cao jincheng
?
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
Kay Yan
?
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
airsex
?
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
Joshua Zhu
?
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
TrendProgContest13
?
新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum
锐 张
?
Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02
lovingprince58
?
淘宝图片存储与颁诲苍系统
淘宝图片存储与颁诲苍系统淘宝图片存储与颁诲苍系统
淘宝图片存储与颁诲苍系统
Dai Jun
?
罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统
Wensong Zhang
?
罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统
智杰 付
?
罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统罢补辞产补辞海量图片存储与肠诲苍系统
罢补辞产补辞海量图片存储与肠诲苍系统
Michael Zhang
?
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展
yp_fangdong
?
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计
aleafs
?

贬顿贵厂元数据的独立服务和 独立持久化存储 -hadoop2011-淘宝

  • 1. 贬顿贵厂元数据的独立服务和 独立持久化存储 2009-8-22 罗李 Email: luoli523@gmail.com Twitter: luoli523
  • 2. 主要内容 起因 现状 我们的想法 我们的实现 后续的发展
  • 3. 起因 ? 数据的急剧膨胀 ? 文件数的不断增多 ? Block随之成倍的增长 ? 内存的急剧上涨 ? 内存数据结构 ? 一致性保证造成的性能瓶颈 ? Meta服务依靠namenode的启停 ? 部分meta数据没有持久化(block->dn)
  • 4. 现状 ? 集群 – 单个集群1900台机器 1T×12(2T×6) ? 数据量 – 22.28 PB/36.98 PB 60% ? 文件数 – 1亿左右 ? Block数 – 1.3亿左右 ? Meta存储 – 只持久化了namespace的信息到fsimage
  • 5. 现状 ? 内存 – 60G / 80G ~75% ? 数据结构 – BlockMap靠内存中ref来维护block->dn的信息 ? 响应 ? 删除文件个数1100万,每天的删除操作为240万 ? 创建文件操作900万~1200万 ? 重命名文件数量为1050万 ? 通过文件名获取block及其位置的操作getBlockLocations有近3亿 ? 类似“ls”的操作有700万
  • 6. 新的架构 (Innodb on FusionIO) BlockChecker (Innodb on FusionIO) State Manager State Manager Datanode Block File Zookeeper Zookeeper Stateless Namenode Stateless Namenode … Stateless Namenode Datanode Datanode Datanode … Datanode
  • 7. Namenode的改进 ? 无状态NN: 针对HDFS中Namenode单点瓶颈的问题,TBFS通过无状态方式 实现Namenode的水平扩展。为了实现无状态Namenode,需要将以前保留 在Namenode内存中的关键数据结构部分或全部挪到第三方,并持久化保存。 数据结构名称 描述 dir 保存HDFS目录结构的数据结构FSDirectory(文件->块的对应关系) blocksMap 保存块与文件、块与datanode和datanode与块的对应关系 datanodemap 保存datanode的storageID和对应DatanodeDescriptor的Map容器 heartbeats 保存拥有心跳的Datanode的DatanodeDescriptor的容器 corruptReplicas 保存损坏块的Map容器,key为Block,value为对应Datanode的DatanodeDescriptor集合 recentInvalidateSets 保存即将删除的块的Map容器,key为Datanode的StorageID,value是块的Block集合 excessReplicateMap 保存多余块的Map容器,key为Datanode的storageID,value是块的Block集合 保存少于replication数的块的数据结构,其内部维护了一个List<TreeSet<Block>> neededReplications 类型的优先级队列 pendingReplications 保存处于replication pending状态的block,如果超时则放入TimeoutItems列表中 leaseManager 维护写操作和追加操作租约的数据结构 7
  • 8. 狈补尘别苍辞诲别的改进(续1) 将BlocksMap和FSDirectory在数 dir 据库中实现持久化保存 blocksMap (Innodb on FusionIO) (Innodb on FusionIO) State Manager State Manager Datanode Block File heartbeats datanodeMap datanodeMap和heartbeats的数据从数据 ? 基于树状结构来描述Map和Set,比 Stateless 库中读取,Namenode中只是缓存 较直观,操作方便 Stateless ? 提供了ephemeral和sequence Namenode Stateless znode的机制,方便做成员管理和提 Namenode 供分布式锁服务 Namenode ZooKeeper ? 提供了Watcher机制,提供对数据变 / 化的通知 LeaseManger … namenode datanode blockchecker Zookeeper pendin lease under excess corrupt invalidate group 为LeaseManager保 g 存全局lease信息 维护under 维护excess 维护 维护TBFS 维护replication 维护corrupt replication replication invalidate 集群中 pending相关的 块相关的持 相关的持久 相关的持久 块相关的持 namenode 8 持久化数据 久化数据 化数据 化数据 久化数据 成员信息
  • 9. Namenode的改进(续2) ? Namenode与非心跳Datanode进行通信。Datanode实现了 ExternalNamenodeProtocol协议,Namenode可以通过该协议与非心跳 Datanode进行通信,即Namenode主动调用该协议提供的方法。 Namenode 2是Datanode A的External Namenode Namenode 1 Datanode A Datanode offerSerivce Protocol sendHeartbeat ExternalNamenode Protocol ExternalDatanode CommandsHandle r Datanode B Namenode 2 Datanode offerSerivce Protocol sendHeartbeat ExternalNamenode ExternalDatanode 与原有方式一致,External Protocol CommandsHandle Namenode向External r Datanode发送三种命令: replication命令,invalidate 命令和recover命令 9
  • 10. BlockChecker的引入 ? BlockChecker解决Namenode无法判断出的数据不一致的情况,主要是检测 Block副本数是否满足期望,类似于社区版中离开安全模式(SafeMode.leave)时 processMisReplicatedBlocks机制。为了不影响Namenode的核心逻辑,它只和 数据库和Zookeeper交互。 ? 运行方式:1. 每隔一段时间运行一次;2. 手动执行;3. Namenode下线时执行 ? 典型场景: – 某个block的副本数小于期望值,在数据库中增加一条伪记录,触发Namenode进行检查 – 某个block的副本数大于期望值,综合zookeeper中的记录,决定是否删除一条记录,触发 Namenode进行检查 (Innodb on FusionIO) BlockChecker (Innodb on FusionIO) State Manager State Manager Datanode Block File Zookeeper Zookeeper 10
  • 11. Datanode的改进 ? 提供Namenode的连接/重连机制,从而提高整个系统的可用性。在以下几种 场景下,Datanode会连接/切换目标Namenode: 1. Datanode启动时;2. 当 前Namenode失效(异常)并超过一定时限和重试次数;3. 管理员调用切换 命令。同一时刻一个Datanode只汇报给一个Namenode。 ? Namenode选择策略实现: AbsNameNodeSelector作为选择Namenode策略 的接口,ConfNameNodeSelector实现了该接口。 <<AbsNameNodeSelector>> DataNode Private AbsNameNodeSelector + selectNextNameNodeAddress() namenodeSelector; 调用 + refreshNameNodeList() 实现 selectNextNameNodeAddress : 从Name Node列表中随机选 ConfNameNodeSelector 取一个Name Node返回给调用者,并记录下来。注意,每次调 用时会将上次使用的Name Node从列表中删除,这样就避免再 + selectNextNameNodeAddress() 次选择失效的Name Node + refreshNameNodeList() refreshNameNodeList: 按照策略更新Name Node列表 11
  • 12. Datanode的改进(续1) ? 目前已实现的Namenode选择策略ConfNameNodeSelector需要在配置文件中做如下配 置: <property> <name>dfs.namenode.selector</name> ConfNameNodeSelector的 <value>org.apache.hadoop.hdfs.server.common.ConfNameNodeSelector</value> 类路径 <description>The policy of looking for and selecting name node</description> </property> <property> <name>dfs.namenode.selector.timeout</name> 一个Namenode失效后重连 <value>180000</value> 的超时时间 <description>The timeout value for retrying connection to a namenode</description> </property> <property> <name>dfs.namenode.rpcaddr.list</name> Namenode的列表 <value>hdfs://dw30.kgb.sqa.cm4:51199,hdfs://dw39.kgb.sqa.cm4:51199</value> <description>The list of name nodes' RPC addr list, separated with comma</description> </property> ? Datanode在线辅助判断机制。Datanode上线后,在zookeeper中创建一个Ephemeral Node,用以给Namenode判断该Datanode是否在线。该类型的Node会在Datanode下 线后(会话失效)自动删除。如果Namenode通过datanode表中的lastupdate判断已经下 线,但是zookeeper中还有对应的node,会将其列入怀疑对象。造成这种现象一般在 TBFS重启初期,Namenode信息更新不及时。怀疑对象一般会在下一次更新时自动排 除,否则就认为它已经下线。 12
  • 13. 流程一:顿狈启动 开始 在Data Node初始化时执行下面的逻辑, 会重构DataNode类的startDataNode方 时连接NN。DN 法 需要根据选取策 N 设置策 DN启动时设定,目前包括两方面:1. 从 略,从NN列表中 略 何处获得NN列表(包括配置文件或者 选取一个可用的 zookeeper);2. 如何选择NN(随机或 Y 者根据某种权值) NN地址建立连接, N 获得 在配置文件中,NN之间以逗号隔开;如 否则流程失败 NN列 果从zookeeper中读取,需要讨论接口。 表 该列表用List<String> NNList表示 Y 从NNList中根据选择策略选择一个 N 取一个 Name Node,如果NNList中已经没有可 新NN 用的,则返回失败 Y 将该失败的NN从NNList中 移除NN 移除 连接成 功 N 连接成功,可以进行通信 Y 结束
  • 14. 流程二:当前已 开始 如果侦测到当前NN失效,则开始下面的 操作 连接的NN失效, DN重新选择NN, 从现有的NNList中根据选择策略选择一 取一个 并进行连接 新NN 个Name Node,如果已经没有NN,则 试图根据既定策略重新获得列表 N Y Y 是否已 检查是否已经重新更新过,如果已经更 更新过 新过,说明所有NN都不可用 N 第一次更新,可以重新获得列表,如果 获得 失败则结束流程 NN列 表 Y N 移除NN 将该失败的NN从NNList中 移除 连接成 功 N 连接成功,可以进行通信 Y 结束
  • 15. 流程叁:手动或 开始 由管理员或者后台监控进程发起更新 NN列表操作 自动更新NN列表 获得新 根据策略获得新的NN列表,如果无 NN列表 法获取,则返回失败 N Y 替换现有NN列 表 更新NNList操作 结束
  • 17. 谢谢 罗李 Email: luoli523@gmail.com Twitter: luoli523