-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Online Expansion of Largescale Data Warehouses #6
Comments
1. Introduction数据量增长的维度:
数据仓库的一个很重要的维度是 计算能力,因此数仓解决方案把扩展视为一等公民。本文讨论的基于 GreenPlum 的 MPP 数仓使用 shared-nothing 架构,由没有中心化瓶颈或对特殊硬件依赖的普通机器组成。这种架构下,扩展最大的挑战在于:
|
2. Desideata成功的扩展策略需要满足以下要求:
|
3. Architecture OverviewGPDB 是一个 shared-nothing 的 MPP 架构,构建在普通硬件之上。这样带来不同 OS 上的移植性,也带来对于硬件配置的低敏感性。 3.1 Basic系统包含两种类型的 host:
系统中的 segment 被分类两种类型:
Mirror 只有在 primary down 了以后才会开始 upgrade 为 primary 并接收读请求,其余时间只是同步回放 primary 的写操作,以保持与 primary 的同步。系统默认被配置为 N 个 primary 和 N 个 mirror,但也可以自行配置。 3.2 Data Distribution除了 catalog 只位于 master 上以外,所有数据都被分布在 segment 上。GPDB 提供了几种数据分布模式。最常用的分布模式就是指定 distribution column 进行 hash 分区。GPDB 通过对语法进行扩展实现: 除了 hash 分区,GPDB 还提供所谓 另外,在查询执行期间,GPDB 还会使用几种临时的数据分布类型 (下面会说)。 3.3 Query Processing根据访问的数据不同,查询可以被分为:
查询类型与表的分布相关。每一个表的分区方式被记录在 catalog 中,供优化器在运行时查询。Join 或 agg 等操作需要特别的数据重分布以保证正确的结果,有以下几种:
优化器会根据表的分布类型选择上述重分布运算符。重分布会带来额外的运行时间和网络带宽。在优化器对两个以上表的 join 顺序进行决策时,表的分布方式成为一个至关重要的因素。 3.4 Fault-tolerance & ReplicationGPDB 容忍任何组件的故障。所有的硬件组件都是冗余的,包括存储、网络设施。所有 segment 上的数据,包括 master,都是备份的 (mirror)。数据备份使用的是标准的物理备份技术。 Master 周期性运行错误检测算法,检查 segment 的健康。如果发现故障,则系统会重新将流量路由到节点的 mirror 上,并发出警告便于管理员排查。 错误检测系统与查询处理正交 - 没有任何组件意识到它们自身有替身。 |
4. Expansion扩展整体方法:在系统中初始化一个空的 segment,随着时间逐渐重分布少量数据,直到所有数据都被重新分布。重分布过程对正在进行的查询的影响有限,并且是在后台发生。完整的过程被 gpexpand 工具借助 GPDB API 实现。三个主要阶段:
4.1 Provisioning and Initialization
原有的数据分布策略被保存,然后所有 table 的分布策略都被设置为 random。这样带来的效果是,所有的表都需要在所有的 segment 之间进行重分布,就好像目前它们是未知的倾斜分布一样。此时,系统会暂停连接和写操作,以保证各个 segment 之间 catalog 的一致性。另外,还会创建一个临时表,用于记录当前扩容的状态。此时,除了数据还留在原来的 segment 上以外,系统的其它部分都已经完成扩容,常规的查询已经可以继续。 4.2 Establishing Distribution Policies简单且 robust 的机制,一次重分布一张独立的表。GPDB 扩展了 ALTER TABLE xxx
SET DISTRIBUTED BY (...); 这个机制集成在了已有的 DDL 框架中,与其它 DDL 提供了相同的事务一致性。工作步骤:
整个步骤是原子的,就像在一个事务内执行一样。在此过程中,将会持有该表的表锁以防止对表的修改。
4.3 Query Processing为了实现接近 online 的扩容,立刻恢复常规查询处理是非常重要的。对分布策略的修改并不影响查询优化器产生合法的查询计划,虽然可能会有一些性能上的影响。对于优化器和执行器并不需要进行一些与扩容相关的修改。 4.4 Scheduling在扩容期间,查询性能将会下降:
然而由于并不是所有数据都是 hot 的,因此可以优先重定向 hot 的数据。
所有与扩容状态相关的信息被保存在临时表中,每个表占据一行。gpexpand 通过对这张表进行查询,决定下一个进行重分布的表,然后发起 在命令行工具中,管理员还可以设置 gpexpand 可以用于重分布数据的最大时间。超时后,正在进行的命令将会回滚,也不会有更多新的命令被发起。这使管理员可以设置严格的策略来使用业务低谷期来进行数据重分布,并在业务高峰期暂停。这使得长时间运行的扩容操作更加 robust。 |
5. Performance Evaluation5.1 Scalability of Approach关心扩容后性能的增长与集群大小的增长是否线性。 Scale-up of N:N Redistribution将数据从 N 个 source segment 重分布到 N 个 target segment 上。使用了三种配置,两种数据来源,三种数据量:
总之,segment 数量翻倍,那么数据量也翻倍。另外还比较了不同数据压缩等级的情况:压缩等级越高,CPU 占用越多,但重分布时占用带宽越少。 在不同配置下,查询执行时间基本是线性的。 Scale-up of N:2N Redistribution类似。 5.2 Query Performance关心扩容过程中对查询性能的影响。 扩容 4 segment 至 8 segment 的 TPC-H 查询,区分两种重分布模式:
重分布的顺序:从 事实表 开始,从大表开始。可以看到,一开始查询性能都有所下降。随着表数据逐渐被重分布至最优,查询时间也逐渐下降,直至收敛为原来查询时间的 50%。其中,对于不同表但相同时间范围内的分区同时进行重分布,使得查询时间有了更快的下降。 更加复杂的查询可能能够减弱扩容中数据随机分布带来的复杂性,因为查询中更容易产生使数据重分布的算子。 |
6. Discussion
|
PDF:p1249-cohen.pdf
讲述大规模数据仓库如何扩展。由于扩展过程中不可避免的 dumping 和 reloading 操作,因此是一个复杂且易错的过程。本文的核心是提出 robust 和事务一致的原语,从而实现高效的数据移动。
The text was updated successfully, but these errors were encountered: