java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2566|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66345

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

    发表于 2017-3-20 19:45:30 | 显示全部楼层 |阅读模式
    13.5 实时分析5 X* _0 E7 p7 W
    海量数据离线分析对于MapReduce这样的批处理系统挑战并不大,如果要求实
    / `! |" m, F3 H) y. q4 `时,又分为两种情况:如果查询模式单一,那么,可以通过MapReduce预处理后将最
    % W4 D: Y' S, @8 A. w终结果导入到在线系统提供实时查询;如果查询模式复杂,例如涉及多个列任意组1 D- M, t$ \% c: h0 c3 h1 L; @
    合查询,那么,只能通过实时分析系统解决。实时分析系统融合了并行数据库和云/ o3 b" b5 J; G
    计算这两类技术,能够从海量数据中快速分析出汇总结果。
    8 Z- {- f4 R6 W% X6 o; b0 Q13.5.1 MPP架构1 Z5 R" u, m8 g
    并行数据库往往采用MPP(Massively Parallel Processing,大规模并行处理)架
    # v% }% ?# `3 q# w构。MPP架构是一种不共享的结构,每个节点可以运行自己的操作系统、数据库" G" F; A4 ^- X' M% _( ~  T! G# Y
    等。每个节点内的CPU不能访问另一个节点的内存,节点之间的信息交互是通过节5 W$ X$ {+ `9 b  X" b
    点互联网络实现的。% I' I/ T. q( x  v
    如图13-9所示,将数据分布到多个节点,每个节点扫描本地数据,并由Merge操
    0 _; o. O7 ~+ m: C0 p作符执行结果汇总。
      @9 \1 i5 ]- K2 m- |( l图 13-9 MPP Merge操作符: I; t$ b0 r. C. z4 A0 P" `6 Z
    常见的数据分布算法有两种:
    ! ^1 [, ?* K2 r% ~0 b●范围分区(Range partitioning):按照范围划分数据。. Y: G* R+ d2 n
    ●哈希分区(Hashing):根据哈希函数计算结果将每个元组分配给相应的节
    / F, ?( }- w* |' r3 O$ E点。4 f/ m1 e. B2 b! K/ V* o
    Merge操作符:系统中存在一个或者多个合并节点,它会发送命令给各个数据分
    : I0 n* [$ R$ a& w4 D片请求相应的数据,每个数据分片所在的节点扫描本地数据,排序后回复合并节
    # D+ @- P- p: {* e! w0 b点,由合并节点通过merge操作符执行数据汇总。Merge操作符是一个统称,涉及的
    - N7 Y' g7 `. c操作可能是limit、order by、group by、join等。这个过程相当于执行一个Reduce任务
    9 d" L3 ^' M6 K: q个数为1的MapReduce作业,不同的是,这里不需要考虑执行过程中服务器出现故障) \& q$ n* O; v# G6 A
    的情况。
    : x$ ^( I% r: `5 y  @如果Merge节点处理的数据量特别大,可以通过Split操作符将数据划分到多个节/ x% U4 t  l6 ?/ k. K& D% U
    点,每个节点对一部分数据执行group by、join等操作后再合并最终结果。6 x2 W: e! e6 P  t4 X# Z
    如图13-10,假如需要执行"select*from A,B where A.x=B.y",可以分别根据A.x和3 {9 x. E. \7 J( q% `2 M1 P) N
    B.x的哈希值将表A和B划分为A0、A1以及B0、B1。由两个节点分别对A0、B0以及, p. r8 A$ u; |* }
    A1、B1执行join操作后再合并join结果。6 ?3 b0 L5 t, G7 S  N
    图 13-10 MPP Split操作符
    ; H. T$ p. L9 D. r# x并行数据库的SQL查询和MapReduce计算有些类似,可以认为MapReduce模型是
    ( Z+ u- W) e5 d* b一种更高层次的抽象。由于考虑问题的角度不同,并行数据库处理的SQL查询执行时5 i: ~0 ]1 d/ g* i
    间通常很短,出现异常时整个操作重做即可,不需要像MapReduce实现那样引入一个
    8 Y. r6 o% s# k1 t8 h4 Z% w主控节点管理计算节点,监控计算节点故障,启动备份任务等。+ S) d; A, e8 M$ U, M) o
    13.5.2 EMC Greenplum
    # C) k9 w1 M9 HGreenplum是EMC公司研发的一款采用MPP架构的OLAP产品,底层基于开源的4 V/ w( O1 _; C9 c% J: H
    PostgreSQL数据库。
    ( w+ p+ G8 u, V1.整体架构5 W$ Z; b+ F" U
    如图13-11,Greenplum系统主要包含两种角色:Master服务器(Master Server)1 _) L) U( `/ A, S4 Z0 x
    和Segment服务器(Segment Server)。在Greenplum中每个表都是分布在所有节点上
    ! J$ D" N0 N' j$ A1 M的。Master服务器首先对表的某个或多个列进行哈希运算,然后根据哈希结果将表的: C  a. k! v  Y# ]2 d( U  Q  @, u8 G
    数据分布到Segment服务器中。整个过程中Master服务器不存放任何用户数据,只是
    5 e, Q. ]+ W, e% ?" a& o- A; B对客户端进行访问控制和存储表分布逻辑的元数据。0 W. \" L( p3 W; {8 ]* O/ y
    图 13-11 Greenplum整体架构
    - i' v  {) R4 H' [) p1 l3 DGreenplum支持两种访问方式:SQL和MapReduce。用户将SQL操作语句发送给) U1 A# Z, u# [
    Master服务器,由Master服务器执行词法分析、语法分析,生成查询计划,并将查询" D6 T6 |& V5 f/ {1 p
    请求分发给多台Segment服务器。每个Segment服务器返回部分结果后,Master服务器- @$ d/ S* q. N
    会进行聚合并将最终结果返回给用户。除了高效查询,Greenplum还支持通过数据的- {  [+ J  D2 _
    并行装载,将外部数据并行装载到所有的Segement服务器。8 E( `$ R) p* p2 D6 q. O
    2.并行查询优化器
    7 ?4 y0 @0 ]8 PGreenplum的并行查询优化器负责将用户的SQL或者MapReduce请求转化为物理1 L2 M$ [+ ]/ i2 ?; c% P6 I, I, N
    执行计划。Greenplum采用基于代价的查询优化算法(cost-based optimization),从各
    ! J2 ~8 b% p" ~4 [7 {种可能的查询计划中选择一个代价最小的。Greenplum优化器会考虑集群全局统计信' v* ^1 q. q* n8 r% X2 X
    息,例如数据分布,另外,除了考虑单机执行的CPU、内存资源消耗,还需要考虑
    : \% a5 S) D) y数据的网络传输开销。
    # t& X: Z5 {# {2 K( EGreenplum除了生成传统关系数据库的物理运算符,包括表格扫描(Scan)、过& ^$ T6 o9 [9 c0 q% i
    滤(Filter)、聚集(Aggregation)、排序(Sort)、联表(Join),还会生成一些并- ]4 o) u5 {- u4 Y! J, j- m3 X( l
    行运算符,用来描述查询执行过程中如何在节点之间传输数据。0 Y- R0 I$ M% ?0 V5 a( s9 q
    ●广播(Broadcast,N:N):每个计算节点将目标数据发送给所有其他节点。
    # V" t' O- D9 {6 F" t: u●重新分布(Redistribute,N:N):类似MapReduce中的shuffle过程,每个计算节
    5 K+ e3 D& @  d0 I1 Y: X点将目标数据重新哈希后分散到所有其他节点。1 G6 z8 l0 }8 ?1 _+ b) g0 I7 a* Z
    ●汇总(Gather,N:1):所有的计算节点将目标数据发送给某个节点(一般为
      p4 @- c2 K# B: ?. D2 E7 EMaster服务器)。! D% m8 F! L% B" M1 |
    图13-12中有四张表格:订单信息表(orders),订单项表(lineitem),顾客信: o6 y1 \5 u7 q+ Z  o; V# Z6 C5 P
    息表(customer)以及顾客国籍表(nation)。其中,orders表记录了订单的基本信
    . h9 {  F' o0 l, e* J, V3 r  \/ Q息,包括订单主键(o_orderkey)、顾客主键(o_custkey)和订单发生日期
    6 V; W4 _/ n3 r  }(o_orderdate);lineitem表记录了订单项信息,包括订单主键(l_orderkey)和订单8 L  F7 [  G% K+ {
    金额(l_price);customer表记录了顾客的基本信息,包括顾客主键(c_custkey)和- k5 \5 W( t( G7 N: n7 U) q
    顾客国籍主键(c_nationkey);nation表记录了顾客的国籍信息,包括国籍主键
    . A, z4 ]/ p: u% V! k6 x) Y6 X7 N(n_nationkey)和国籍名称(n_name)。Orders表和lineitem表通过订单主键关联,
    , k) K5 V( ?5 G) |- Q- sorders表和customer表通过顾客主键关联,customer表和nation通过国籍主键关联。左3 X. [- C; S" O
    边的SQL语句查询订单发生日期在1994年8月1日开始三个月内的所有订单,按照顾客
    $ D4 p# K4 o! U% j- B分组,计算每个分组的所有订单交易额,并按照交易额逆序排列。在右边的物理查. M/ g  E. p4 x7 E7 F
    询计划中,首先分别对lineitem和orders,custom和nation执行联表操作,联表后生成
    . O5 x1 S8 ~! k* R: T1 m) [的结果分别记为Join_table1和Join_table2。接着,再对Join_table1和Join_table2执行联8 `  V. S9 i4 r5 j. T- n
    表操作。其中,custom和nation联表时会将nation表格的数据广播(Broadcast)到所有
    8 `" m' w3 v* o4 b3 P的计算节点(共4个);Join_table1和Join_table2联表时会将Join_table1按照Join列
    ' b* u. ]) t# t1 ^3 L(o_custkey)哈希后重新分布(Redistribute)到所有的计算节点。最后,每个计算节2 [& }: \- d% g# s
    点都有一部分Join_table1和Join_table2的数据,且Join列(o_custkey以及c_custkey)相
    % P& Z! n9 T7 p6 k( i同的数据分布在同一个计算节点,每个计算节点分别执行Hash Join、HashAggregate
    6 ?& N& Z/ o* M0 K2 z3 U- D6 o以及Sort操作。最后,将每个计算节点上的部分结果汇总(Gather)到Master服务8 ^/ p+ G. B3 E2 [# ~
    器,整个SQL语句执行完成。3 B+ [3 E$ @. Y/ h8 t/ W# h
    图 13-12 Greenplum查询优化示例& Y% O% R2 P. R, Q# z
    13.5.3 HP Vertica
    ( w! l2 z3 a& |# _$ {% fVertica是Michael Stonebraker的学术研究项目C-Store的商业版本,并最终被惠普
    2 X0 A1 D: \5 d4 O  @0 z公司收购。Vertica在架构上与OceanBase有相似之处,这里介绍其中一些有趣的思: P7 z1 v7 ^" j$ ?# i
    想。& k1 I8 u/ D2 O- k2 p1 e
    1.混合存储模型
    6 P- k. z* m' @Vertica的数据包含两个部分:ROS(Read-Optimized Storage)以及WOS(Write-) G/ f' |& A/ V9 o) n! v6 z& }
    Optimized Storage),WOS的数据在内存中且不排序和加索引,ROS的数据在磁盘中; n5 Z$ s, \8 l% X
    有序且压缩存储。后台的"TUPLE MOVER"会不断地将数据从WOS读出并往ROS更新) ?1 X! j: O: W5 s
    (同时完成排序和索引)。Vertica的这种设计和OceanBase很相似,ROS对应
    : `& q0 y5 q' A3 @1 wOceanBase中的ChunkServer,WOS对应OceanBase中的UpdateServer。由于后台采
    " k  G3 f) J1 G4 s4 h5 E4 h用"BULK"的方式批量更新,性能非常好。: [* y3 g7 X# w' V8 ^# R6 W+ _! V
    2.多映射(Projections)存储
    0 ]% E  \6 r. O5 D5 [8 c  lVertica没有采用传统关系数据库的B树索引,而是冗余存储一张表格的多个视& R! P6 d+ m+ d$ s- P
    图,定义为映射。
    * G* @8 \9 {2 C4 X6 C* W每个映射包含表格的部分列,可以分别对不同的映射定义不同的排序主键。如
    + O7 f8 D" J$ G$ y1 U' t7 j  p图13-13所示,系统中有一张表格逻辑上包含5列<A,B,C,D,E>,物理存储成三个映$ g) ]# }9 W% L" D! M5 f
    射,分别为:Projection1(A,B,C,主键为<A,B>),Projection2(A,B,C,主键为<5 v5 r4 q5 g! z8 ~/ V7 J
    B,A>)和Projection3(B,D,E,主键为<B>)。3 X# s( ]% @4 @+ g# t& k
    图 13-13 vertica projections示例9 {1 H  T. }: |! G. e; c; Z0 t
    a)"select A,B,C from table where A=1"=>查询Projection1+ v4 u0 Z" q* H# n0 g( w
    b)"select A,B,C from table where B=1"=>查询Projection2
    # K- j' z  Y9 n" Oc)"select B,D from table where B=1"=>查询Projection3+ j! \' M' ?8 l4 @0 |
    Vertica通常维护多个不同排序的有重叠的映射,尽量使得每个查询的数据只来自: D7 V' {, ~9 C( B, e  w
    一个映射,以提高查询性能。为了支持任意列查询,需要保证每个列至少在一个映9 |1 P/ ]' H3 ]$ l- d
    射中出现。
    " G6 S0 J. N/ t3.列式存储5 U( Z1 j2 s& t% F- M+ w+ f
    Vertica中的每一列数据独立存储在磁盘中的连续块上。查询数据时,Vertica只需6 N. ?  K" A$ v3 ]/ _0 K6 W
    要读取那些需要的列,而不是被选择的行的所有的列数据。
    7 h( B/ I- l* ?: ]" k4.压缩技术, A% F# t, h, A/ a, @
    Vertica根据数据类型、基数(可能的取值个数)、排序自动对数据进行压缩,从: U* l* |) N1 D* N# x4 G  x
    而最小化每列占用的空间。常用的压缩算法包括:2 B: y* B+ U+ I) b: Y" t
    ●Run Length Encoding:列类型为整数,基数较小且有序;
    4 _. e  b- k% ]  Z: a' w●位图索引:列类型为整数,基数较小;" |: N- y0 z/ X* Z. p1 w
    ●按块字典压缩:列类型为字符串且基数较小;
    : r9 a. k1 _0 }/ \7 w●LZ通用压缩算法:其他列值特征不明显的场景。7 g+ I1 N, L) r; s
    基于列的压缩由于同样的数据类型和相同的取值范围,通常会大幅度提高压缩  A0 a& Y, p" q: J
    效果。另外,vertica还支持直接在压缩后的数据上做运算。6 a. M+ Z  m" I* b5 E
    13.5.4 Google Dremel( Q0 E4 F9 r. G" H3 x0 b9 {
    Google Dremel是Google的实时分析系统,可以扩展到上千台机器规模,处理PB  H. _0 p0 N8 J' L" c# V2 r; n
    级别的数据。Dremel还是Google Bigquery服务的底层存储和查询引擎。相比传统的并% N* M; r% L( m6 L% U. S
    行数据库,Dremel的优势在于可扩展性,磁盘的顺序读取速度在100MB/s上下,而# h! @& p) j& x( L% d* o- |3 C
    Dremel能够在1秒内处理1TB的数据,即使压缩率为10:1,也至少需要1000个磁盘并( z4 o+ V9 D7 R( W9 i% }2 h
    发读。9 G/ ^& c; I& z) N6 [' x( l( c! L- ?
    1.系统架构; I6 A7 ~8 Q1 z& O& m5 w( N6 r
    Dremel系统融合了并行数据库和Web搜索技术。首先,它借鉴了Web搜索中
    9 \' l% {' f8 [: _9 m% b的“查询树”的概念,将一个巨大复杂的查询,分割成大量较小的查询,使其能并发' d! F& Z" f$ T1 n* P
    地在大量节点上执行。其次,和并行数据库类似,Dremel提供了一个SQL-like的接+ Z: L6 v8 w8 M, A" I2 C9 X
    口,且支持列式存储。4 L7 P8 |/ K5 N8 o* \* F
    如图13-14所示,Dremel采用多层并层级向上汇报的方式实现数据运算后的汇
    4 M1 q4 N& j* W聚,即:
    " s% k, `) A/ Q. {0 M- B图 13-14 Dremel系统架构
    . k+ A- Y  R/ Y! {. m* Q●叶子节点执行查询后得到部分结果向上层中间节点汇报;" {$ B/ r! }7 ^4 k9 v
    ●中间节点再向上层中间节点汇报(此层可以重复几次或零次);" \/ ]* M/ U% q/ w3 {4 a4 T
    ●中间节点向根节点汇报最终结果。
    : I' e  Z0 D: K$ p- nDremel要求数据在向上层汇报中,是可以聚集的,也就是说,在逐级上报的过, ?5 J. c- F1 t0 Z$ u5 x5 q# W. I1 o8 O
    程中数据量不断变小,最终的结果不会很大,确保在一台机器能够承受的范围。3 \$ v* Q: @4 W1 F, B$ j
    2.Dremel与MapReduce的比较; B( E4 c* q6 X1 c5 ?
    MapReduce的输出结果直接由reduce任务写入到分布式文件系统,因此,只要" x9 L# C4 P- X) p
    reduce任务个数足够多,输出结果可以很大;而Dremel中的最终数据汇聚到一个根节' U; R) j. Y  X2 I. j+ l) ^
    点,因此一般要求最终的结果集比较小,例如GB级别以下。0 v" Z" V# [9 g) R! R
    Dremel的优势在于实时性,只要服务器个数足够多,大部分情况下能够在3秒以
    : P8 n; k3 F; X- z内处理完成TB级别数据。" `" k! e5 Z; h* D' w6 w$ w" F

    ( X* `; \  R1 s& s/ k4 K7 A2 @
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-21 21:29 , Processed in 0.135687 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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