java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2714|回复: 0

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

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

    [LV.Master]出神入化

    2096

    主题

    3754

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66788

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

    发表于 2017-3-20 19:45:30 | 显示全部楼层 |阅读模式
    13.5 实时分析
    % g! K" J: Z. X) C9 r海量数据离线分析对于MapReduce这样的批处理系统挑战并不大,如果要求实
    " |8 }( G2 n/ t2 f4 \时,又分为两种情况:如果查询模式单一,那么,可以通过MapReduce预处理后将最
    * p" B7 z! \; h% z* ?! H3 C1 @终结果导入到在线系统提供实时查询;如果查询模式复杂,例如涉及多个列任意组
    : T0 E9 R2 t1 f& E5 p; B合查询,那么,只能通过实时分析系统解决。实时分析系统融合了并行数据库和云! W% `0 y, a8 {1 h
    计算这两类技术,能够从海量数据中快速分析出汇总结果。& V/ ]8 i7 Y. o" L( |
    13.5.1 MPP架构. J; i( G% ^( ]! T, f/ w
    并行数据库往往采用MPP(Massively Parallel Processing,大规模并行处理)架
    " e0 b9 G: Z$ g0 J构。MPP架构是一种不共享的结构,每个节点可以运行自己的操作系统、数据库  a8 o2 N% C3 h7 g3 x9 T
    等。每个节点内的CPU不能访问另一个节点的内存,节点之间的信息交互是通过节4 `& C- ?+ [1 C( L0 c9 j' f, K
    点互联网络实现的。
    , B) v$ H" x+ n5 \如图13-9所示,将数据分布到多个节点,每个节点扫描本地数据,并由Merge操
    6 L' Y9 H$ r( L' L" S1 k& G作符执行结果汇总。6 E3 c9 B0 O. x  D' U
    图 13-9 MPP Merge操作符2 V  x$ _( E& Y( l: m; {
    常见的数据分布算法有两种:: W# n" z2 s6 j& j
    ●范围分区(Range partitioning):按照范围划分数据。
    , C/ H1 Z, D2 i; n1 b/ \) H5 g8 T●哈希分区(Hashing):根据哈希函数计算结果将每个元组分配给相应的节
      e3 c) U" h' u, n点。% ~4 ]7 j: |" M( U  M
    Merge操作符:系统中存在一个或者多个合并节点,它会发送命令给各个数据分4 s; n4 ^: F% n' c+ `- U
    片请求相应的数据,每个数据分片所在的节点扫描本地数据,排序后回复合并节1 \) `& ]5 y+ ^1 M' ?
    点,由合并节点通过merge操作符执行数据汇总。Merge操作符是一个统称,涉及的7 C- G/ k( B5 A
    操作可能是limit、order by、group by、join等。这个过程相当于执行一个Reduce任务
    7 y! S  f) |0 |$ ?% q# U% R) c个数为1的MapReduce作业,不同的是,这里不需要考虑执行过程中服务器出现故障0 r  I8 q8 k0 T8 v. o# b# t7 A
    的情况。/ _6 D0 P- Y' H7 ^. Q/ Q0 R
    如果Merge节点处理的数据量特别大,可以通过Split操作符将数据划分到多个节
    9 G) p( G0 N8 T% e, C' D点,每个节点对一部分数据执行group by、join等操作后再合并最终结果。
    # K0 E$ p; u% N3 Z7 f" D如图13-10,假如需要执行"select*from A,B where A.x=B.y",可以分别根据A.x和# y7 e1 }. Q8 @1 ~
    B.x的哈希值将表A和B划分为A0、A1以及B0、B1。由两个节点分别对A0、B0以及7 }0 I0 r8 S4 j
    A1、B1执行join操作后再合并join结果。
    ' p0 W; J8 b+ y4 C4 |) a6 g图 13-10 MPP Split操作符& V% O9 x9 M; K! [2 D
    并行数据库的SQL查询和MapReduce计算有些类似,可以认为MapReduce模型是
    " F0 f- K2 z3 E一种更高层次的抽象。由于考虑问题的角度不同,并行数据库处理的SQL查询执行时% D3 i6 p4 d$ V& u
    间通常很短,出现异常时整个操作重做即可,不需要像MapReduce实现那样引入一个& V/ I. F+ C: _6 i4 ~3 H) V' ^( r/ a
    主控节点管理计算节点,监控计算节点故障,启动备份任务等。
    1 S! p4 d9 @& y  E9 o* Q13.5.2 EMC Greenplum
    # s; X0 i- }4 j6 y0 s$ DGreenplum是EMC公司研发的一款采用MPP架构的OLAP产品,底层基于开源的5 f& j8 A7 H) u3 g
    PostgreSQL数据库。4 s' @4 j: C0 d/ R+ p7 ?% k
    1.整体架构3 `6 l9 i( w% P5 W4 E
    如图13-11,Greenplum系统主要包含两种角色:Master服务器(Master Server)
    " C9 ?$ i6 S8 T/ P( Y" O0 z3 G. z和Segment服务器(Segment Server)。在Greenplum中每个表都是分布在所有节点上
    & x6 \- q  l: ?  H2 L3 n( s# B3 P的。Master服务器首先对表的某个或多个列进行哈希运算,然后根据哈希结果将表的  f6 [  n& \4 A5 j. q  P5 e2 y( b; _
    数据分布到Segment服务器中。整个过程中Master服务器不存放任何用户数据,只是
    $ D( V* N' w# J9 [: [对客户端进行访问控制和存储表分布逻辑的元数据。9 p" I- r/ F( F5 m- `+ k4 y# I
    图 13-11 Greenplum整体架构
    , c# C+ u- [/ {. E1 |0 mGreenplum支持两种访问方式:SQL和MapReduce。用户将SQL操作语句发送给1 l! M, q9 D9 x  K- G
    Master服务器,由Master服务器执行词法分析、语法分析,生成查询计划,并将查询
    , T/ W9 x* h( I* v* c请求分发给多台Segment服务器。每个Segment服务器返回部分结果后,Master服务器9 O* V7 V1 j, S3 R) m& w/ A, }+ _
    会进行聚合并将最终结果返回给用户。除了高效查询,Greenplum还支持通过数据的
    0 g. C3 l( V; I& B: B并行装载,将外部数据并行装载到所有的Segement服务器。& @4 B; ~9 `0 ]2 {" |* Q, _+ X
    2.并行查询优化器* {4 o9 b! H2 l
    Greenplum的并行查询优化器负责将用户的SQL或者MapReduce请求转化为物理
    ( `3 L6 U4 J/ Z0 I8 b  T1 w3 ]4 K执行计划。Greenplum采用基于代价的查询优化算法(cost-based optimization),从各
    , j3 L7 T; R- {4 L种可能的查询计划中选择一个代价最小的。Greenplum优化器会考虑集群全局统计信
    * N2 {5 i$ a( M息,例如数据分布,另外,除了考虑单机执行的CPU、内存资源消耗,还需要考虑' L$ I7 q* {" c' [% V7 Z, F
    数据的网络传输开销。4 w) a" A" ^( Z4 v
    Greenplum除了生成传统关系数据库的物理运算符,包括表格扫描(Scan)、过
    ! j# w2 |3 Q# G. I# f( H滤(Filter)、聚集(Aggregation)、排序(Sort)、联表(Join),还会生成一些并
    ( C) W/ h; X4 }. }  u) ^' H$ ]; t行运算符,用来描述查询执行过程中如何在节点之间传输数据。
    - f9 e/ H3 ]9 s/ o5 N' d●广播(Broadcast,N:N):每个计算节点将目标数据发送给所有其他节点。! E; C8 D0 h+ w& d
    ●重新分布(Redistribute,N:N):类似MapReduce中的shuffle过程,每个计算节+ |) y( v; c6 T$ {- @
    点将目标数据重新哈希后分散到所有其他节点。: j% f, ~$ x  [
    ●汇总(Gather,N:1):所有的计算节点将目标数据发送给某个节点(一般为
    4 }  Z! U( q6 T5 ?1 o: uMaster服务器)。
    + ~$ u, b1 W" @6 T' e& {" }4 A图13-12中有四张表格:订单信息表(orders),订单项表(lineitem),顾客信
    $ V- F% A. `8 l- I7 k2 p' c! p息表(customer)以及顾客国籍表(nation)。其中,orders表记录了订单的基本信
    6 J- l* p+ B* `8 t息,包括订单主键(o_orderkey)、顾客主键(o_custkey)和订单发生日期
    5 P: s  ^" O+ j0 u( q7 ]4 T(o_orderdate);lineitem表记录了订单项信息,包括订单主键(l_orderkey)和订单
    6 Y% m1 c; V& |. c! H9 \1 V金额(l_price);customer表记录了顾客的基本信息,包括顾客主键(c_custkey)和% L3 M* w8 g1 Z/ u4 ~2 E
    顾客国籍主键(c_nationkey);nation表记录了顾客的国籍信息,包括国籍主键
    * v! D9 Y( W+ h! M$ X& P& C0 K(n_nationkey)和国籍名称(n_name)。Orders表和lineitem表通过订单主键关联,
    ' y% C9 p; G% c1 W; Z( f* c3 F, Eorders表和customer表通过顾客主键关联,customer表和nation通过国籍主键关联。左, `9 N) m. W) r: b) F$ P
    边的SQL语句查询订单发生日期在1994年8月1日开始三个月内的所有订单,按照顾客
    4 h, Z  I5 m# h0 T9 h- |1 Z分组,计算每个分组的所有订单交易额,并按照交易额逆序排列。在右边的物理查% }. K6 X+ @0 I( L0 v* u7 ?% d- Z
    询计划中,首先分别对lineitem和orders,custom和nation执行联表操作,联表后生成& g6 O! b3 l& z* z% C3 o3 s, R9 V; y/ |
    的结果分别记为Join_table1和Join_table2。接着,再对Join_table1和Join_table2执行联
    . S' F& [7 x- C4 G8 H表操作。其中,custom和nation联表时会将nation表格的数据广播(Broadcast)到所有
    % z4 N7 l4 _* ?0 Q! i的计算节点(共4个);Join_table1和Join_table2联表时会将Join_table1按照Join列
    " R7 f& z+ r$ |- C0 J7 e3 f2 ]4 r(o_custkey)哈希后重新分布(Redistribute)到所有的计算节点。最后,每个计算节
    . z* M9 `) z7 [) W5 B/ k点都有一部分Join_table1和Join_table2的数据,且Join列(o_custkey以及c_custkey)相4 h: B4 B  l$ Z/ d
    同的数据分布在同一个计算节点,每个计算节点分别执行Hash Join、HashAggregate2 z+ n" X9 k. z
    以及Sort操作。最后,将每个计算节点上的部分结果汇总(Gather)到Master服务
    : W, v5 u6 _3 v- O器,整个SQL语句执行完成。$ V) C1 V0 f8 d  u
    图 13-12 Greenplum查询优化示例# W& T* F2 E+ Z+ j
    13.5.3 HP Vertica
    8 i( Y  A% N& H) r: u- HVertica是Michael Stonebraker的学术研究项目C-Store的商业版本,并最终被惠普: |0 I7 A' N4 \' T! D( l. n: N
    公司收购。Vertica在架构上与OceanBase有相似之处,这里介绍其中一些有趣的思1 F* Y/ d+ W9 R/ c$ a; m" N
    想。
    ; M) s' {& t0 q% ^# ?1.混合存储模型2 A  L* ^: M" e7 g0 m3 K" X. V
    Vertica的数据包含两个部分:ROS(Read-Optimized Storage)以及WOS(Write-# ]& [* g# H& Y5 ?% [
    Optimized Storage),WOS的数据在内存中且不排序和加索引,ROS的数据在磁盘中* R- O$ @; B5 n4 _" u4 E6 q+ `
    有序且压缩存储。后台的"TUPLE MOVER"会不断地将数据从WOS读出并往ROS更新
    * }8 J, q- d, D6 l) C' r(同时完成排序和索引)。Vertica的这种设计和OceanBase很相似,ROS对应4 |) ?# y& k& Y6 K  i; [9 C; H
    OceanBase中的ChunkServer,WOS对应OceanBase中的UpdateServer。由于后台采6 K) K3 X3 j& c% W0 H
    用"BULK"的方式批量更新,性能非常好。
    8 p; T" y# g: }3 o/ N6 E9 T2.多映射(Projections)存储
    $ E2 N: r) s' I0 @/ k- [Vertica没有采用传统关系数据库的B树索引,而是冗余存储一张表格的多个视- R. s8 L0 _  E, v
    图,定义为映射。- x& m) \0 m8 m8 I' H7 K
    每个映射包含表格的部分列,可以分别对不同的映射定义不同的排序主键。如
    ! n" A5 d! G) `0 q) Y( e  G* a图13-13所示,系统中有一张表格逻辑上包含5列<A,B,C,D,E>,物理存储成三个映
    5 K% s5 X5 L7 J1 P! A射,分别为:Projection1(A,B,C,主键为<A,B>),Projection2(A,B,C,主键为</ f+ k2 v( q3 [
    B,A>)和Projection3(B,D,E,主键为<B>)。( }$ l" B2 f* [& K
    图 13-13 vertica projections示例
      I$ J& \0 G' f/ c3 q$ qa)"select A,B,C from table where A=1"=>查询Projection1- n2 p2 m9 }- L  h. T  w9 T
    b)"select A,B,C from table where B=1"=>查询Projection2
    1 g; b& C' {; h* c( w; F  gc)"select B,D from table where B=1"=>查询Projection3( s* a4 d: Q: W( j- T1 f5 ~( |% [6 w
    Vertica通常维护多个不同排序的有重叠的映射,尽量使得每个查询的数据只来自- d& A% p* S& w& D4 G
    一个映射,以提高查询性能。为了支持任意列查询,需要保证每个列至少在一个映7 w+ `& n+ f8 h
    射中出现。
    - z$ A7 \7 y6 q1 Y, N" n1 }3.列式存储
    " h8 c( P; f- NVertica中的每一列数据独立存储在磁盘中的连续块上。查询数据时,Vertica只需2 J! h$ j1 g  a( o! u
    要读取那些需要的列,而不是被选择的行的所有的列数据。# r" U! E7 Q$ v" \1 a
    4.压缩技术
    # \9 H/ \$ f6 `8 r) nVertica根据数据类型、基数(可能的取值个数)、排序自动对数据进行压缩,从
    # t$ W% c6 _3 q0 ?4 r! X% ]" Z  ?3 \而最小化每列占用的空间。常用的压缩算法包括:, f/ G/ j3 E! u* K1 |" ~
    ●Run Length Encoding:列类型为整数,基数较小且有序;- a7 L9 A, P6 ^
    ●位图索引:列类型为整数,基数较小;7 ^$ u& H9 e5 m# `. C& V1 W
    ●按块字典压缩:列类型为字符串且基数较小;
    ' }! `; g# J& R% _3 j& L●LZ通用压缩算法:其他列值特征不明显的场景。+ t3 k% D7 I6 Q) G& k' W6 X. s
    基于列的压缩由于同样的数据类型和相同的取值范围,通常会大幅度提高压缩
    " H2 ^6 H" A. p) E# }) X效果。另外,vertica还支持直接在压缩后的数据上做运算。1 k; r. m% V- ~  ~
    13.5.4 Google Dremel
    & c: i' ]" z0 u* D7 QGoogle Dremel是Google的实时分析系统,可以扩展到上千台机器规模,处理PB. I) z! s" W) L/ Q" J' D
    级别的数据。Dremel还是Google Bigquery服务的底层存储和查询引擎。相比传统的并
    ( a/ Q, \8 {- o* ~& Q( V1 X( _行数据库,Dremel的优势在于可扩展性,磁盘的顺序读取速度在100MB/s上下,而
    5 H. t* V; R3 e: XDremel能够在1秒内处理1TB的数据,即使压缩率为10:1,也至少需要1000个磁盘并
    * G( Z6 ]2 Z( i. o, m  e+ N" l发读。% x' _/ p& E/ C4 q
    1.系统架构
    $ x- R  U* e3 w, LDremel系统融合了并行数据库和Web搜索技术。首先,它借鉴了Web搜索中7 e- ^& a/ S5 g* F6 }- Z8 @
    的“查询树”的概念,将一个巨大复杂的查询,分割成大量较小的查询,使其能并发# ~5 T! m$ \2 k  y3 g
    地在大量节点上执行。其次,和并行数据库类似,Dremel提供了一个SQL-like的接1 C7 {  j, P( Q+ _) u  {. t
    口,且支持列式存储。8 E* u+ z8 {+ C5 g* u+ z; j9 h
    如图13-14所示,Dremel采用多层并层级向上汇报的方式实现数据运算后的汇
    1 G8 T: j4 t% {; ?聚,即:- d% f* ?6 l9 m$ y
    图 13-14 Dremel系统架构
    9 L2 ~9 L- |" c●叶子节点执行查询后得到部分结果向上层中间节点汇报;
    $ f+ P5 ?! E4 W; M  j* q5 D& a5 C8 F●中间节点再向上层中间节点汇报(此层可以重复几次或零次);7 I( K- N  F4 K3 j/ E
    ●中间节点向根节点汇报最终结果。
    $ \0 q+ L9 X3 a$ V8 dDremel要求数据在向上层汇报中,是可以聚集的,也就是说,在逐级上报的过# u% J( M% g# |% Z; u3 _/ }( S' f; [
    程中数据量不断变小,最终的结果不会很大,确保在一台机器能够承受的范围。  m9 B6 Z/ n6 {7 X+ }' q
    2.Dremel与MapReduce的比较
    ' x3 E) ~8 I. m% M& sMapReduce的输出结果直接由reduce任务写入到分布式文件系统,因此,只要0 l- O1 J! ?9 P& q4 _+ t
    reduce任务个数足够多,输出结果可以很大;而Dremel中的最终数据汇聚到一个根节/ z- i" i. N! n/ J
    点,因此一般要求最终的结果集比较小,例如GB级别以下。; }  _* c7 E6 N/ M) o- v! N
    Dremel的优势在于实时性,只要服务器个数足够多,大部分情况下能够在3秒以
    # x- J0 O" [  R2 z! C# p, R4 R内处理完成TB级别数据。
    $ ^/ q) E- v2 F0 \) w
    $ L! e3 s- t( j$ ]+ ?
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-4-1 14:35 , Processed in 0.719045 second(s), 28 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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