大数据架构模式
大数据架构的目的是处理传统数据库系统无法处理的过大或复杂的数据的摄取、处理和分析。
大数据解决方案通常涉及以下一种或多种工作负载类型:
- 静态大数据源批处理
- 动态大数据的实时处理
- 大数据实时搜索
- 预测分析和机器学习
大多数大数据架构包括以下部分或全部组件:
-
数据源:所有大数据解决方案都是从一个或多个数据源开始的。例子包括:
应用程序数据存储,如关系数据库。
应用程序生成的静态文件,如web服务器日志文件。
实时数据源,如物联网设备。
数据存储:批处理操作的数据通常存储在分布式文件存储中,可以存储各种格式的大量大型文件。这种存储通常被称为数据库。实现这种存储的选项包括Azure数据湖存储或Azure存储中的blob容器
批处理:由于数据集非常大,大数据解决方案通常必须使用长时间运行的批处理作业来处理数据文件,以便过滤、聚合和准备用于分析的数据。通常这些工作包括读取源文件、处理源文件并将输出写入新文件。选项包括在Azure Data Lake Analytics中运行U-SQL作业,在HDInsight Hadoop集群中使用Hive、Pig或定制Map/Reduce作业,或者在HDInsight Spark集群中使用Java、Scala或Python程序。
实时消息数据流:如果解决方案包含实时源,则体系结构必须包含捕获和存储用于流处理的实时消息的方法。这可能是一个简单的数据存储,将传入的消息放入一个文件夹中进行处理。然而,许多解决方案都需要消息摄取存储作为消息的缓冲区,并支持扩展处理、可靠的交付和其他消息队列语义。选项包括Azure事件中心、Azure物联网中心和Kafka。
流处理:捕获实时消息后,解决方案必须通过过滤、聚合和以其他方式准备用于分析的数据来处理它们。然后将处理后的流数据写入输出接收器。Azure Stream Analytics提供了一个托管的流处理服务,该服务基于永久运行的SQL查询,这些查询操作于无限制的流。您还可以在HDInsight集群中使用开放源码Apache流技术,比如Storm和Spark流。
数据分析和存储:许多大数据解决方案为分析准备数据,然后以结构化的格式提供处理后的数据,可以使用分析工具进行查询。用于服务这些查询的分析数据存储可以是金伯尔风格的关系数据仓库,正如在大多数传统的商业智能(BI)解决方案中所看到的那样。或者,可以通过低延迟的NoSQL技术(如HBase)或交互式Hive数据库来表示数据,后者为分布式数据存储中的数据文件提供元数据抽象。Azure SQL数据仓库为大规模、基于云的数据仓库提供托管服务。HDInsight支持交互式Hive、HBase和Spark SQL,它们也可以用来为分析提供数据。
数据分析和UI展示:大多数大数据解决方案的目标都是通过分析和报告来洞察数据。为了使用户能够分析数据,体系结构可能包括一个数据建模层,例如Azure Analysis Services中的多维OLAP多维数据集或表格数据模型。它还可能支持自助服务BI,使用Microsoft Power BI或Microsoft Excel中的建模和可视化技术。分析和报告还可以采用数据科学家或数据分析师交互数据探索的形式。对于这些场景,许多Azure服务都支持分析笔记本,比如Jupyter,这使得这些用户能够利用他们现有的Python或R技能来进行大规模的数据探索。
服务编排:大多数大数据解决方案由重复的数据处理操作组成,这些操作封装在工作流中,转换源数据,在多个源和汇聚之间移动数据,将处理后的数据加载到分析数据存储中,或者直接将结果推送到报表或仪表板。要自动化这些工作流,可以使用编排技术,如Azure Data Factory或Apache Oozie和Sqoop。
Azure包含许多可以在大数据架构中使用的服务。大致可分为两类:
- 托管服务,包括Azure数据存储、Azure数据分析、Azure数据仓库、Azure流分析、Azure事件中心、Azure物联网中心和Azure数据工厂。
- 基于Apache Hadoop平台的开源技术,包括HDFS、HBase、Hive、Pig、Spark、Storm、Oozie、Sqoop和Kafka。这些技术可以在Azure HDInsight服务的Azure上使用。
这些选项并不相互排斥,许多解决方案都将开源技术与Azure服务结合起来。
使用场景
当你需要考虑这种架构风格时:
- 以传统数据库无法存储和处理的过大卷存储和处理数据。
- 转换非结构化数据以进行分析和报告。
- 实时捕获、处理和分析无边界的数据流,或以较低的延迟。
- 使用Azure机器学习或微软的认知服务。
优势
技术选择。您可以在HDInsight集群中混合并匹配Azure托管服务和Apache技术,以利用现有的技能或技术投资。
通过并行性能。大数据解决方案利用并行性,使高性能解决方案能够扩展到大量数据。
弹性的规模。大数据架构中的所有组件都支持向外扩展供应,这样您就可以调整您的解决方案以适应小型或大型工作负载,并且只需为您使用的资源付费。
与现有解决方案的互操作性。大数据架构的组件还用于物联网处理和企业BI解决方案,使您能够跨数据工作负载创建集成解决方案。
挑战
复杂性。大数据解决方案可能非常复杂,有许多组件来处理来自多个数据源的数据摄取。大数据流程的构建、测试和故障排除可能具有挑战性。此外,为了优化性能,必须跨多个系统使用大量配置设置。
技巧。许多大数据技术都是高度专门化的,使用的框架和语言并不是更通用的应用程序体系结构的典型。另一方面,大数据技术正在发展基于更成熟语言的新api。例如,Azure Data Lake Analytics中的U-SQL语言基于Transact-SQL和c#的组合。类似地,基于sql的api也可用于Hive、HBase和Spark。
技术成熟。许多用于大数据的技术正在发展。虽然核心Hadoop技术(如Hive和Pig)已经稳定下来,但是新兴技术(如Spark)在每个新版本中都会引入大量的更改和增强。与其他Azure服务相比,Azure Data Lake Analytics和Azure Data Factory等托管服务相对较年轻,并且可能会随着时间的推移而发展。
安全。大数据解决方案通常依赖于将所有静态数据存储在一个集中的数据库中。保护对这些数据的访问是很有挑战性的,尤其是当这些数据必须被多个应用程序和平台摄取和使用时。
最佳实践
利用并行性。大多数大数据处理技术都将工作负载分布在多个处理单元中。这要求创建静态数据文件并以可拆分格式存储。诸如HDFS这样的分布式文件系统可以优化读写性能,并且实际的处理是由多个集群节点并行执行的,这减少了总体作业时间。
对数据进行分区。批处理通常在一个循环的时间表上发生——例如,每周或每月。根据与处理计划匹配的时间周期划分数据文件和数据结构(如表)。这简化了数据摄取和作业调度,并使故障排除更加容易。此外,Hive、U-SQL或SQL查询中使用的分区表可以显著提高查询性能。
应用读时模式语义。使用数据湖允许您以多种格式(结构化、半结构化或非结构化)组合文件存储。使用schema-on-read语义,它在数据处理时(而不是存储时)将模式投射到数据上。这为解决方案构建了灵活性,并防止了数据验证和类型检查导致的数据摄入过程中的瓶颈。
处理现场数据。传统的BI解决方案通常使用提取、转换和加载(ETL)过程将数据移动到数据仓库。大数据解决方案具有数据量大、格式多的特点,通常使用ETL的各种变体,如转换、提取和加载(TEL)。使用这种方法,数据在分布式数据存储中处理,将其转换为所需的结构,然后将转换后的数据移动到分析数据存储中。
平衡使用和时间成本。对于批处理作业,重要的是要考虑两个因素:计算节点的单位成本和使用这些节点完成作业的每分钟成本。例如,一个批处理作业可能需要8小时,其中包含4个集群节点。然而,结果可能是作业只在头两个小时内使用所有四个节点,在此之后,只需要两个节点。在这种情况下,在两个节点上运行整个作业会增加总作业时间,但不会使其翻倍,因此总成本会更低。在某些业务场景中,较长的处理时间可能比使用未充分利用的集群资源的较高成本更可取。
单独的集群资源。在部署HDInsight集群时,通常会为每种类型的工作负载提供单独的集群资源,从而获得更好的性能。例如,尽管Spark集群包括Hive,但如果需要同时使用Hive和Spark执行大量处理,则应该考虑部署单独的专用Spark和Hadoop集群。类似地,如果您使用HBase和Storm进行低延迟流处理,使用Hive进行批处理,请考虑使用Storm、HBase和Hadoop的单独集群。
编排数据摄取。在某些情况下,现有的业务应用程序可能会将用于批处理的数据文件直接写入Azure storage blob容器中,HDInsight或Azure data Lake Analytics可以使用这些文件。然而,您经常需要将来自内部或外部数据源的数据导入数据湖。使用编排工作流或管道(如Azure Data Factory或Oozie支持的工作流或管道)以可预测和集中管理的方式实现这一点。
尽早清除敏感数据。数据摄取工作流应该在处理过程的早期清除敏感数据,以避免将其存储在数据湖中。
IOT架构
物联网是大数据解决方案的一个特殊子集。下图显示了物联网可能的逻辑架构。该图强调了体系结构的事件流组件。
云网关使用可靠的低延迟消息传递系统在云边界接收设备事件。
设备可以直接将事件发送到云网关,或者通过字段网关。field gateway是一种专门的设备或软件,通常与设备协同使用,接收事件并将其转发到云网关。字段网关还可以预处理原始设备事件,执行过滤、聚合或协议转换等功能。
提取数据之后,事件经过一个或多个流处理器,这些处理器可以路由数据(例如,到存储)或执行分析和其他处理。
下面是一些常见的处理类型。(这份清单当然不是详尽无遗的。)
- 将事件数据写入冷存储器,用于存档或批处理分析。
- 热路径分析,在(近)实时分析事件流,以检测异常,识别滚动时间窗口上的模式,或在流中发生特定条件时触发警报。
- 处理来自设备的特殊类型的非遥测信息,如通知和警报。
- 机器学习。
灰色阴影的方框显示了物联网系统的组件,这些组件与事件流没有直接关系,但是为了完整起见,这里包含了这些组件。
- 设备注册表是所供应设备的数据库,包括设备id和通常的设备元数据,如位置。
- 供应API是一个用于供应和注册新设备的公共外部接口。
- 一些物联网解决方案允许将命令和控制消息发送到设备。
欢迎关注微信公众号:架构师玄学之路
作者:胡弦,架构师,高级技术专家