java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2629|回复: 0

《大规模分布式存储系统》第13章 大数据【13.5】

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2040

    主题

    3698

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66476

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-3-20 19:45:30 | 显示全部楼层 |阅读模式
    13.5 实时分析7 _! K7 }& z# E/ _
    海量数据离线分析对于MapReduce这样的批处理系统挑战并不大,如果要求实
    " h  J5 d3 N; l% w6 k' h( A时,又分为两种情况:如果查询模式单一,那么,可以通过MapReduce预处理后将最# F$ R5 w$ Q0 R
    终结果导入到在线系统提供实时查询;如果查询模式复杂,例如涉及多个列任意组
      R: j. _5 O( v合查询,那么,只能通过实时分析系统解决。实时分析系统融合了并行数据库和云
    : o( K. ^' C5 G+ H- W  f; Q计算这两类技术,能够从海量数据中快速分析出汇总结果。$ L; L8 n; w, D% x$ g! r' B
    13.5.1 MPP架构
    7 ~; b' ]3 w$ }/ x+ Y并行数据库往往采用MPP(Massively Parallel Processing,大规模并行处理)架
    1 O  B4 U% v1 Q% R构。MPP架构是一种不共享的结构,每个节点可以运行自己的操作系统、数据库! X, l* J0 j" N7 h7 K' P9 q
    等。每个节点内的CPU不能访问另一个节点的内存,节点之间的信息交互是通过节
    # t# u' i, v# }: F0 Z点互联网络实现的。
    6 E4 L1 }4 F6 |8 i! X如图13-9所示,将数据分布到多个节点,每个节点扫描本地数据,并由Merge操/ Q1 I6 B3 B: Q
    作符执行结果汇总。
    2 ~& w" A& c: Q$ v+ v图 13-9 MPP Merge操作符( E/ P# _* h# t: v
    常见的数据分布算法有两种:+ q; Z; t7 r1 j3 v9 N) ~/ ]9 _" \$ U9 [/ [& [
    ●范围分区(Range partitioning):按照范围划分数据。
    # y9 q" v6 Q; a8 V●哈希分区(Hashing):根据哈希函数计算结果将每个元组分配给相应的节0 M% a' n+ c& q6 u0 _
    点。
    9 a# A4 V9 }( J/ o8 k( J9 C$ |0 mMerge操作符:系统中存在一个或者多个合并节点,它会发送命令给各个数据分7 _; z: n, B0 `6 _4 r8 D( O
    片请求相应的数据,每个数据分片所在的节点扫描本地数据,排序后回复合并节
    3 |4 `7 d2 O' y  y( F. n点,由合并节点通过merge操作符执行数据汇总。Merge操作符是一个统称,涉及的
    0 ]" p" [4 T& h% p$ \4 A# c操作可能是limit、order by、group by、join等。这个过程相当于执行一个Reduce任务. z  ]) S6 @. O' V2 {" r. P" O  w2 q+ G
    个数为1的MapReduce作业,不同的是,这里不需要考虑执行过程中服务器出现故障, S3 e/ Z/ u+ v4 s
    的情况。
    # ?8 m7 N8 |- v, V. E+ |# L如果Merge节点处理的数据量特别大,可以通过Split操作符将数据划分到多个节
    9 m; t1 L" S8 U7 ^7 K; M; I8 d点,每个节点对一部分数据执行group by、join等操作后再合并最终结果。
    ! W5 F5 C/ x/ ?6 E4 S- T  w如图13-10,假如需要执行"select*from A,B where A.x=B.y",可以分别根据A.x和: w. e/ C) _+ k
    B.x的哈希值将表A和B划分为A0、A1以及B0、B1。由两个节点分别对A0、B0以及
    " [: B( R, i% Q- BA1、B1执行join操作后再合并join结果。
    4 c3 P4 g# G/ B3 u图 13-10 MPP Split操作符
    0 \  I: N- X' x% T+ Y并行数据库的SQL查询和MapReduce计算有些类似,可以认为MapReduce模型是
    0 a' k0 ~9 f! ]; E) I一种更高层次的抽象。由于考虑问题的角度不同,并行数据库处理的SQL查询执行时7 H4 F- C; ?* U3 `
    间通常很短,出现异常时整个操作重做即可,不需要像MapReduce实现那样引入一个* [: n5 ^/ _: D4 d: O9 \9 B
    主控节点管理计算节点,监控计算节点故障,启动备份任务等。
      p0 y4 U8 N. o$ v13.5.2 EMC Greenplum
    6 p  P: \0 E6 VGreenplum是EMC公司研发的一款采用MPP架构的OLAP产品,底层基于开源的
    4 K; X$ J: |) T: o5 oPostgreSQL数据库。
    4 D& V" o; }6 D5 j. b1.整体架构
    " E. B4 r' y4 v2 o4 V3 W如图13-11,Greenplum系统主要包含两种角色:Master服务器(Master Server), ~: {" A  r; s1 M& p- P
    和Segment服务器(Segment Server)。在Greenplum中每个表都是分布在所有节点上  j$ H. e. V" o3 ?4 l
    的。Master服务器首先对表的某个或多个列进行哈希运算,然后根据哈希结果将表的
    $ t  {4 ~& V* m. |' y数据分布到Segment服务器中。整个过程中Master服务器不存放任何用户数据,只是# l4 b6 @+ x" c9 V8 j3 a( K) X
    对客户端进行访问控制和存储表分布逻辑的元数据。' e* y# o! L9 h( ]; A9 \6 U
    图 13-11 Greenplum整体架构9 k/ `. E! g- ?3 k& O, T
    Greenplum支持两种访问方式:SQL和MapReduce。用户将SQL操作语句发送给& y5 u9 Y& d  k
    Master服务器,由Master服务器执行词法分析、语法分析,生成查询计划,并将查询) P  h$ I& R8 h1 s& ^
    请求分发给多台Segment服务器。每个Segment服务器返回部分结果后,Master服务器; m5 e) ]+ r8 L+ s+ |( X4 ?. W+ O
    会进行聚合并将最终结果返回给用户。除了高效查询,Greenplum还支持通过数据的0 @+ Z; K8 N+ c4 K# D
    并行装载,将外部数据并行装载到所有的Segement服务器。: q! B) t. g5 d
    2.并行查询优化器! d7 g, p& C( ^& p# V- p% m. B# a
    Greenplum的并行查询优化器负责将用户的SQL或者MapReduce请求转化为物理
    - ~0 b! T, ^. G; r! a* G, @; b( j4 [执行计划。Greenplum采用基于代价的查询优化算法(cost-based optimization),从各
    , H, v: C- O4 J# M种可能的查询计划中选择一个代价最小的。Greenplum优化器会考虑集群全局统计信! L' w( f- V- ]
    息,例如数据分布,另外,除了考虑单机执行的CPU、内存资源消耗,还需要考虑: }0 k4 `, J& \7 _1 |
    数据的网络传输开销。+ U  `  y! y; W5 x
    Greenplum除了生成传统关系数据库的物理运算符,包括表格扫描(Scan)、过
    ) l; v3 S0 b/ K# f% G" [滤(Filter)、聚集(Aggregation)、排序(Sort)、联表(Join),还会生成一些并! v7 b1 T# O. y6 r! N% X
    行运算符,用来描述查询执行过程中如何在节点之间传输数据。  Z9 w8 `- O7 E- P, v
    ●广播(Broadcast,N:N):每个计算节点将目标数据发送给所有其他节点。
    8 j1 E0 S3 Y; y8 @  G7 T, P% s●重新分布(Redistribute,N:N):类似MapReduce中的shuffle过程,每个计算节
    + Q) p# ]! p# c+ `/ X% a4 f点将目标数据重新哈希后分散到所有其他节点。
    * y( V/ a5 p# q. F! N●汇总(Gather,N:1):所有的计算节点将目标数据发送给某个节点(一般为
    / m% k& d  Q" s/ a2 SMaster服务器)。, A) v4 F) D6 J, k4 Y
    图13-12中有四张表格:订单信息表(orders),订单项表(lineitem),顾客信
    . j( A8 A+ c$ ~/ |6 B; @息表(customer)以及顾客国籍表(nation)。其中,orders表记录了订单的基本信
    * X8 r6 L4 t% X% X2 Z息,包括订单主键(o_orderkey)、顾客主键(o_custkey)和订单发生日期
    7 N* ^6 o! M" F3 n9 T! K% a(o_orderdate);lineitem表记录了订单项信息,包括订单主键(l_orderkey)和订单
    : u5 s8 U# R- U  M1 @金额(l_price);customer表记录了顾客的基本信息,包括顾客主键(c_custkey)和( ~7 p- e) A% C9 ?
    顾客国籍主键(c_nationkey);nation表记录了顾客的国籍信息,包括国籍主键( ?1 [9 {2 f+ y- L! H1 Y
    (n_nationkey)和国籍名称(n_name)。Orders表和lineitem表通过订单主键关联,
    / {. ^5 b4 O9 m) |5 m  w; Borders表和customer表通过顾客主键关联,customer表和nation通过国籍主键关联。左2 c7 Y: H  U  I: U" }
    边的SQL语句查询订单发生日期在1994年8月1日开始三个月内的所有订单,按照顾客
    ) P2 h( K; B- ^* N1 j分组,计算每个分组的所有订单交易额,并按照交易额逆序排列。在右边的物理查7 S: R, K0 s# c: M+ }! ^5 g7 C
    询计划中,首先分别对lineitem和orders,custom和nation执行联表操作,联表后生成- I- y" m. k' T  S0 M5 `  O& f* [
    的结果分别记为Join_table1和Join_table2。接着,再对Join_table1和Join_table2执行联; z3 H5 D) E2 ?- q  A% Y; j
    表操作。其中,custom和nation联表时会将nation表格的数据广播(Broadcast)到所有
    ) K* M& o8 r7 n% f! _9 l( z, s的计算节点(共4个);Join_table1和Join_table2联表时会将Join_table1按照Join列9 h. G+ u6 z% A/ I
    (o_custkey)哈希后重新分布(Redistribute)到所有的计算节点。最后,每个计算节8 b# d, e5 H" d. h  U
    点都有一部分Join_table1和Join_table2的数据,且Join列(o_custkey以及c_custkey)相
    : e) V/ V3 \! e$ ~" a& y) K( @1 H同的数据分布在同一个计算节点,每个计算节点分别执行Hash Join、HashAggregate8 {  I% j0 g# ~9 W( ^/ c3 G
    以及Sort操作。最后,将每个计算节点上的部分结果汇总(Gather)到Master服务
    , ^0 |4 L( r9 e7 E器,整个SQL语句执行完成。
    * @. N& O( r* X  X( r% ?/ U图 13-12 Greenplum查询优化示例: y( c% y8 `1 v% p& [. V
    13.5.3 HP Vertica% u+ V" J7 F9 `  L. I6 Q
    Vertica是Michael Stonebraker的学术研究项目C-Store的商业版本,并最终被惠普
    . O" d9 Z+ Q1 V; U1 P3 }公司收购。Vertica在架构上与OceanBase有相似之处,这里介绍其中一些有趣的思# p( E: p2 ~0 a: J
    想。
    9 r- G. P# B2 j% h% p" h  o1.混合存储模型
    5 d# c/ b3 Q% B7 o5 O, S0 \Vertica的数据包含两个部分:ROS(Read-Optimized Storage)以及WOS(Write-, o# L/ p2 H; [: Z
    Optimized Storage),WOS的数据在内存中且不排序和加索引,ROS的数据在磁盘中% d8 Z" @: `) t
    有序且压缩存储。后台的"TUPLE MOVER"会不断地将数据从WOS读出并往ROS更新
    $ k! Q6 f4 M* G/ w2 B(同时完成排序和索引)。Vertica的这种设计和OceanBase很相似,ROS对应+ Q1 F" H4 \: i# q- \
    OceanBase中的ChunkServer,WOS对应OceanBase中的UpdateServer。由于后台采
    $ o/ }% [/ `" \2 x3 _用"BULK"的方式批量更新,性能非常好。6 v3 U! b- K$ Y0 P+ @5 H1 U
    2.多映射(Projections)存储
    - X' d7 C  M% _- F3 g7 }3 b& d2 rVertica没有采用传统关系数据库的B树索引,而是冗余存储一张表格的多个视0 `" D$ r. F. U  @7 A, i
    图,定义为映射。& `. M8 D$ E/ T4 H4 q+ V# }1 P
    每个映射包含表格的部分列,可以分别对不同的映射定义不同的排序主键。如
    0 A2 Z( _# V* I! ?. e* n图13-13所示,系统中有一张表格逻辑上包含5列<A,B,C,D,E>,物理存储成三个映
    . O8 r. ?; ^# k5 K射,分别为:Projection1(A,B,C,主键为<A,B>),Projection2(A,B,C,主键为<+ k3 E. B( P8 Y7 R
    B,A>)和Projection3(B,D,E,主键为<B>)。
    4 A7 b9 {, B+ ~! r7 W* S8 S图 13-13 vertica projections示例
    1 v5 j1 I0 w2 p; I! a) r7 g; va)"select A,B,C from table where A=1"=>查询Projection1
    % z9 V' Z/ w7 w, V# sb)"select A,B,C from table where B=1"=>查询Projection27 z: ^5 d5 w6 N2 C5 \  h8 {) V, o- W
    c)"select B,D from table where B=1"=>查询Projection3% c( n  }- @& _7 b9 ]9 ]* x
    Vertica通常维护多个不同排序的有重叠的映射,尽量使得每个查询的数据只来自" L) K7 i- z4 c+ h" B- M5 O
    一个映射,以提高查询性能。为了支持任意列查询,需要保证每个列至少在一个映
    $ A0 [& G* E$ g+ A9 l+ {9 d射中出现。
    1 K/ ^: G  N# @% v& b) ~& I3.列式存储
    % L  F5 {! r' K9 h& ^2 vVertica中的每一列数据独立存储在磁盘中的连续块上。查询数据时,Vertica只需
    3 ^1 p! d2 Y' V) ]% T( V8 Y要读取那些需要的列,而不是被选择的行的所有的列数据。! ^* }5 _0 c$ t' @# Y1 ^
    4.压缩技术
    & U) D4 j) Q$ n( l) C  \& AVertica根据数据类型、基数(可能的取值个数)、排序自动对数据进行压缩,从
    ! I: U' N1 X) K而最小化每列占用的空间。常用的压缩算法包括:
    - E2 R4 h1 F% R- M* M2 N+ r5 A; Y. N0 L●Run Length Encoding:列类型为整数,基数较小且有序;8 j, Z1 a5 O4 H0 ]% b$ T% n4 M
    ●位图索引:列类型为整数,基数较小;7 V0 ^+ u. \: a/ a0 W9 G+ Y) ]. |
    ●按块字典压缩:列类型为字符串且基数较小;5 g3 R$ B( L, q# n
    ●LZ通用压缩算法:其他列值特征不明显的场景。
    * W3 S, Y$ l  o7 [* c0 i基于列的压缩由于同样的数据类型和相同的取值范围,通常会大幅度提高压缩# U2 H) B+ @  ?$ _2 `
    效果。另外,vertica还支持直接在压缩后的数据上做运算。
    2 v# [7 y4 Y3 h' H9 I13.5.4 Google Dremel' |; q; S& a/ t0 A4 I/ B8 M6 Q
    Google Dremel是Google的实时分析系统,可以扩展到上千台机器规模,处理PB
    5 C! [7 R" S6 M级别的数据。Dremel还是Google Bigquery服务的底层存储和查询引擎。相比传统的并& M! e( a5 N! z- m  B
    行数据库,Dremel的优势在于可扩展性,磁盘的顺序读取速度在100MB/s上下,而
    " L8 s/ z. B. M' F9 b. rDremel能够在1秒内处理1TB的数据,即使压缩率为10:1,也至少需要1000个磁盘并
    4 R& u- E" x# r, p7 @" u发读。/ x( i" W4 {8 O
    1.系统架构5 d0 M8 X2 `8 _5 T; Z1 H
    Dremel系统融合了并行数据库和Web搜索技术。首先,它借鉴了Web搜索中  H1 e4 T' N. y$ ?9 @5 P$ b* R
    的“查询树”的概念,将一个巨大复杂的查询,分割成大量较小的查询,使其能并发
    / G6 L4 ^* o' t4 ^9 }" O% @地在大量节点上执行。其次,和并行数据库类似,Dremel提供了一个SQL-like的接; f# S+ [7 j1 Y
    口,且支持列式存储。
    % x! S6 t4 V5 c3 W如图13-14所示,Dremel采用多层并层级向上汇报的方式实现数据运算后的汇8 C$ a- q) i  q; J) t
    聚,即:! Q! g* m& Q1 K+ J
    图 13-14 Dremel系统架构8 A+ ~0 Q# }* i7 G
    ●叶子节点执行查询后得到部分结果向上层中间节点汇报;
    5 \7 |" \( j# y●中间节点再向上层中间节点汇报(此层可以重复几次或零次);
    , ^8 }! F& [# \  }  b0 ^' A●中间节点向根节点汇报最终结果。" z) S( O" g9 A( p& z+ @% [
    Dremel要求数据在向上层汇报中,是可以聚集的,也就是说,在逐级上报的过7 u6 a6 k* \4 N& q5 ~$ Q
    程中数据量不断变小,最终的结果不会很大,确保在一台机器能够承受的范围。
    % O0 O0 N: }4 ]% T2.Dremel与MapReduce的比较0 A3 D4 F9 w% H
    MapReduce的输出结果直接由reduce任务写入到分布式文件系统,因此,只要! J- m5 z+ b8 u( P" P0 e
    reduce任务个数足够多,输出结果可以很大;而Dremel中的最终数据汇聚到一个根节9 H* E1 P' e2 R
    点,因此一般要求最终的结果集比较小,例如GB级别以下。  {5 Y% A/ N5 R- J
    Dremel的优势在于实时性,只要服务器个数足够多,大部分情况下能够在3秒以2 G/ j% w: o+ ]: L0 m0 t# z
    内处理完成TB级别数据。
    2 e! C/ e" }0 R" j: \& F+ N
    " t: S- k. G% P6 ?# x6 K
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-1-22 14:45 , Processed in 2.057863 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表