数据中台解决方案包含:数据中台建设方法论、相关技术体系和工具、数据体系等几大部分构成,前文介绍了数据建设方法论中的数据仓库建设部分,本文将介绍具体构建数仓的相关技术。
大数据技术肇始于Google,涉及到的相关技术包含数据采集交换技术,面向ETL的计算技术,面向数据查询分析的计算技术。本文主要介绍面向ETL的数据存储和计算技术,面向数据查询分析的计算技术。
一、面向ETL加工的计算技术
离线计算/批处理
离线(offline)计算也叫批处理(batch),与其相对应的是在线(online)计算或实时(realtime)处理
批处理,就是利用大数据的技术(主要是Hadoop),在计算开始前准备好所有数据,计算期间数据不产生变化,得到计算结果后输出结果再进行下一步计算的方式。
离线计算有如下特点:
1).待处理存量数据大,数据保存时间长
2).计算前数据可以定义为不发生变化
3).一个计算任务下达计算完成后能得到定量计算结果
随着互联网等业务的发展,待计算的数据量不断增加,传统数据存储已经无法满足TB、PB等规模的数据计算需求,在Google等公司的探索下,提供成本低廉且可水平扩容的分布式计算方案逐步成熟,Google的三篇论文掀起了大数据技术的篇章,关联的核心技术主要包含如下几部分:
1)HDFS,是Hadoop上的分布式文件系统。
HDFS采用主从模式,其架构主要包含NameNode,DataNode,Client三个部分:
NameNode节点,用于管理和存储文件系统的元数据。负责管理Hadoop的实例,需要解决系统的单点故障问题。
DataNode节点,管理和存储实际的数据,并将自己管理的元数据信息上报给NameNode,运行多个实例。一般一份数据默认存储3个副本,分布在3个不同的DataNode上保证数据的可靠性。
Client,支持使用者读写HDFS,从NameNode、DataNode获取元数据或实际数据返回给使用者。
1)MapReduce
MapReduce 是一种分布式编程模型,采用“分而治之”的思想,将一个大规模数据集分解为多个小规模数据,然后分发给集群中多个节点共同完成计算。这样可以有效降低每一部分的运算复杂度,达到提高运算效率的目的。
MapReduce模型将计算分为两个阶段:Map阶段和Reduce阶段,
Map:映射,对一些独立元素组成的列表的每一个元素进行指定的操作。每个元素都是被独立操作的,而原始列表没有被更改。Map操作是可以高度并行的,这对高性能应用以及并行计算领域的需求非常有用。
Reduce:化简,对一个列表的元素进行适当的合并,虽然它不如Map那么并行,但是因为化简总是有一个简单的答案,大规模的运算相对独立,所以化简函数在高度并行环境下也很有用。
MapReduce由于设计上的一些限制,导致处理性能较慢,它适合大规模数据集的离线批处理计算。不适合实时的交互式计算,要求快速响应和低延迟,比如BI分析、流式计算、实时分析等。
针对这个问题,业界也有很多优化方案及替代产品,但真正发展起来的,目前主要有Spark。Spark也是一个批量计算框架,它将数据抽象成RDD、DataFrame,这是一种分布式的内存抽象,允许在大型集群上执行基于内存的计算,大大减少了迭代计算所需的开销。
Spark相比MapReduce在以下几方面具有优势:
计算模型:Spark将执行模型抽象为通用的有向无环图(DAG)执行计划,将多个Stage串联或者并行执行,无须将中间结果输出到HDFS中,可加快速度。
存储形式:Spark RDD支持粗粒度写操作,对于读操作,RDD可以精确到每条记录,这使得RDD可以用来作为分布式索引。
执行策略:MapReduce在数据Shuffle之前花费了大量的时间来排序,Spark支持基于Hash的分布式聚合,调度中采用更为通用的任务执行DAG,每一轮的输出结果都可以在内存缓存。
3)Hive,Hive是基于Hadoop的一个数据仓库工具,用于构建数据仓库,可以将结构化的数据文件映射为一张数据库表,提供类SQL的查询功能。其基本原理是将HQL语句转换成MapReduce任务,
- 实时计算/流处理
批量计算已经能满足多数大数据计算的场景,然而面对更快速高效地获取数据中的价值,批计算已经无法满足需求。
从待计算的数据角度,数据可以分为有界数据集,不会改变的数据集合;无穷数据集,无穷的持续集成的数据集合。批处理面向的就是有界数据集。流处理面向的就是无穷数据集,只要数据一直在产生,计算就持续地进行。
目前市面上实时处理框架已经逐渐成熟,如Storm/JStorm、Spark Streaming/、淘宝Galaxy、Flink等。
1)Storm/JStorm:是一个免费并开源的分布式实时计算系统。利用Storm可以很容易做到可靠地处理无限的数据流,构建复杂处理的图结构,同时可以帮助维护消息队列和消费者,消费者进程从队列里取消息,处理完成后,去更新数据库,或者给其他队列发新消息。JStorm是阿里巴巴基于Storm的改进版本产品,相比Storm,JStorm具有更好的性能,更多的功能,也更加稳定,用法基本一致,可以很好地迁移。
2)Spark Streaming/Structured Streaming,与Storm、Flink等流处理框架相比,Spark Streaming 最大的不同点在于它处理数据的粗粒度是一次处理一小批数据,而其他框架往往采用细粒度的处理模式,一次处理一条数据。Structured Streaming 是Spark重新设计的全新流式引擎,解决了Spark存在的批处理和流处理代码不统一等问题。
3)Flink,目前比较主流的流式计算引擎,也能支持流处理和批处理两种应用类型,在Flink的设计中有界数据集是无界数据流的一种特例,所以说有界数据集也是一种数据流,事件流也是一种数据流。Flink在国内得到了广泛应用,它具有高性能、易于扩展性、容错,作为纯内存计算引擎,做了内存管理方面的大量优化,另外也支持eventime的处理、支持超大Job、支持exactly-once的处理。在国内阿里巴巴的大型计算任务中得到了考验。
流计算的常见应用场景如下:
实时数仓构建:集成流计算现有的诸多数据通道和SQL灵活的加工能力,对流式数据进行实时清洗、归并、结构化处理。同时,为离线数仓进行有效补充和优化,为数据的实时传输提供可计算通道。
实时报表:实时采集、加工流式数据存储,实时监控和展现业务、客户各类指标,让数据化运营实时化。
实时监控:对系统和用户行为进行实时检测和分析,实时监测和发现危险行为。
在线系统:实时计算各类数据指标,并利用实时结果及时调整在线系统相关策略,在各类内容投放、无线智能推送领域有大量的应用。
二、面向数据分析、查询和应用的计算技术
1.数据分析
数据分析是指面对大规模的数据集,如何快速进行数据的多维交叉分析,其大部分是聚合型操作,如group by、sum、avg、count等。批计算有足够的灵活性,但耗时比较久,一些传统的关系型数据库以及数仓架构,在一定维度的场景下可以满足响应要求但数据量受限。在数据应用中,分析类的占比一直不低,因此一些优秀的处理框架,如Impala、Presto、Kylin和AnalyticDB等计算框架逐渐发展起来。针对即席分析的复杂场景,通过对时间、空间的权衡,常见的实现方式有两种:
ROLAP:以关系数据库为核心,以关系型结构进行多维数据的表示和存储,结合星型模式和雪花模式实现,例如Impala、Presto就是此类产品,Oracle用做数据仓库的时候也属于此类。
MOLAP:基于多维数据组织的实现,以多维数据组织为核心,形成“立方块”的结构,通过对“立方块”进行各类处理产生多维数据报表,典型的产品是kyligence公司的Kylin。
即席分析的常见应用场景如下:
交互式数据分析:企业运营人员在日常工作中经常需要通过SQL从各个维度对当前业务进行分析,提供分析结果以便开展后续动作。离线计算的场景等待时间较久,用户体验不好,即席分析可以比较好地规避这个问题。
2.数据查询
数据查询满足处理大规模的数据结果集,同时又需要提供一些快速计算的能力,如条件过滤筛选、在线检索等能力,快速从大规模结果中得到筛选、检索结果信息,并且支持高并发、低延迟的快速响应。这种能力批计算、流计算都无法满足,因此需要提供在线查询的能力,常见的在线计算框架如HBase、MongoDB、ElasticSearch等,其主要场景是OLTP类的简单增删改查、全文检索等相关操作。
1)HBase,是一种基于列存储的数据库,提供供类似OLTP数据库的即席查询能力,结合Phoenix来提供SQL形式的查询能力。其在离线计算中也可以作为数据存储使用,但鉴于其设计理念并非用于批量的数据分析场景。
2) MongoDB,是一个基于分布式文件存储的数据库,适合于需要可扩展的高性能数据存储的应用场景,比如在游戏中存储用户的装备、积分等信息,在电商物流中存储订单信息,在社交场景中存储用户的朋友圈等信息
3)ElasticSearch,是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,支持结构化检索和数据分析,能对对海量数据进行近实时的处理,它适用于给类似维基百科这样的知识网站提供全文检索和搜索推荐,给电商网站提供搜索商品信息的能力,对用户行为日志如点击、浏览、收藏、评论的记录和分析。
在线查询的常见应用场景如下:
1) 画像服务:根据对象标识提供具体的查询服务,如通过Redis可以提供低延迟,高并发的查询服务能力;通过HBase可以提供大规模数据的查询服务能力,征信查询就是类似的服务。
2)搜索的应用场景:提供搜索引擎的能力,为用户提供模糊匹配、行为识别检索等能力,快速检索需要的内容,如常见的知识搜索、商品搜索等。
3) 营销圈人:通过一些特定条件,筛选业务所需要的人群,为后续的营销等工作的开展提供数据。