一、大数据处理

大数据处理主要包含 存储 计算 两部分,其中存储负责数据的持久化、管理和高效访问,计算则负责对存储在大数据平台中的海量数据进行处理、分析和挖掘。

大数据的 存储和计算分离 是现代大数据架构设计中的一种重要理念。通过这种分离,存储和计算可以独立扩展、独立优化,进而提升系统的性能、弹性、可扩展性和成本效益。此外,这种架构还使得大数据平台能够支持更多种类的计算框架、存储系统和工作负载,提高了系统的灵活性和应变能力。

二、大数据存储

大数据存储主要是指如何高效、可靠地存储海量数据。大数据存储系统需要具备弹性、高可扩展性、高吞吐量、低延迟和高可用性,支持各种不同类型的数据(如结构化、半结构化、非结构化数据)。

以下是一些主流的大数据存储技术:

(一) 分布式文件系统

分布式文件系统是大数据存储的基础,它将数据分布在多个节点上,以实现高吞吐量、大容量存储和容错能力。

HDFS(Hadoop Distributed File System)是 Hadoop 生态系统中的核心存储组件,是一个基于分布式存储的文件系统,广泛用于存储大量的非结构化数据(如日志文件、图片、视频等)。HDFS 将数据切分为多个数据块(Block),并将这些数据块分布到集群中的多个节点上,提供高容错性和高吞吐量。

HDFS 的主要特点:

  • 高容错性:HDFS 会将每个数据块存储在多个节点上(默认 3 副本),通过冗余机制保证数据完整性,即使某个节点发生故障,数据也不会丢失。
  • 高吞吐量:HDFS 适合处理大规模数据,支持大数据的读写功能,可以与 MapReduce 或 Spark 等计算框架结合,实现大数据的批处理功能。
  • 不可变性:HDFS 中的文件一旦写入,不允许修改(支持附加数据),这与传统文件系统不同。

(二) 分布式 NoSQL 数据库

NoSQL 数据库通常用于存储非关系型数据,适合存储半结构化和非结构化数据。分布式的 NoSQL 数据库支持大规模、高并发的异构数据操作。常见的分布式 NoSQL 数据库包括 HBase、Cassandra、MongoDB 等。

MongoDB 是一款基于文档存储的分布式 NoSQL 数据库,在 前文 中已有介绍。

HBase、Cassandra 都是基于列式存储的分布式 NoSQL 数据库,二者主要区别如下:

数据库 HBase Cassandra
数据模型 列族存储模型,数据按列存储。每个列族中的列可以动态变化,适合处理稀疏数据。 宽列存储模型,数据按行存储,每一行可以有不同的列,且列可动态增加。
一致性模型 提供强一致性(单行事务)保障。HBase 保证同一行数据的操作是原子性的,但跨行的事务一致性较弱。 支持最终一致性,也可以根据需要调整一致性级别(如 ONE、QUORUM、ALL)。默认是最终一致性,提供更多的灵活性。
写入性能 写入性能较低,适合读多写少的场景,写入操作需要与 HDFS 进行集成,性能可能受限。 高写入性能,适合写多读少的场景。Cassandra 通过将写入操作先记录到内存(Memtable),再异步写入磁盘,以支持快速写入。
数据中心复制 不原生支持跨数据中心复制,但可以通过 HBase 的不同部署模式来实现。 原生支持跨数据中心的复制,可以在多个地理位置分布式部署,以保证数据的高可用性。
容错性 基于 HDFS 的容错机制,RegionServer 崩溃时会通过 HMaster 进行故障恢复和负载均衡。 内置容错机制,采用去中心化架构,节点无主从关系,任何节点失效不会影响集群的正常运行。
适用场景 适用于需要强一致性以及与 Hadoop 生态系统(如 Hive、MapReduce、Spark)结合的大数据分析和存储应用。常用于实时分析、时序数据和大规模日志处理。 适用于高可用性和高写入负载的应用,如物联网、社交网络、大规模日志处理、实时数据流处理和跨地域分布式系统。

(三) 湖仓一体

数据湖(Data Lake) 是一个集中存储所有数据的系统,可以容纳任何类型的数据,包括结构化、半结构化和非结构化数据。数据湖的设计理念是将原始数据以原始格式存储,为后续进行数据处理、分析和挖掘提供灵活性和可扩展性。

数据仓库(Data Warehouse) 是一个结构化数据存储系统,专为分析和查询而设计。它主要存储经过 ETL(Extract-Transform-Load,提取、转换、加载)流程处理后的结构化数据,并采用高效的查询模型和优化技术来提高查询性能。

湖仓一体 架构融合了数据湖灵活、可扩展的异构数据存储能力,以及数据仓库对结构化数据的高效查询和分析能力。它能同时处理结构化和非结构化数据,提升了数据存储的灵活性和管理效率。

三、大数据计算

大数据计算是指在大规模数据环境下,使用分布式计算框架和技术对海量数据进行处理、分析、挖掘和计算的过程。大数据计算的核心任务是从大量的数据中提取有价值的信息,进行实时或离线的数据处理和分析。

Lambda 架构和 Kappa 架构是大数据处理中的两种重要架构模式,它们的主要区别在于如何处理历史数据和实时数据流。

(一) Lambda 架构

Lambda 架构的目标是构建一个通用的、健壮的大数据系统,能够同时满足实时查询和历史数据批处理的需求。Lambda 架构可分解为三层:批处理层、加速层、服务层。

Lambda 架构将数据处理分解为 Batch Layer 和 Speed Layer 有如下优点:

  • 容错性:Speed Layer 中处理的数据也不断写入 Batch Layer。当 Batch Layer 中重新计算的数据集包含 Speed Layer 处理的数据集后,当前的 Realtime View 就可以丢弃,这也就意味着 Speed Layer 处理中引入的错误,在 Batch Layer 重新计算时都可以得到修正。这点也可以看成是 CAP 理论中的最终一致性(Eventual Consistency)的体现。
  • 复杂性隔离:Batch Layer 处理的是离线数据,可以很好的掌控。Speed Layer 采用增量算法处理实时数据,复杂性比 Batch Layer 要高很多。通过分开 Batch Layer 和 Speed Layer,把复杂性隔离到 Speed Layer,可以很好的提高整个系统的鲁棒性和可靠性。

1. 批处理层

批处理层是 Lambda 架构的基础层,主要负责 处理离线数据。它接收原始数据流,并进行批量处理和分析。为保证计算结果的准确性,处理的数据集必须具有以下三个属性:

  • 数据是原始的:数据是未经处理、未经清洗、未经转换的原始记录,确保批处理层能够基于最初的、未经处理的数据做出精确的分析和计算。
  • 数据是不可变的:数据写入系统后不能被修改,确保在计算过程中即使多个节点同时访问数据,不会出现数据不一致的情况。
  • 数据是真实的:数据要真实记录实际情况,不是通过模拟或估算得来的。

批处理层有以下特点:

  1. 高可靠性:批处理层使用容错性较强的分布式文件系统(如 Hadoop HDFS)存储和处理数据,在处理过程中可以处理故障和错误。
  2. 长时间窗口:批处理层可以使用较长的时间窗口(甚至是全量数据)进行数据处理,因为它处理的是离线数据,不要求实时性。
  3. 复杂计算:批处理层可以进行复杂的数据计算和分析任务,例如大规模数据聚合、数据清洗、机器学习模型训练等。

2. 加速层

加速层是 Lambda 架构的实时处理层,负责 处理实时数据流。它的作用是提供低延迟的查询结果,以弥补批处理层的延迟。

加速层有以下特点:

  1. 实时性:加速层处理实时数据流,可以快速响应查询请求,提供近实时的结果。
  2. 部分数据集:加速层处理的数据集通常是部分数据,而不是全部数据。它会根据实时数据流生成增量更新,以保持数据的最新状态。
  3. 简单计算:加速层通常执行较简单的计算任务,例如数据过滤、聚合、索引等。由于实时性要求较高,计算任务需要轻量级和高效。

3. 服务层

服务层是 Lambda 架构的最上层,负责 提供数据查询和服务接口。它将批处理层得到的 Batch view 与加速层得到的 Realtime View 整合起来,为用户提供统一的访问接口。

服务层有以下特点:

  1. 统一查询接口:服务层将批处理层和加速层的结果进行整合,为用户提供统一的查询接口。用户可以通过该接口查询历史数据和实时数据。
  2. 数据合并:服务层将批处理层和加速层的结果进行合并,保证查询结果的完整性和一致性。
  3. 数据展示和分发:服务层可以将查询结果展示给用户,并提供数据分发接口,将数据发送给其他系统或应用。

4. 技术选型

Lambda 架构通常采用如下的技术选型:

  • HDFS 作为主数据存储层,负责存储大规模数据集。
  • Spark 作为批处理层,提供海量数据的计算能力。在机器学习任务中,适合模型的训练阶段。
  • Storm 作为加速层,提供快速的数据处理能力。在机器学习任务中,适合模型的迭代和预测阶段。
  • HBase 或 Cassandra 作为服务层,提供实时的数据访问和更新。
  • Hive 用于创建可查询的视图,使得数据可以被方便地查询和分析。

(二) Kappa 架构

Kappa 架构在 Lambda 架构的基础上进行了优化,Kappa 架构删除 Lambda 架构中的批处理层,只使用单一的流处理层来处理所有数据,不再区分批处理和实时处理。

Kappa 架构将数据存储在数据湖中,并通过消息队列来传递数据流。当需要进行离线分析或重新计算的时候,只需将数据湖的数据经过消息队列重播一次即可。

Kappa+ 架构是 Kappa 架构的增强版,其核心思想是让流计算框架直接读取 HDFS 中的数据仓库数据,实现实时计算和历史数据回溯计算,无需保存日志或复制数据到消息队列。

Kappa+ 架构将数据处理任务分为两种类型:

  • 无状态任务:数据计算不依赖于时间的先后次序。用于对全量数据进行并行扫描和处理,不需要维护历史状态,适合一次性的大规模数据处理。
  • 时间窗口任务:基于时间分区对数据进行计算。用于将数据按时间进行分区,在每个时间窗口内并行处理数据。即使数据到达的顺序可能乱序,系统也能保证时间窗口内的数据正确计算。

(三) Lambda 与 Kappa 对比

维度 Lambda Kappa
复杂度与成本 需要同时维护两套计算引擎,架构复杂度高,开发和维护成本高 只需维护一套计算引擎,复杂度低,开发和维护成本低
计算开销 需要一直运行批处理和实时处理,且需要多次计算相同的数据(在速度层和批处理层),计算开销大 只需一直运行流计算,必要时进行全量计算,计算开销小
实时处理 通过加速层实时处理流数据,可能存在延迟(需要与批处理层融合),实时性稍差 通过统一的流处理框架,实时处理数据,实时性高
全量计算 批式全量处理,吞吐量大,全量处理能力强 流式全量处理,吞吐量较低,全量处理能力较弱
适用场景 适用于需要复杂离线分析、批量计算和实时分析分开处理的场景,如大数据分析、日志分析、推荐系统等 适用于数据流量大、需求快速迭代和实时处理的场景,如实时监控、事件驱动分析、实时数据挖掘等