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

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

蒋步星:轻量级大数据计算引擎_第1张图片

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

轻量级计算需求

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

提高性能的需求无处不在

  • 不总是有那么大的数据量

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

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

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

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

大数据开发难度大

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

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

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

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

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

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

举例:漏斗转换器

蒋步星:轻量级大数据计算引擎_第2张图片

集群透明化



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

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

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

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

  • 透明化难以获得最优性能

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

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

透明化与高性能的权衡

  • 数据分布

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

网络文件系统

  • 任务分配

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

轻量级计算的技术特征

  • 目标:过程计算
  • 可集成性
  • 数据源开放性

直接文件计算

  • 注重单机优化

多线程并行

  • 权衡集群透明与高性能

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

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

集算器 — 技术特征

  • 面向过程计算
  • 无缝应用集成
  • 多样性数据源接口 直接文件计算
  • 单机优化技术 多线程并行
  • 无中心集群结构 自由数据分布和任务分配

集算器 — 敏捷语法体系

某支股票的涨幅交易日

蒋步星:轻量级大数据计算引擎_第3张图片

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

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

蒋步星:轻量级大数据计算引擎_第4张图片


集算器 — 面向过程计算


完整的循环分支控制

蒋步星:轻量级大数据计算引擎_第5张图片

集算器 — 开发环境

蒋步星:轻量级大数据计算引擎_第6张图片

集算器 — 应用结构



蒋步星:轻量级大数据计算引擎_第7张图片

轻量级计算的技术特征


  • 高效二进制压缩文件、列式存储
  • RDB:Oracle,DB2,MS SQL,MySQL,PG,….
  • TXT/CSV,JSON/XML,EXCEL
  • Hadoop:HDFS,HIVE,HBASE
  • MongoDB,REDIS,…
  • HTTP、ALI-OTS … …
  • 内置接口,即装即用

单机计算技术


蒋步星:轻量级大数据计算引擎_第8张图片

1、遍历技术

遍历是大数据计算的基础

蒋步星:轻量级大数据计算引擎_第9张图片

延迟游标

游标概念:

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

延迟计算 :

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

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

蒋步星:轻量级大数据计算引擎_第10张图片

遍历复用

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

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

蒋步星:轻量级大数据计算引擎_第11张图片

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

聚合理解

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

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

蒋步星:轻量级大数据计算引擎_第12张图片

有序游标

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

9fa1e66db6cf29a47f4fcb356cd43df130a0403a

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

29b20db1e9483ec11bc284bacd309adbeec718bc

2、连接解决

蒋步星:轻量级大数据计算引擎_第13张图片

区分JOIN

蒋步星:轻量级大数据计算引擎_第14张图片

外键指针化

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

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

蒋步星:轻量级大数据计算引擎_第15张图片

外键序号化

序号化相当于外存指针化

蒋步星:轻量级大数据计算引擎_第16张图片

不需要再计算Hash值和比较

有序归并

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

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

蒋步星:轻量级大数据计算引擎_第17张图片

3、存储格式

蒋步星:轻量级大数据计算引擎_第18张图片

压缩二进制

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

轻量级压缩

减少硬盘空间

很少占用CPU时间

泛型存储,允许集合数据

可追加

自由列存

自由分配列组

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

过滤优化

只读取与条件相关的列组

蒋步星:轻量级大数据计算引擎_第19张图片

序号主键

蒋步星:轻量级大数据计算引擎_第20张图片

多层序号式主键

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

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

天然有序,易于查找

分组针对外键

结果自然对齐有序


主子合一

蒋步星:轻量级大数据计算引擎_第21张图片

多层复式表

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


4、使用索引

有序对分查找

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

普通定位索引

按键值找到数据

两段式索引提高维护性能

片状索引

连续记录的索引

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

CUBE切片索引的困难

列存索引太大

数据必须实际排序

双向逆序索引

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

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

5、分段并行

蒋步星:轻量级大数据计算引擎_第22张图片

文本分段

蒋步星:轻量级大数据计算引擎_第23张图片

倍增分段

蒋步星:轻量级大数据计算引擎_第24张图片

蒋步星:轻量级大数据计算引擎_第25张图片

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

每段记录数相对平均

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


列存分段

蒋步星:轻量级大数据计算引擎_第26张图片

蒋步星:轻量级大数据计算引擎_第27张图片

有序与对位分段

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

同列连续存储


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

蒋步星:轻量级大数据计算引擎_第28张图片

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

蒋步星:轻量级大数据计算引擎_第29张图片

多路游标

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

蒋步星:轻量级大数据计算引擎_第30张图片

集群方案



  • 集群设计原则

确保容错

减少网络传输量

考虑负载均衡

  • 集群计算技术

集群方案 — 无中心设计


  • 服务器集群无中心

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

  • 无中心不会发生单点失效

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

  • 计算任务有主控节点

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

集群方案 — 负载均衡与容错
  • 具备负载均衡能力

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

  • 具备容错能力

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

其它有效的节点

集群方案 — 并行逻辑结构


蒋步星:轻量级大数据计算引擎_第31张图片

共享式数据计算分布

蒋步星:轻量级大数据计算引擎_第32张图片

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

蒋步星:轻量级大数据计算引擎_第33张图片

冗余式外存分布

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

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

蒋步星:轻量级大数据计算引擎_第34张图片

外存分布 — 数据同步

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

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

蒋步星:轻量级大数据计算引擎_第35张图片

外存分布 — 动态任务分配

蒋步星:轻量级大数据计算引擎_第36张图片

备胎式内存分布

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

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

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

蒋步星:轻量级大数据计算引擎_第37张图片

内存分布 — 静态任务分配

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

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

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

蒋步星:轻量级大数据计算引擎_第38张图片

集群维表

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

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

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

蒋步星:轻量级大数据计算引擎_第39张图片

JOIN总结

外键式:小维表、大维表

对齐式:有序归并

避免低效率Hash分段算法

蒋步星:轻量级大数据计算引擎_第40张图片

集群维表 — 示例 MapReduce->ForkReduce

MapReduce的问题

任务太碎,管理成本过高

难以实现关联运算

Hash Shuffle随意性太强

ForkReduce

批量任务,调度成本低

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

Shuffle结果有确定分布方案

集群应用 — 异构数据

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

蒋步星:轻量级大数据计算引擎_第41张图片

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

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

蒋步星:轻量级大数据计算引擎_第42张图片

集群应用 — 协助HADOOP工作

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

蒋步星:轻量级大数据计算引擎_第43张图片

集群应用 — 独立工作

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

用提供数据输出服务。

蒋步星:轻量级大数据计算引擎_第44张图片

原文发布时间为:2017-11-15

本文作者:蒋步星

本文来自云栖社区合作伙伴“中生代技术”,了解相关信息可以关注“中生代技术”微信公众号

你可能感兴趣的:(大数据,json,数据库)