java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2660|回复: 0

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

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

    [LV.Master]出神入化

    2062

    主题

    3720

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66592

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

    发表于 2017-3-20 19:45:30 | 显示全部楼层 |阅读模式
    13.5 实时分析# ~3 _1 c$ o" \9 }7 X2 x
    海量数据离线分析对于MapReduce这样的批处理系统挑战并不大,如果要求实  V5 ~+ \% K) p( V% a/ _3 r
    时,又分为两种情况:如果查询模式单一,那么,可以通过MapReduce预处理后将最. b' t% f! ~/ {; W/ v' v* i1 A5 s  n
    终结果导入到在线系统提供实时查询;如果查询模式复杂,例如涉及多个列任意组
    6 u6 s# u2 u8 t合查询,那么,只能通过实时分析系统解决。实时分析系统融合了并行数据库和云) a( I7 N# p, h% k' r4 ?* E
    计算这两类技术,能够从海量数据中快速分析出汇总结果。
    , T: o% M$ z+ r6 D) J; l5 f4 p/ G13.5.1 MPP架构
    2 W6 }+ |* v! X% G+ w& m. _( f0 W并行数据库往往采用MPP(Massively Parallel Processing,大规模并行处理)架
    0 }) Y3 \2 B8 i# Z构。MPP架构是一种不共享的结构,每个节点可以运行自己的操作系统、数据库
    & h( g- L9 ]7 m, c等。每个节点内的CPU不能访问另一个节点的内存,节点之间的信息交互是通过节
    5 h4 a* f1 \. B- I0 l, X% L点互联网络实现的。9 F3 P7 A. `, ~9 @( m
    如图13-9所示,将数据分布到多个节点,每个节点扫描本地数据,并由Merge操
    , e) q1 b  m8 N# p/ Z) Q) H5 d作符执行结果汇总。
    & f1 n& N- t7 c/ B图 13-9 MPP Merge操作符1 \* p# e3 t% j/ l1 K
    常见的数据分布算法有两种:
    & ~5 c' j! ]' O& x; ]' D  |●范围分区(Range partitioning):按照范围划分数据。. \% x' V) e& E+ A
    ●哈希分区(Hashing):根据哈希函数计算结果将每个元组分配给相应的节; P9 W, R; K! C; _- k8 C) H
    点。: g# X. B: [4 x- u+ s/ I9 @2 j; b
    Merge操作符:系统中存在一个或者多个合并节点,它会发送命令给各个数据分
    + g+ ?4 I- o# f/ S3 s$ `6 r片请求相应的数据,每个数据分片所在的节点扫描本地数据,排序后回复合并节
    # ^$ t& X/ f+ O5 J( E点,由合并节点通过merge操作符执行数据汇总。Merge操作符是一个统称,涉及的/ v1 O! H. ?6 m" i$ e
    操作可能是limit、order by、group by、join等。这个过程相当于执行一个Reduce任务4 F4 Y! N' w# I1 i3 h
    个数为1的MapReduce作业,不同的是,这里不需要考虑执行过程中服务器出现故障- Z: }* j( \4 {& C2 x  L$ b' E8 c, B9 F
    的情况。
    5 t& C6 ~& U) C6 t; o7 |如果Merge节点处理的数据量特别大,可以通过Split操作符将数据划分到多个节
    3 U8 R$ M3 n( T* P: j! v% o1 M8 X点,每个节点对一部分数据执行group by、join等操作后再合并最终结果。
    5 J; Y: y; _3 ^: X2 K如图13-10,假如需要执行"select*from A,B where A.x=B.y",可以分别根据A.x和" p9 G5 \3 M' x$ ~; U2 Y
    B.x的哈希值将表A和B划分为A0、A1以及B0、B1。由两个节点分别对A0、B0以及
    , @& W: n- G8 y4 H2 HA1、B1执行join操作后再合并join结果。4 m% q& N' w/ g# [* k
    图 13-10 MPP Split操作符
    $ [; P. R5 `4 C9 `: ]并行数据库的SQL查询和MapReduce计算有些类似,可以认为MapReduce模型是5 P# x) _! }: b1 [
    一种更高层次的抽象。由于考虑问题的角度不同,并行数据库处理的SQL查询执行时% T  ]* N; y! J3 c) l0 N1 _
    间通常很短,出现异常时整个操作重做即可,不需要像MapReduce实现那样引入一个
    ; F+ f& f) I" [; q2 R主控节点管理计算节点,监控计算节点故障,启动备份任务等。
    6 Q0 e6 C% U' w4 q  ^13.5.2 EMC Greenplum5 I' e9 n% T  o1 `: |
    Greenplum是EMC公司研发的一款采用MPP架构的OLAP产品,底层基于开源的
    / N. M6 P( q1 O/ o# B$ @$ S9 J, APostgreSQL数据库。
    & b* W2 E2 I' g1.整体架构! B) D# @* S, v' j% _( x3 z+ G9 Y
    如图13-11,Greenplum系统主要包含两种角色:Master服务器(Master Server)3 K2 o2 O/ y5 N% x/ t, k
    和Segment服务器(Segment Server)。在Greenplum中每个表都是分布在所有节点上2 q6 i0 I% F) q2 J0 n0 i
    的。Master服务器首先对表的某个或多个列进行哈希运算,然后根据哈希结果将表的( z4 {( v6 U" L* y% z! V; J( B# T$ Q
    数据分布到Segment服务器中。整个过程中Master服务器不存放任何用户数据,只是
    5 l6 D+ B; {# i/ U对客户端进行访问控制和存储表分布逻辑的元数据。: \  S( N, u% b1 ^
    图 13-11 Greenplum整体架构
    6 z5 c" P' ~  o. P9 V! K6 pGreenplum支持两种访问方式:SQL和MapReduce。用户将SQL操作语句发送给+ h; f. z  y/ X; a! u
    Master服务器,由Master服务器执行词法分析、语法分析,生成查询计划,并将查询! D# N; I# U& s/ R6 g- [
    请求分发给多台Segment服务器。每个Segment服务器返回部分结果后,Master服务器& t8 u! F) x7 O- p$ f
    会进行聚合并将最终结果返回给用户。除了高效查询,Greenplum还支持通过数据的
    , f6 R" a, f+ p7 }7 D' u- N并行装载,将外部数据并行装载到所有的Segement服务器。
    * T# F" N: s4 w1 Z  Q2.并行查询优化器) j( P, |; x9 f: S0 c( e% E
    Greenplum的并行查询优化器负责将用户的SQL或者MapReduce请求转化为物理
    ; s# p& X3 Y6 e执行计划。Greenplum采用基于代价的查询优化算法(cost-based optimization),从各
    7 O, @2 }. U3 e4 ~7 W6 f+ F( l种可能的查询计划中选择一个代价最小的。Greenplum优化器会考虑集群全局统计信
    7 R( e* s0 n5 a$ \* P息,例如数据分布,另外,除了考虑单机执行的CPU、内存资源消耗,还需要考虑
    9 y# Q: w( ?: q数据的网络传输开销。9 a$ A# Z7 O) l# L6 J: i4 _
    Greenplum除了生成传统关系数据库的物理运算符,包括表格扫描(Scan)、过
    % w6 k  x" t! O7 r7 X( M滤(Filter)、聚集(Aggregation)、排序(Sort)、联表(Join),还会生成一些并# \  @6 f- w" W( y7 B) e
    行运算符,用来描述查询执行过程中如何在节点之间传输数据。# _% j) V1 S% }
    ●广播(Broadcast,N:N):每个计算节点将目标数据发送给所有其他节点。7 P1 T3 |2 D; K5 P2 T3 ]: h4 t
    ●重新分布(Redistribute,N:N):类似MapReduce中的shuffle过程,每个计算节# F* g4 ~9 w$ S- t3 T/ r' q9 C. `
    点将目标数据重新哈希后分散到所有其他节点。. C& ^* a" @7 p8 r' k
    ●汇总(Gather,N:1):所有的计算节点将目标数据发送给某个节点(一般为
    * A: u- [8 {0 S7 Z+ Y) w- PMaster服务器)。
    ; I) f( ^7 a4 a- M5 M" o# [" ~! z图13-12中有四张表格:订单信息表(orders),订单项表(lineitem),顾客信% _) O) X; t+ u
    息表(customer)以及顾客国籍表(nation)。其中,orders表记录了订单的基本信# ^4 o8 S, |& c6 j$ o! ]! v
    息,包括订单主键(o_orderkey)、顾客主键(o_custkey)和订单发生日期+ @" u- [9 k. e
    (o_orderdate);lineitem表记录了订单项信息,包括订单主键(l_orderkey)和订单: J8 O' M7 G! h$ o1 l: S
    金额(l_price);customer表记录了顾客的基本信息,包括顾客主键(c_custkey)和9 z" M  [  r- c0 o9 s7 @8 b
    顾客国籍主键(c_nationkey);nation表记录了顾客的国籍信息,包括国籍主键' r9 B% m9 b' |( P8 ]7 l' J
    (n_nationkey)和国籍名称(n_name)。Orders表和lineitem表通过订单主键关联,
    # a1 _( M* E9 n, f4 vorders表和customer表通过顾客主键关联,customer表和nation通过国籍主键关联。左
    6 @: f) l4 U& E  H# n" X边的SQL语句查询订单发生日期在1994年8月1日开始三个月内的所有订单,按照顾客, M8 X. c$ k) M9 {$ _2 F$ i, _
    分组,计算每个分组的所有订单交易额,并按照交易额逆序排列。在右边的物理查
    2 y0 z: M2 }& v3 Y9 L, G询计划中,首先分别对lineitem和orders,custom和nation执行联表操作,联表后生成
    . a7 t0 N$ h9 x- D的结果分别记为Join_table1和Join_table2。接着,再对Join_table1和Join_table2执行联4 x& [! c* r% w% p, S+ O5 i
    表操作。其中,custom和nation联表时会将nation表格的数据广播(Broadcast)到所有
    : R% J* _9 \9 G  _9 |的计算节点(共4个);Join_table1和Join_table2联表时会将Join_table1按照Join列
    ! A9 Z' @3 Q; g* l+ H9 X: P(o_custkey)哈希后重新分布(Redistribute)到所有的计算节点。最后,每个计算节
    $ B5 O$ Y( g9 e点都有一部分Join_table1和Join_table2的数据,且Join列(o_custkey以及c_custkey)相+ O5 l5 O- z, y9 S5 @/ r# y
    同的数据分布在同一个计算节点,每个计算节点分别执行Hash Join、HashAggregate6 U* B8 w# R; E) C' v  z
    以及Sort操作。最后,将每个计算节点上的部分结果汇总(Gather)到Master服务2 d1 Z9 N$ y( T9 f. x( H+ Z& L  O
    器,整个SQL语句执行完成。- o1 m$ e0 r) E' m
    图 13-12 Greenplum查询优化示例
    9 Z2 ]; L" m2 D+ v5 x% ~13.5.3 HP Vertica" l1 z; f& T: b( K* ~+ Y( i
    Vertica是Michael Stonebraker的学术研究项目C-Store的商业版本,并最终被惠普
    ) y- y8 L7 @! B  m! F6 b6 e* n$ P1 S公司收购。Vertica在架构上与OceanBase有相似之处,这里介绍其中一些有趣的思& d, R! M2 r5 c% {7 m! j
    想。; F( C: s0 x; w. G4 j1 g
    1.混合存储模型; s' U; J; a9 g; R( j1 A: a! q
    Vertica的数据包含两个部分:ROS(Read-Optimized Storage)以及WOS(Write-4 q- ?- `) r* w2 y" a1 e9 ~" r3 L  C
    Optimized Storage),WOS的数据在内存中且不排序和加索引,ROS的数据在磁盘中! [$ }' m/ B! j
    有序且压缩存储。后台的"TUPLE MOVER"会不断地将数据从WOS读出并往ROS更新
    2 d1 I; e4 y2 e) {(同时完成排序和索引)。Vertica的这种设计和OceanBase很相似,ROS对应
    ! N5 i, o+ f1 }- ]' n% z* KOceanBase中的ChunkServer,WOS对应OceanBase中的UpdateServer。由于后台采* T- o) g2 j0 A" i
    用"BULK"的方式批量更新,性能非常好。/ Q6 K& d+ X+ z: x) _
    2.多映射(Projections)存储7 D9 F6 ]. H7 |# m: y3 |' v* }) x
    Vertica没有采用传统关系数据库的B树索引,而是冗余存储一张表格的多个视2 ^7 L% \$ n, {
    图,定义为映射。; ]" t7 W$ j2 w% |) `( y
    每个映射包含表格的部分列,可以分别对不同的映射定义不同的排序主键。如
    5 D/ _0 o9 z" C5 d+ b- u; J7 x图13-13所示,系统中有一张表格逻辑上包含5列<A,B,C,D,E>,物理存储成三个映7 P. D7 J% T3 b0 N; R4 t+ |% h
    射,分别为:Projection1(A,B,C,主键为<A,B>),Projection2(A,B,C,主键为<
    ; [# Q9 a6 @4 B/ R# BB,A>)和Projection3(B,D,E,主键为<B>)。
    ( [! ?4 C$ G7 R; O图 13-13 vertica projections示例
    5 a! Y: h+ U! e7 S5 u' _) v5 aa)"select A,B,C from table where A=1"=>查询Projection1
    9 U1 X4 e% Z$ F& O( f; J  wb)"select A,B,C from table where B=1"=>查询Projection2
    ) b+ _8 L- K, Z/ N, vc)"select B,D from table where B=1"=>查询Projection3
    6 t: G% e  P# R3 l, n3 _! R5 qVertica通常维护多个不同排序的有重叠的映射,尽量使得每个查询的数据只来自
    . J; e$ k* k! H一个映射,以提高查询性能。为了支持任意列查询,需要保证每个列至少在一个映
    ( l6 v" I- ~$ h射中出现。
    & S- g( i" [& z3.列式存储
    + f. J" C  n& j/ FVertica中的每一列数据独立存储在磁盘中的连续块上。查询数据时,Vertica只需5 d7 M7 i: j0 S7 G
    要读取那些需要的列,而不是被选择的行的所有的列数据。
    2 @8 D: H) l3 \' F/ U4.压缩技术; M; A# s) V3 t; k
    Vertica根据数据类型、基数(可能的取值个数)、排序自动对数据进行压缩,从
    + c( v  m- n4 t9 P而最小化每列占用的空间。常用的压缩算法包括:/ E$ q8 r- P9 D
    ●Run Length Encoding:列类型为整数,基数较小且有序;& b* T4 z4 B$ V
    ●位图索引:列类型为整数,基数较小;
    7 J7 P; E9 Y8 Y/ y) t) y●按块字典压缩:列类型为字符串且基数较小;
    7 V) C& L7 h0 S●LZ通用压缩算法:其他列值特征不明显的场景。
    4 i$ [; B) u( E基于列的压缩由于同样的数据类型和相同的取值范围,通常会大幅度提高压缩6 w4 q# w$ ]1 A- _' I
    效果。另外,vertica还支持直接在压缩后的数据上做运算。
    7 h, I$ M" P* Y% L" o13.5.4 Google Dremel
    / L& ~2 J# }/ h  @- w6 B) ]Google Dremel是Google的实时分析系统,可以扩展到上千台机器规模,处理PB/ F0 y1 ~4 l, ?. C
    级别的数据。Dremel还是Google Bigquery服务的底层存储和查询引擎。相比传统的并
      }9 ]% M$ b1 x行数据库,Dremel的优势在于可扩展性,磁盘的顺序读取速度在100MB/s上下,而9 p! A4 L+ k! x: n
    Dremel能够在1秒内处理1TB的数据,即使压缩率为10:1,也至少需要1000个磁盘并
    ! r. C2 z: m6 D发读。( r& S. R, _" ~: G9 q7 O) h
    1.系统架构# R. _& q8 V/ {- o
    Dremel系统融合了并行数据库和Web搜索技术。首先,它借鉴了Web搜索中
    9 K3 B' z; a6 v1 P! Y# C的“查询树”的概念,将一个巨大复杂的查询,分割成大量较小的查询,使其能并发" n5 k. i, M4 \9 m
    地在大量节点上执行。其次,和并行数据库类似,Dremel提供了一个SQL-like的接' _, ^4 ^8 h2 e5 D! Q
    口,且支持列式存储。
    5 \$ D: N% X' |& ~, O如图13-14所示,Dremel采用多层并层级向上汇报的方式实现数据运算后的汇: T& o2 `4 {6 E' s2 u4 p8 n- v
    聚,即:
    3 o! c4 }6 `7 S! R% E. w8 }/ X$ I图 13-14 Dremel系统架构
      o+ u2 n% X! e: p: f; f●叶子节点执行查询后得到部分结果向上层中间节点汇报;# i  W6 T/ }: d5 l
    ●中间节点再向上层中间节点汇报(此层可以重复几次或零次);
    9 t2 N! y1 q  g# c  L, v●中间节点向根节点汇报最终结果。
    - P( j! F6 L$ Q; k# p! f+ XDremel要求数据在向上层汇报中,是可以聚集的,也就是说,在逐级上报的过# t, t( w6 I8 c! M
    程中数据量不断变小,最终的结果不会很大,确保在一台机器能够承受的范围。
    + j/ a" ^# W" z% U! _# y2.Dremel与MapReduce的比较+ l& \3 I+ O9 n* X  Q
    MapReduce的输出结果直接由reduce任务写入到分布式文件系统,因此,只要
    * E$ z2 `8 B; yreduce任务个数足够多,输出结果可以很大;而Dremel中的最终数据汇聚到一个根节1 H3 l- \* D& R2 x
    点,因此一般要求最终的结果集比较小,例如GB级别以下。+ P2 G* V2 G/ N# z
    Dremel的优势在于实时性,只要服务器个数足够多,大部分情况下能够在3秒以
    9 \" C# z2 e0 @# T内处理完成TB级别数据。
    ) r  E- y* s5 I6 h) E: N; r6 L/ ^; R+ H6 a8 S* F4 v* g7 o
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-23 12:40 , Processed in 0.149448 second(s), 33 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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