数据中台建设方法论实践之技术选型

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 本文主要介绍面向ETL的数据存储和计算技术,面向数据查询分析的计算技术。

数据中台解决方案包含:数据中台建设方法论、相关技术体系和工具、数据体系等几大部分构成,前文介绍了数据建设方法论中的数据仓库建设部分,本文将介绍具体构建数仓的相关技术。
大数据技术肇始于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任务,

  1. 实时计算/流处理
    批量计算已经能满足多数大数据计算的场景,然而面对更快速高效地获取数据中的价值,批计算已经无法满足需求。

从待计算的数据角度,数据可以分为有界数据集,不会改变的数据集合;无穷数据集,无穷的持续集成的数据集合。批处理面向的就是有界数据集。流处理面向的就是无穷数据集,只要数据一直在产生,计算就持续地进行。
目前市面上实时处理框架已经逐渐成熟,如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) 营销圈人:通过一些特定条件,筛选业务所需要的人群,为后续的营销等工作的开展提供数据。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
19天前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
68 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
3月前
|
机器学习/深度学习 自然语言处理 搜索推荐
LangChain在个性化内容生成中的实践
【8月更文第3天】随着人工智能技术的发展,个性化内容生成已经成为许多应用的核心竞争力。LangChain 是一种开源框架,旨在简化语言模型的应用开发,尤其是针对自然语言处理任务。本文将探讨 LangChain 如何帮助开发者根据用户的偏好生成定制化的内容,从挑战到实践策略,再到具体的案例分析和技术实现。
194 1
|
6月前
|
机器学习/深度学习 人工智能
【LangChain系列】第九篇:LLM 应用评估简介及实践
【5月更文挑战第23天】本文探讨了如何评估复杂且精密的语言模型(LLMs)应用。通过创建QA应用程序,如使用GPT-3.5-Turbo模型,然后构建测试数据,包括手动创建和使用LLM生成示例。接着,通过手动评估、调试及LLM辅助评估来衡量性能。手动评估借助langchain.debug工具提供执行细节,而QAEvalChain则利用LLM的语义理解能力进行评分。这些方法有助于优化和提升LLM应用程序的准确性和效率。
547 8
|
6月前
|
存储 机器学习/深度学习 人工智能
【LangChain系列】第八篇:文档问答简介及实践
【5月更文挑战第22天】本文探讨了如何使用大型语言模型(LLM)进行文档问答,通过结合LLM与外部数据源提高灵活性。 LangChain库被介绍为简化这一过程的工具,它涵盖了嵌入、向量存储和不同类型的检索问答链,如Stuff、Map-reduce、Refine和Map-rerank。文章通过示例展示了如何使用LLM从CSV文件中提取信息并以Markdown格式展示
291 2
|
6月前
|
机器学习/深度学习 自然语言处理 数据挖掘
【LangChain系列】第七篇:工作流(链)简介及实践
【5月更文挑战第21天】LangChain是一个框架,利用“链”的概念将复杂的任务分解为可管理的部分,便于构建智能应用。数据科学家可以通过组合不同组件来处理和分析非结构化数据。示例中展示了如何使用LLMChain结合OpenAI的GPT-3.5-turbo模型,创建提示模板以生成公司名称和描述。顺序链(SimpleSequentialChain和SequentialChain)则允许按顺序执行多个步骤,处理多个输入和输出
961 1
|
6月前
|
存储 人工智能 搜索推荐
【LangChain系列】第六篇:内存管理简介及实践
【5月更文挑战第20天】【LangChain系列】第六篇:内存管理简介及实践
193 0
【LangChain系列】第六篇:内存管理简介及实践
|
6月前
|
人工智能 安全 API
【LangChain系列】第十篇:数据保护简介及实践
【5月更文挑战第24天】本文探讨了在使用大型语言模型时保护个人数据的重要性,特别是涉及敏感信息如PII(个人可识别信息)的情况。为了降低数据泄露风险,文章介绍了数据匿名化的概念,通过在数据进入LLM前替换敏感信息。重点讲解了Microsoft的Presidio库,它提供了一个可定制的文本匿名化工具。此外,文章还展示了如何结合LangChain库创建一个安全的匿名化流水线,包括初始化匿名器、添加自定义识别器和操作符,以及在问答系统中集成匿名化流程。通过这种方式,可以在利用LLMs的同时保护数据隐私。
169 0
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
【LangChain系列】第五篇:大语言模型中的提示词,模型及输出简介及实践
【5月更文挑战第19天】LangChain是一个Python库,简化了与大型语言模型(LLM)如GPT-3.5-turbo的交互。通过ChatOpenAI类,开发者可以创建确定性输出的应用。提示词是指导LLM执行任务的关键,ChatPromptTemplate允许创建可重用的提示模板。输出解析器如StructuredOutputParser将模型的响应转化为结构化数据,便于应用处理。LangChain提供可重用性、一致性、可扩展性,并有一系列预建功能。它使得利用LLM构建复杂、直观的应用变得更加容易。
285 0
|
6月前
|
存储 人工智能 数据库
【LangChain系列】第四篇:向量数据库与嵌入简介及实践
【5月更文挑战第18天】 本文介绍了构建聊天机器人和语义搜索的关键组件——向量存储和嵌入。首先,文章描述了工作流程,包括文档拆分、生成嵌入和存储在向量数据库中。接着,通过Python代码展示了如何设置环境并处理文档,以及如何创建和比较文本嵌入。向量存储部分,文章使用Chroma存储嵌入,并进行了相似性检索的演示。最后,讨论了故障模式,如重复文档和未捕获结构化信息的问题。整个博文中,作者强调了在实际应用中解决这些问题的重要性。
399 0
|
6月前
|
人工智能 自然语言处理 API
【LangChain系列】第三篇:Agent代理简介及实践
【5月更文挑战第17天】LangChain代理利用大型语言模型(LLM)作为推理引擎,结合各种工具和数据库,处理复杂任务和决策。这些代理能理解和生成人类语言,访问外部信息,并结合LLM进行推理。文章介绍了如何通过LangChain构建代理,包括集成DuckDuckGo搜索和维基百科,以及创建Python REPL工具执行编程任务。此外,还展示了如何构建自定义工具,如获取当前日期的示例,强调了LangChain的灵活性和可扩展性,为LLM的应用开辟了新途径。
448 0