互联网技术 / 互联网资讯 · 2024年3月12日

大数据技术架构解析

开局一张图:

一张图,详解大数据技术架构

下方所示的是常见的大数据平台架构图。不同公司在名称和实现细节上可能略有差异,但核心模块通常一致。

从该架构图看,大数据的核心通常包括:数据采集、数据存储与分析、数据共享,以及数据应用等层级。这些环节的职责虽然叫法各异,但本质相近。

接下来将沿着这张架构图的线索,系统梳理大数据的关键技术组成。

01. 大数据采集

数据采集的目标,是把多源数据抓取并持久化到数据存储系统,过程中可能会进行初步清洗。

数据源类型繁多:

1、网站日志

在互联网场景中,网站日志通常占比最高。日志会分布在多台服务器上,常通过在各日志服务器部署采集代理,实时收集并写入到存储系统中,例如 HDFS。

2、业务数据库

数据源覆盖 MySQL、Oracle、SqlServer 等多种数据库。需要一个能够把多源数据同步到目标存储的工具。Sqoop 曾是常用方案,但在大规模或对实时性要求较高的场景下,使用起来较为沉重,且对集群中的每台节点都需能访问数据库。因此,许多场景选择 DataX 等工具,若条件允许也可在其基础上进行二次开发。

一张图,详解大数据技术架构

当然,通过配置与定制,Flume 也能实现对数据库的近实时同步到 HDFS 的能力。

3、FTP/HTTP 等数据源

部分合作方的数据通过 FTP 或 HTTP 定期拉取,DataX 也可满足此需求。

4、其他数据源

如手工录入数据,可提供接口或小程序完成接入。

02. 大数据存储与分析

在大数据场景中,HDFS 常被视为数据仓库/数据平台的核心存储方案。

离线分析与计算,通常以 Hive 为首选,因为其支持丰富的数据类型和内置函数;配合高压缩比的 ORC 文件格式,以及方便的 SQL 语句,基于结构化数据的统计分析要比单纯的 MapReduce 更高效。一个简单的 SQL 需求,使用 MR 可能需要大量编码。

一张图,详解大数据技术架构

仍然可以使用 MapReduce 的接口进行开发,前提是熟悉 Java 或对 SQL 不熟悉的场景。但近年 Spark 的性能和易用性明显提升,结合 Hive 及 Spark SQL,成为推荐组合。由于已有 Hadoop 的 YARN,使用 Spark 实际上并不需要额外部署 Spark 集群,开发与运维成本更低。

此外,Spark 在近几年的应用中表现出色,通常比 MapReduce 更高效,且与 Hive、Hadoop 生态集成良好,应作为分析与计算的重点选型之一。

03. 大数据共享

数据共享通常指分析与计算后的结果落地的位置,典型为关系型数据库和 NoSQL 数据库等目标存储。

分析与计算阶段的结果仍可能保存在 HDFS 上,但日常业务和应用需要更便捷的数据访问,因此需要一个数据共享层,将数据从 HDFS 等源导出到其他数据源;DataX 等工具在此场景也有作用。

实时计算的结果数据也可能直接写入数据共享层,以便下游系统调用。

04. 大数据应用

1. 业务产品(如客户关系管理、企业资源计划等)

业务系统使用的数据通常来自数据共享层,直接从该层访问即可。

2. 报表与分析报表

报表所需数据通常已在数据共享层进行聚合与汇总,供业务使用。

3. 即席查询

即席查询用户包括数据开发人员、网站与产品运营人员、分析人员乃至管理层等。他们往往需要直接从数据存储层进行查询,以满足灵活的数据探索需求;此时,纯粹的报表数据无法满足,需要从底层数据存储直接查询。通常通过 SQL 实现的即席查询,对响应速度要求较高。相较于 Hive,Spark SQL 的响应速度更快,且与 Hive 兼容性良好;也可以选择其他引擎如 Impala。

4. OLAP

当前不少 OLAP 工具在大规模数据场景下无法直接对接 HDFS,需要将数据先同步到关系型数据库进行分析;若数据规模极大,关系型数据库的能力不足,此时需从 HDFS/HBase 获取数据,进行自建 OLAP 展示与分析。

5. 其它数据接口

包括通用接口与定制化接口,如从 Redis 获取用户属性等,供全线业务调用。

05. 实时数据计算

对实时性的需求日益增多,例如实时网站流量、广告曝光与点击等场景。传统的数据库与实现难以在海量数据下提供低延迟的能力,因而需要分布式、高吞吐、低时延且高可靠的实时计算框架。现阶段常见选择包括 Spark Structured Streaming;与之相比,若仅需满足现有需求且不想引入额外框架,Spark Streaming 也能胜任,且在某些场景下的延迟可控且易于集成。

现阶段通过 Flume 将前端日志与广告日志实时收集并送往实时计算组件,完成统计后将数据写入 Redis,业务系统则通过 Redis 实时读取。

06. 任务调度与监控

数据仓库/数据平台通常包含大量的任务,例如数据采集、数据同步、数据分析等。除了定时调度外,还存在复杂的任务依赖,例如数据分析要在数据采集完成后启动,数据同步要在分析完成后才执行等。因此,需有完善的任务调度与监控系统,作为平台的中枢,负责调度、执行与监控所有任务的状态与依赖。