8、大数据:概念、技术与考量
大数据:概念、技术与考量
1. 大数据概述
在当今时代,几乎人类的每一项活动都会产生某种形式的数据。通过互联网搜索、社交媒体发帖、活动追踪器、销售点金融交易、车辆中的 GPS 以及公共场所安装的摄像头,大多数人在不知不觉中就将产生数据的技术融入了日常生活。每天产生的数据超过 2.5 千兆字节,而且这个数量还在不断增加。
大数据的定义并不统一。简单来说,大数据指规模巨大的数据,但对于多大规模的数据才能被视为“大”,并没有一个标准。有人将大数据定义为无法在单台计算机上存储、处理或分析的数据;也有人根据当时的全球互联网流量容量,将大数据定义为介于太字节和泽字节之间的数据集。还有定义认为,大数据是过于庞大或复杂,无法仅通过传统统计方法进行预处理和分析的数据,需要统计学、数学和计算机科学的知识和技术来分析并得出有意义的结论。最细致的定义将大数据分为三个“V”:规模(Volume)、速度(Velocity)和多样性(Variety),有时还会加上准确性(Veracity)和价值(Value)。
| 特性 | 描述 | 示例 |
|---|---|---|
| 规模(Volume) | 数据的大小,无明确阈值 | Instagram 上超过 200 亿张照片、约 50 亿手机用户的通话记录 |
| 速度(Velocity) | 数据生成的速度 | YouTube 每 60 秒生成超过 100 小时的视频数据,每天新增 5 亿条推文 |
| 多样性(Variety) | 数据的结构,包括结构化、半结构化和非结构化 | 结构化数据如表格数据;半结构化数据使用标签识别记录;非结构化数据如文本、音频和视频文件 |
| 准确性(Veracity) | 数据的完整性和验证每条记录准确性的能力 | 由于大数据快速连续生成,需检查每条记录的可信度 |
| 价值(Value) | 大数据为某个主题提供大量有价值信息的潜力 | 有效预处理和分析是挖掘价值的关键 |
大数据的规模、速度和多样性使得传统的数据捕获、存储、预处理和分析方法变得不足。大数据分析更具挑战性,因为数据通常是非结构化的,且需要可扩展的算法以适应数据规模的增长。大数据存储也更加困难,需要大规模分布式存储系统来容纳不断增长的数据量。此外,与传统的抽样数据不同,大数据的范围可能是详尽的,旨在尽可能涵盖整个群体或系统。因此,大数据的收集催生了新的数据分析技术,以应对数据丰富的情况。
2. 大数据分析
大数据的规模意味着算法严重依赖计算任务的并行化,即在不同的计算单元上同时运行多个任务。有三种并行分析数据的方法:
1. 数据并行化 :将数据在系统中的可用节点之间进行分区,每个节点对其分配到的数据运行相同的算法。这种方法适用于数据分布相同且观测值相互独立的情况。
2. 模型并行化 :在每个计算节点上复制数据,然后在每个节点上运行模型的不同部分,最后汇总每个节点的结果。但并非所有情况都能使用这种方法,因为模型通常难以分割成多个不同的部分。
3. 数据和模型并行化 :同时对数据和模型进行并行化。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(输入数据):::process --> B(数据并行化):::process
A --> C(模型并行化):::process
A --> D(数据和模型并行化):::process
B --> E(每个节点运行相同算法):::process
C --> F(每个节点运行模型不同部分):::process
D --> G(同时并行数据和模型):::process
E --> H(汇总结果):::process
F --> H
G --> H
数据的快速生成也带来了一系列挑战,有时需要实时分析技术。在实时分析中,数据随着事件的发生而连续到达,事件处理通常涉及比流处理更复杂的分析,流处理则是在数据生成时进行处理,通常涉及更简单、更快的分析。为了应对实时分析的挑战,已经开发了各种系统。实时分析系统需要满足一些关键要求:
- 低延迟 :数据生成和处理之间的时间尽可能短,可通过并行处理、内存处理和增量评估来实现。
- 高可用性 :系统在需要时能够执行预期功能,可通过在多个服务器或节点上复制数据来实现。
- 水平可扩展性 :随着数据大小或计算任务的增加,系统的容量可以通过添加更多计算节点来增加。
3. 大数据计算架构
3.1 大规模并行处理数据库系统(MPP)
大数据计算需要特定的架构模型来处理数据的大小、类型和生成速度。大规模并行处理数据库系统(MPP)通过依赖多个处理器来加速计算性能。典型的 MPP 系统可以有数百个处理器,每个处理器都有自己的内存和操作系统,且各处理器独立运行,不共享内存,因此被称为“无共享”或“松散耦合”系统。
MPP 架构由一个领导节点负责各节点之间的通信。领导节点将整个计算任务分解为小任务,分配给各个节点在小批量数据集上执行,节点完成任务后将结果信息反馈给领导节点。这种架构允许多个用户同时查询数据,同时避免响应延迟。为了应对数据增长,MPP 系统可以垂直扩展(添加额外的服务器)或水平扩展(向现有服务器添加额外的节点)。常见的 MPP 系统包括 Google 的 BigQuery、Snowflake、Amazon Redshift 和 Microsoft Azure Synapse。
3.2 批量同步并行架构(BSP)
批量同步并行(BSP)架构模型将计算任务分为多个阶段,称为超级步骤。每个超级步骤有多个并行计算线程来执行计算任务。在每个超级步骤结束时,计算线程会进行同步,以便将必要的信息传递到下一个超级步骤。超级步骤之间的屏障确保在程序继续到下一个超级步骤之前进行同步。
为了确保计算线程之间的通信正常,引入了两个参数 L 和 g 来量化同步。L 衡量计算吞吐量,g 衡量通信吞吐量,通过这两个值的比率来确保与下一个超级步骤的同步和通信成功。BSP 架构基于消息传递,每个组件有自己的本地内存,独立完成任务,但与更大的网络相连以共享信息。
3.3 内存数据库系统
内存数据库系统将所有数据存储在系统的内存中,而不是像以前的大数据计算架构那样存储在磁盘上。这种存储方式提高了任务的速度,因为不需要进行输入/输出操作来访问必要的数据。所有数据存储在一个地方,使得节点更容易、更快地访问数据。由于这一优势,内存架构被广泛应用于 SQLite、MonetDB、SQLFire 和 SolidDB 等数据库管理程序中。
3.4 MapReduce
在 MapReduce 框架中,计算任务被分为一组映射任务和一组归约任务,然后在一组计算单元上运行。计算负载分布在这些计算机上,每个任务仅对其分配到的数据子集进行计算。
MapReduce 的工作流程如下:
1. 输入分割 :将输入数据分割成块。
2. 映射阶段 :加载数据,将数据分配到计算单元,并通过执行指定的数学函数来转换数据。为每个记录分配一个分区号,确保具有相同分区号的记录将进入同一个归约器。
3. 排序和传输 :按分区号对数据进行排序,并传输到归约器。
4. 归约阶段 :归约器汇总映射任务的结果并输出最终数据。
MapReduce 架构是一种无共享架构,能够在短时间内在数百万台机器上并行运行程序。
3.5 云计算
在某些情况下,大数据在云平台上进行处理和分析。云计算具有资源弹性、避免硬件成本和按需付费等优点,用户可以从任何地方访问计算资源。然而,使用云计算也存在数据隐私和安全问题,一旦数据传输到云计算集群,数据所有者就不再直接控制数据。
云计算集群可以是公共可用的、私有拥有的或社区云,也可以是这三种类型的组合,即混合云。云计算集群分为三个子组,根据用户上传数据后对其的控制程度进行定义:
- 软件即服务(SaaS) :用户对数据的控制最少,但无需拥有软件的物理副本。
- 平台即服务(PaaS) :用户可以访问执行计算任务所需的工具,对数据的控制比 SaaS 多,但比基础设施即服务少。
- 基础设施即服务(IaaS) :用户对数据的控制最多,所有必要的硬件和软件都外包给 IaaS 提供商。目前,最大的云计算服务提供商包括 Amazon Web Services(AWS)、Microsoft Azure 和 Google Cloud Platform(GCP)。
4. 本地机器上的大数据分析
有时,大数据分析不需要访问云计算或特定的大数据框架。一些大数据可以在本地机器上进行分析,通过优化数据处理方法和使用专门为处理大型数据文件而开发的库。以下是一些优化方法:
- 选择必要的列 :从数据集中仅选择必要的列。
- 选择随机样本 :选择数据集的随机样本进行分析。
- 使用向量格式编写代码 :在可能的情况下,使用向量格式编写代码比使用 for 循环逐行遍历数据集更高效。
Python 中有一些专门用于处理大型数据的库,例如:
- Numba :用于处理 NumPy 数组,在 NumPy 向量化不足的情况下优化 Python 代码。
- Dask :用于处理 Pandas 数据框,使用并行计算加速计算操作,与 Numpy 和 Pandas 兼容。Dask - ML 用于机器学习算法,与 Scikit - Learn 库兼容。
5. 大数据处理
5.1 数据处理模式
数据处理模型揭示了大数据处理系统如何处理数据,主要有两种模式:
|模式|描述|特点|
| ---- | ---- | ---- |
|批处理模式|数据存储在内存或磁盘中,按预定时间间隔分块处理|处理时间有延迟,适合对实时性要求不高的场景|
|流处理模式|数据在系统中生成时立即处理|实时性高,适合对时间敏感的场景|
大数据处理的主要关注点包括数据分区和分布、可扩展性、调度和容错性。
- 数据分区和分布 :为了充分利用架构中的多个节点,数据需要进行分区并分布到各个节点。有效的数据分区可以确保资源最大化利用、系统容错和数据安全,还能加快查询处理时间。数据分区可以水平(每个节点存储特征子集)或垂直(每个节点存储观测值子集)进行。
- 可扩展性 :由于大数据的规模,需要有效利用可用计算资源以提高查询处理速度。
- 调度 :有多种任务调度方法,有效的调度方法能使大数据处理框架同时处理多个任务。
- 容错性 :系统在发生故障时能够从断点继续运行,避免数据或信息丢失。常见的故障原因包括节点故障、网络故障和进程故障。大数据处理框架需要具备快速从故障中恢复的机制,以确保高可用性。
5.2 相关技术系统
- MapReduce 和 Hadoop 文件系统 :MapReduce 中的记录采用键值格式。它先读取存储在 Hadoop 分布式文件系统(HDFS)上的文件,将输入文件分割成多个部分,记录读取器逐行读取数据并传递给映射器。映射器处理数据,为每个记录分配分区号,数据按分区号排序后传递给归约器,归约器汇总结果并输出。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(输入文件):::process --> B(输入分割):::process
B --> C(映射阶段):::process
C --> D(分配分区号):::process
D --> E(按分区号排序):::process
E --> F(归约阶段):::process
F --> G(输出结果):::process
- Hadoop 分布式文件系统(HDFS) :HDFS 采用主从架构,NameNode 作为主节点控制数据操作并存储文件系统元数据,DataNode 作为从节点存储实际数据并执行操作。Journal nodes 确保 NameNode 的可用性,Zookeeper 维护 NameNode 的健康和连接信息。
- Yet Another Resource Negotiator(YARN) :YARN 负责作业调度和资源管理,将 MapReduce 与资源调度分离。它有三个组件:资源管理器(主节点,负责作业调度和资源分配)、节点管理器(从节点,使用容器执行计算任务)和应用程序管理器(存储作业并作为资源管理器和节点管理器之间的联络人)。
- Hadoop :Hadoop 是最流行的开源 MapReduce 框架,旨在将计算任务移动到数据所在位置,避免大量数据移动。它主要由 HDFS 和 YARN 两个组件组成,具有高容错性和可扩展性。Hadoop 有三个版本,每个版本都在不断改进,例如 Hadoop V2 用 YARN 取代了 JobTracker,Hadoop V3 采用了擦除编码来解决记录复制问题。Hadoop 使用三种调度方案分配任务:先来先服务(FIFO)、容量调度和公平调度。
6. 流处理技术
6.1 流处理概述
流处理是指在数据进入系统时立即处理,数据可以是无界流(有明确起点但无终点)或有界流(有明确起点和终点)。流处理可以分为有状态(先前处理的数据会影响未来结果)和无状态(不受先前数据影响)两种类型。
6.2 相关框架
- Apache Storm :是一个开源的分布式流处理框架,用于实时数据分析。它主要用 Clojure 编程语言编写,设计用于处理和分析大型无界数据流而无需存储实际数据,具有高可扩展性和低延迟的特点。Apache Storm 基于主从架构,由 Nimbus(主节点,负责任务分配和监控)、Supervisor(从节点,负责执行任务)和 Zookeeper(协调系统)三个主要组件组成。其数据处理模型由流(无界元组序列)、Spout(数据源,将数据转换为流)、Bolt(处理单元)和 Topology(存储实时应用逻辑)组成。
- Samza :是 Apache Software Foundation 用 Scala 和 Java 开发的开源流处理程序,旨在实现近实时数据处理速度,用于构建有状态应用程序。Samza 采用去中心化系统,每个作业有一个协调器管理。它有三个层:流层(提供可重放的数据源,通常使用 Apache Kafka)、执行层(处理任务调度和资源管理)和处理层(处理数据处理和流程管理)。Samza 将流和作业转换为更小的并行单元(分区和任务),以处理可扩展性问题。
- 混合数据处理框架 :能够处理流处理和批处理应用程序,继承了批处理(如 MapReduce)和流处理的特点,大多数混合解决方案使用有向无环图(DAG)进行高效数据处理。
- Apache Flink :是 ASF 开发的开源框架,可进行批处理和流处理,对有界和无界数据流进行有状态处理。Flink 确保低延迟、高吞吐量和容错性,程序可以用 Python、Java、Scala 和 SQL 编写。它使用窗口机制同时处理批处理和流处理,处理速度比 MapReduce 快很多。Flink 采用主从架构,JobManager 作为主节点控制应用程序执行,TaskManager 作为从节点处理数据流。Flink 使用三种调度方法:全量调度(适用于流处理应用)、从源延迟调度(适用于批处理作业)和流水线区域调度(解决并行任务调度问题)。为了实现容错,Flink 采用定期分布式快照和可重放输入数据源的方式。
- Spark :是最早的统一批处理和流处理框架之一,用于大规模数据处理。它旨在减少与 Hadoop 的 MapReduce 相比的处理延迟,引入了弹性分布式数据集(RDDs)进行内存处理以加速计算。Spark 采用主从架构,核心包括任务调度、故障恢复和内存管理。它没有自己的数据存储机制,使用其他存储机制(如 HDFS、HBase 和 Hive),并可以使用多种集群管理器(如 Standalone Spark Cluster Manager、Hadoop、YARN 或 Apache Mesos)。Spark 有多个高级库用于处理不同类型的数据,如 SparkSQL 用于结构化数据、Spark Streaming 用于流数据、GraphX 用于图处理。Spark 使用公平和 FIFO 调度器进行任务调度,其容错性来自底层程序的容错能力和文件复制。
7. 大数据的伦理问题
大数据技术已经无处不在,应用于各个行业。然而,大数据的广泛使用也带来了一些伦理问题。
- 数据收集缺乏知情同意 :现在许多人通过日常活动不断生成数据,但他们往往没有意识到数据的收集和使用程度。公司通过用户协议(可能未被阅读)收集数据,而大数据的规模使得在许多情况下难以获得个人的知情同意。这凸显了提高数据素养教育的必要性。
- 数据偏差 :大数据虽然规模庞大,但并不完美。采样偏差和选择偏差是大数据中特别需要关注的问题,因为数据通常来自非统计分析和研究目的的来源,如社交媒体和健身跟踪设备。研究人员需要了解数据中的偏差,以避免算法重现和强化这些偏差。
- 隐私和安全风险 :大数据源广泛,包含大量个人和群体信息。分析人员可以从社交媒体数据中轻松推断出个人的敏感信息,即使个人社交媒体账户设置为私密,也可能因朋友和家人的账户信息而被识别。
大数据的发展带来了巨大的机遇,但也需要我们认真对待其伦理问题,确保数据的合理使用,保护个人的权利和利益。在享受大数据带来的便利的同时,我们应该建立健全的伦理规范和监管机制,以促进大数据技术的健康发展。
更多推荐


所有评论(0)