查看原文
其他

蒋步星:轻量级大数据计算引擎

2017-11-15 蒋步星 中生代技术

大数据的技术本质实际上是高性能。而当前的大数据体系,无论是传统数据库的MPP体系还是HADOOP体系,体系结构都非常复杂,虽然其中有不少开源软件,但应用实施的成本仍然非常高,复杂的框架会消耗大量资源,实际运算性能并不够好,经常要靠加大集群节点数并增强硬件能力来获得期望的性能。而且,开发成本也不低,使用MapReduce还是Spark或是抽象度更高的SQL,都难以写出支持复杂过程的高性能算法。

本次讲座中分享了润乾公司在大数据计算领域方面的多年探索和积累。我们采用简练的体系结构,从提高单机性能出发,再扩展到集群结构,摒弃习惯的透明存储方案以换取更高性能。同时基于新的运算模型和存储格式,在保证运算性能的前提下提高开发效率,程序员更能方便地写出高性能算法。



蒋步星

润乾软件创始人、首席科学家,清华大学计算机硕士,著有《非线性报表模型原理》等 中国首个国际奥林匹克数学竞赛团体冠军成员,个人金牌。 2000年,创立润乾公司。 2004年,首次在润乾报表中提出非线性报表模型,完美解决了中国式复杂报表制表难题,目前该模型已经成为报表行业的标准。 2014年,经过7年开发,润乾软件发布不依赖关系代数模型的计算引擎——集算器,有效地提高了复杂结构化大数据计算的开发和运算效率。 荣获中国电子信息产业发展研究院评选的“2016年中国软件和信息服务业 • 十大领军人物”。


近几年,大数据非常热门,大数据计算的方案也较多,目前,大数据计算机平台有很多,但却越来越沉重,主要是由于这三个方面的原因:

并不是任何事物都需要沉重的大数据平台,许多还是需要轻量级计算。

轻量级计算需求

大数据的技术本质是高性能

   提高性能的需求无处不在

不总是有那么大的数据量

   低延迟即时响应业务数据量并不大

不总是适合部署大数据平台

   即时查询常常有被集成需求 临时性数据处理来不及建    设

大数据平台 不总是可以扩容硬件(内存) 

大数据开发难度大

大数据平台对SQL查询关注过多

  性能比拼的主要阵地 优化SQL性能几乎无助于降低开     发难度

大量过程计算的开发难度还很大

  用SQL很难描述,复杂SQL优化效果不好 仍需大量底     层的编码,经常编写UDF

提高性能本质上是降低开发难度 

  复杂运算的自动优化靠不住,需要快速编写高性能算     法 

举例:漏斗转换器

集群透明化

让访问集群的时候和单击运算一样,看不见集群。

大数据平台努力实现集群透明化 

  单机与集群一致 网络存储系统+自动任务分配 

  透明化提高代码兼容性,降低开发难度

透明化难以获得最优性能 

  高性能计算方案因场景而异,可能是矛盾的 

  透明化只能选择最保险的方法,一般是性能较差的那     个,透明化框架对资源消耗严重

透明化与高性能的权衡

数据分布 

  节点文件系统:可控冗余,内存利用 

  网络文件系统

任务分配 

  程序员分配:根据节点能力安排任务,无框架资源消     耗,系统自动分配

轻量级计算的技术特征

目标:过程计算

可集成性

数据源开放性

直接文件计算

注重单机优化

多线程并行

权衡集群透明与高性能

节点文件存储,不用网络文件系统

多个单机运算,不用统一集群框架

集算器 — 技术特征

面向过程计算 

无缝应用集成 

多样性数据源接口  直接文件计算 

单机优化技术 多线程并行 

无中心集群结构  自由数据分布和任务分配

集算器 — 敏捷语法体系

某支股票的涨幅交易日

语法体系更容易描述人的思路 

数据模型不限制高效算法实现

集算器 — 面向过程计算

完整的循环分支控制

集算器 — 开发环境

集算器 — 应用结构

轻量级计算的技术特征

高效二进制压缩文件、列式存储

RDB:Oracle,DB2,MS SQL,MySQL,PG,…. TXT/CSV,JSON/XML,EXCEL 

Hadoop:HDFS,HIVE,HBASE 

MongoDB,REDIS,… 

HTTP、ALI-OTS … … 

内置接口,即装即用

单机计算技术 

1、遍历技术

遍历是大数据计算的基础

延迟游标

游标概念: 

流式读入数据,每次仅计算一小部分 

延迟计算 :

在游标上定义运算,返回结果仍然是游标,可再定义运算 

不立即计算,最终一次性遍历和计算

遍历复用

外存计算优化方向是减少访问量 

可复用的遍历减少外存访问量

一次遍历可返回多个分组结果

聚合理解

从一个集合计算出一个单值或另一个集合都可理解为聚合 

高复杂度的排序问题转换为低复杂度的遍历问题

有序游标

针对已有序的数据可一次遍历实现大结果集分组运算,减少外存交换。

复杂处理需要读出到程序内存中再处理 有序游标有效减少查找和遍历数量。

2、连接解决

区分JOIN

外键指针化

外键需要随机小量频繁访问 

内存指针查找大幅提高性能

外键序号化

序号化相当于外存指针化

不需要再计算Hash值和比较

有序归并

同维表和主子表连接可以先排序后变成有序归并 

追加数据的再排序也仍然是低成本的归并计算

3、存储格式

压缩二进制

数据类型已存入,无须解析

轻量级压缩 

减少硬盘空间 

很少占用CPU时间

泛型存储,允许集合数据

可追加


自由列存

自由分配列组

行列存统一 重复值压缩 对上透明访问

过滤优化

只读取与条件相关的列组

序号主键

多层序号式主键 

外存指针式外键,高速引用 

外存游离记录表示,离散性 

天然有序,易于查找

分组针对外键 

结果自然对齐有序


 主子合一

多层复式表

层次式有序集合 每层均可以有数据结构 同维表与主子表统一 消除对齐式连接

4、使用索引

有序对分查找 

有序数据提供对分查找,快速定位 

普通定位索引 

按键值找到数据 

两段式索引提高维护性能 

片状索引 

连续记录的索引


应用:切片的双向逆序索引

CUBE切片索引的困难 

列存索引太大 

数据必须实际排序

双向逆序索引 

按D1,…,Dn和Dn,…,D1双倍排序 

只针对前半部分维度使用片式索引

5、分段并行

文本分段

倍增分段

分段数足够大,以适应变化的并行数

每段记录数相对平均

数据追加时不必重写所有数据,保持连续性

列存分段

倍增分段方案解决列存并行困难 各列同步分段 

同列连续存储

有序与对位分段

有序数据的分段点要落在组边界上才能分段并行

同维表、主子表需同步分段

多路游标

建立多路游标,可继续进行过程计算,会自动并行执行,简化书写难度。

集群方案

集群设计原则 

确保容错 

减少网络传输量 

考虑负载均衡

集群计算技术

集群方案 — 无中心设计

服务器集群无中心

集算器没有框架,没有永久的中心主控节点,程序员用代码控制参与计算的节点

无中心不会发生单点失效

所有节点地位都等同,不会发生单点失效,某个节点有故障时整个集群仍然可以运行

计算任务有主控节点

在计算过程中由主控节点临时寻找其它节点参与计算

集群方案 — 负载均衡与容错

具备负载均衡能力 

根据每个节点空闲程度(当前正在运行的线程数量)决定是否分配任务, 实现负担和资源的有效平衡

具备容错能力 

某个节点失效导致子任务失败,主控程序还会再次将这个子任务分配给 

其它有效的节点

集群方案 — 并行逻辑结构

共享式数据计算分布

共享数据源方式:计算分布实现,数据共享读取

冗余式外存分布

所有任务都需要用到的公共维表复制存储 

事务数据分成N个区,根据需要的容错指数循环分区 存储利用率约为1/k(允许k-1个节点失效)

外存分布 — 数据同步

集算器提供节点之间的同区数据同步功能。

每个节点都是独立的计算机,可以应用内存和外存的计算方法。

外存分布 — 动态任务分配

备胎式内存分布

数据分区分别加载进节点内存 

n个节点(每节点一个分区)+k个备份节点 

内存利用率n/(n+k)

内存分布 — 静态任务分配

预留备份节点(备胎)不加载任何数据分区 

发现有分区在所有可用节点都找不到时,启动找备份节点执行加载该分区 

任务直接分配到相应节点,不再动态询问

集群维表

大维表分段存入节点机内存 

利用内存特性提供随机访问 

批量访问+节点过滤降低网络负担

JOIN总结 

外键式:小维表、大维表 

对齐式:有序归并 

避免低效率Hash分段算法

集群维表 — 示例

MapReduce->ForkReduce

MapReduce的问题 

任务太碎,管理成本过高 

难以实现关联运算 

Hash Shuffle随意性太强

ForkReduce

批量任务,调度成本低 

结合对位分段技术实现关联运算 

Shuffle结果有确定分布方案

集群应用 — 异构数据

集算器可以基于同构或异构数据库集群进行结果汇总,为报表输出汇总后的结果集。

集群应用 — 异构数据库集群(联合查询)

集算器与报表V5合作提供DQL语言,可基于异构数据库集群进行联合查询,结果汇总后为上层应用提供数据输出服务。

集群应用 — 协助HADOOP工作

集算器是轻量级、高性能、分布式的计算引擎,解决HADOOP上SQL能力弱、开发难、运算慢的问题,可以极大地缩减大数据平台的搭建周期和实施成本。

集群应用 — 独立工作

集算器作为独立的大数据计算引擎,可自己管理数据,不需要网络文件系统,通过标准的接口为上层应

用提供数据输出服务。

推荐阅读


张逸:可视化与领域驱动设计

刘朋:招招“至”胜 “六步工作法”打造致胜团队

蒋步星 :非结构化数据分析技术是忽悠


中生代咨询

为您提供最优质的讲师资讯

长按识别二维码关注我们

点击阅读原文↓ 获取更多信息


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存