(2020.11.16)
数据计算的4种类型
1、批计算:批量数据的高延时处理场景,如离线数仓的加工、大规模数据的清洗和挖掘等。大多利用Mapreduce、Hive、Spark等计算框架进行处理,特点是吞吐量达、延迟高、适合人机交互少的场景
- MapReduce(Map和Reduce阶段)是一种分布式编程模型,采用“分而治之”的思想,将一个大规模数据集分解为多个小规模数据,然后分发给集群中多个节点共同完成计算,可以有效降低每一部分的运算复杂度,达到提高运算效率的目的。
- 由于设计限制,导致处理性能慢,可使用优化产品或者方案替代,如Spark(Rdd和DataFrame),它是一个分布式的内存抽象,允许在大型集群上执行内存的计算,减少了迭代计算所需的开销。spark交MapReduce优势如下:
a. 数据处理技术:Spark将执行抽象模型为通用的有向无环图(DAG)执行计划,可将多个Stage串联或者并行,无须将Stage中间结果输出到HDFS中。
b. 数据格式和内存布局:Spark RDD能支持粗粒度写操作,而对于读操作,RDD可以精确到每条记录,这使得RDD可以用来作为分布式索引
c.执行策略:MapReduce在数据shuffle之前花费了大量的时间来排序,Spark支持基于Hash分布式聚合,调度中采用更为通用的任务执行DAG,每一轮的输出结果都可以缓存在内存中。
2、流计算,在满足大数据计算场景下,更快速、更高效的获取数据价值
3、在线查询:主要用于分析型场景和经验统计;快速从大规模结果中国筛选和检索出结果信息,并支持高并发、低延迟的快速响应;
4、即席分析:对大规模的数据、快速进行数据多维交叉分析
计算能力 | 数据来源类型 | 数据处理方式 | 底层框架 | 延迟性 | 应用场景 |
---|---|---|---|---|---|
批计算 | 历史已存在的数据 | 批处理 | MapReduce、Spark | 要求不高 | 适合人机交互小的场景 |
流计算 | 源源不断的流式数据 | 微批处理&逐条处理 | Strom、Flink、 Spark Streaming | 毫秒/秒级延迟 | 双11大屏、检测预警、在线系统(内容投放、智能推荐) |
在线查询 | 历史已存在的数据 | 逐条处理/检索过滤 | Elasticsearch、Redis | 毫秒 | OLTP、画像服务、搜索的应用场景、圈人场景 |
即席分析 | 历史已存在的数据 | 批处理/聚合 | Impala、Kylin、ClickHouse、AnalyticDB | 毫秒/秒级延迟 |
离线开发
1、离线开发核心功能
- 调度作业:分为依赖调度和时间调度两种,同时满足两种约束条件时,才能开始被调度。
- 基线控制:统一管理数据处理作业的完成时间、优先级、告警策略,保障数据加工按时完成;调度模块会根据最先到达、最短执行时间原则,动态调整资源分配及作业的优先级,让资源利用效率最大化;同时采用算法低作业完成时间进行智能预测。
- 异构存储:离线开发中心针对每种类型的计算引擎会开发不同的组件;
- 代码校验:语法校验(对SQL语法进行校验)、规则校验(SQL检查器根据规则库提供的规则,对SQL进行校验)
- 多环境级联:一般创建开发环境(用户开发、调度调试)和生产环境(线上环境,不允许用户直接操作任务、资源和函数,必须在开发环境进行新建、修改或删除,在经过提交、创建发布包、同步发布三操作后,才能同步到生产环境)两个环境;
- 推荐依赖,工作原理如下
a. 获取推荐依赖的核心原理在于上下游作业输入和输出的表级血缘依赖图;
b. 通过血缘分析当前作业的输入和输出,找到合适的上游作业;
c. 对合适的作业进行环路检测,剔除存在闭环的作业;
d. 返回合适的节点列表;
- 数据权限:数据权限管理中心提供界面化操作,所有权限的申请和审批都会有记录,便于权限审计。
实时开发
1、实时开发套件是对流计算能力的产品封装
2、实时计算3大特点
- 实时且无界:实时计算面对的计算是实时的、流式的,流数据是按照时间发生的顺序被实时计算订阅和消费的,且由于数据产生的实时性,数据流将长久且持续地集成到实时计算系统中
- 持续且高效的计算:实时计算是一种“触发事件”的计算模式,触发源就是无界流式数据;一旦有新的流数据进入实时计算,实时计算立刻发起并进行一次计算任务,因此整个实时计算是持续进行的高效计算
- 流式且实时的数据集成:流数据触发一次实时计算的计算结果,可以被直接写入目的存储中;流数据的计算结果可以类似流式数据一样持续写入目的存储中
3、实时开发涉及的核心功能
- 元数据管理:元数据管理可以将Topic(针对设备的概念)中相应的元数据信息统一维护到元数据注册中心,将数据和元数据进行解耦,Topci中只需要存入数据即可。
- SQL驱动:将流计算当做动态数据表中的持续查询,同时动态变动的视图可以看做变动的数据流。
- 组件化开发:将流计算的输入源、转换逻辑、UDF函数、结果的持续化等封装为组件;开发人员可通过拖拽相关组件进行简单的配置和SQL逻辑编写,将任务具体化为流计算的加工拓扑图,由平台负责任务的调度、解析及运行。
算法开发
1、算法开发旨在快速赋予企业构建核心算法服务的能力,它集成了以批计算为核心的离线模训练功能、以流计算为核心的在线机器学习,以及基于在线查询、即席分析的数据探索和统计分析能力。
2、常见场景:金融风控和反欺诈、文本挖掘分析、广告精准营销、个性化推荐