当前位置: 首页 > news >正文

大数据平台简介

一、分布式系统基础架构

(一)定义与核心特征

分布式系统是由多台计算机(节点)通过网络协作组成的系统,对外表现为一个统一整体。其核心特征包括:

  • 去中心化:节点平等或分角色协作(如主从架构)。

  • 高容错性:部分节点故障不影响整体服务(通过冗余实现)。

  • 可扩展性:可动态增加节点以提升性能或容量。

  • 透明性:用户无需感知底层分布细节(如数据位置)。

(二) 关键组件

  1. 计算节点
  • 服务器节点 :这些是分布式系统中的主要处理单元。例如,在一个大型的分布式计算集群中,有多台服务器节点,每台服务器都有自己的 CPU、内存和存储设备。它们可以执行各种计算任务,如运行应用程序、处理数据查询等。
  • 客户端节点 :用于向分布式系统发送请求并接收结果。比如,用户的计算机作为客户端节点,通过浏览器向分布式的 Web 服务系统发送 HTTP 请求,获取网页内容。
  1. 网络通信子系统
  • 协议 :分布式系统中的节点通过网络协议进行通信。常见的协议有 TCP/IP 协议,它保证了数据在网络中的可靠传输。例如,在分布式文件系统中,节点之间通过 TCP/IP 协议来传输文件数据块。
  • 消息传递机制 :节点之间通过消息传递来协同工作。这些消息可以是请求消息(如请求某个数据块)、响应消息(如返回计算结果)等。例如,在分布式数据库系统中,当一个节点需要查询另一个节点上的数据时,会发送查询消息,接收节点处理后返回结果消息。
  1. 存储子系统
  • 分布式存储架构 :数据在多个节点上进行存储。例如,分布式文件系统(如 Hadoop 分布式文件系统 HDFS)将文件分割成多个数据块,存储在不同的节点上。这样可以提高数据的存储容量和可靠性。
  • 数据副本机制 :为了保证数据的高可用性和容错性,数据通常会有多个副本存储在不同的节点上。如果一个节点出现故障,系统可以从其他有副本的节点获取数据。

(三) 架构模式

  1. 主从架构(Master - Slave)
  • Master节点:负责协调与管理(如分配任务、监控状态)多个从节点(Slave)。主节点通常处理诸如任务分配、状态监控等管理工作。
  • Slave节点:执行具体任务(如存储数据、运行计算)。
  • 典型案例: 例如,在 Hadoop 的 YARN 资源管理框架中,ResourceManager (主节点),它负责分配计算资源给各个 NodeManager(从节点),NodeManager 则负责管理单个节点上的资源。
  1. 对等架构(P2P == Peer-to-Peer)
  • 原理 :所有节点地位平等,每个节点既可以作为客户端请求服务,也可以作为服务器提供服务。
  • 优势: 无单点故障,但协调复杂度高
  • 典型案例: 比如,BitTorrent 文件共享系统就是基于 P2P 架构。每个下载文件的用户(节点)在下载的同时也向其他节点上传自己已有的文件片段,提高了文件传输的效率。

(四)一致性模型

  • 强一致性: 所有节点数据实时一致(如金融系统,实现成本高)

  • 最终一致性: 允许短暂不一致,但最终同步(如电商库存,高可用优先)

(五) CAP定理

  1. 分布式系统最多同时满足以下两项:
  • 一致性(consistency): 所有节点数据一致

  • 可行性(availability): 每个请求都能获得响应

  • 分区容错性(partition tolerance): 网络分区时系统仍可运行

    例如:HBase选择CP(一致性与分区容错),Cassandra选择AP

(六) 容错与扩展机制

  • 数据冗余: 副本机制(如HDFS默认3副本)

  • 心跳检测: Mater定期检查Slave存活状态

  • 弹性伸缩: 动态增减节点(如云平台的自动扩缩容)

二、Hadoop 生态圈中分布式组件的作用及架构原理

(一) HDFS

  1. 作用
  • HDFS(Hadoop 分布式文件系统) 是 Hadoop 生态系统中的存储层,它提供了高吞吐量的数据访问,适合大规模数据集的存储。它可以存储海量的数据,如互联网公司的日志数据、用户行为数据等,这些数据可能达到 PB 级别。它将数据块(默认 128MB)分布存储在多个节点上,为上层应用提供高可靠的数据存储服务。
  1. 架构原理
  • NameNode 和 DataNode

    • NameNode :主节点,管理元数据(文件目录结构、块位置),单点故障可通过HA(高可用)方案解决;管理文件系统的命名空间,维护文件与数据块的映射关系以及数据块与 DataNode 的映射关系。例如,当用户要读取一个文件时,NameNode 会告诉客户端该文件由哪些数据块组成,以及这些数据块存储在哪些 DataNode 上。
    • DataNode :从节点,负责存储实际的数据块。它们定期向 NameNode 发送心跳信号和块列表,汇报自己的状态和存储的数据块信息。当 NameNode 接收到写入文件的请求时,它会挑选合适的 DataNode 来存储数据块。
  • 数据读写流程

    • 写数据 :客户端切分文件→联系NameNode获取DataNode列表→直接写入多个DataNode副本。DataNode 之间会进行数据校验和存储操作,确保数据的正确性和可靠性。
    • 读数据 :客户端向 NameNode 请求文件,从NameNode获取块位置→从最近DataNode读取数据 → 再将数据块组合成完整的文件。

(二)YARN(Yet Another Resource Negotiator)

  1. 作用
  • YARN 是 Hadoop 的资源管理框架,它负责管理整个集群的计算资源(CPU、内存等),并将这些资源分配给各个应用程序(如 MapReduce 作业、Spark 作业等)。它使得多种类型的分布式应用可以共享同一个集群资源,提高了集群资源的利用率。
  1. 架构原理
  • ResourceManager(RM)和 NodeManager(NM)

    • ResourceManager :主节点,负责整个集群资源的管理和分配。它有一个全局的资源视图,了解每个节点的资源情况和各个应用的资源需求。例如,当一个 MapReduce 作业提交到集群时,ResourceManager 会根据作业的资源请求(如需要的 CPU 核心数、内存大小等)来分配合适的节点资源。
    • NodeManager :从节点,运行在每个集群节点上,负责管理单个节点上的资源。它向 ResourceManager 汇报节点的资源使用情况,并执行RM指令来启动或停止容器(Container)。容器是 YARN 中资源分配的单位,它封装了 CPU、内存等资源。
  • ApplicationMaster(AM)

    • 每个应用专属,负责任务调度与容错。它是每个应用的一个特殊任务,负责与 ResourceManager 协商资源,并与 NodeManager 交互来启动和管理任务。
    • 例如,MapReduce作业的AM管理Map/Reduce任务:在 MapReduce 作业中,ApplicationMaster 会向 ResourceManager 申请 Map 任务和 Reduce 任务所需的资源,当资源分配好后,它会在相应的 NodeManager 上启动这些任务。

(三)MapReduce

  1. 作用
  • 分布式批处理框架,适用于离线计算:MapReduce 是一种分布式计算模型,主要用于大规模数据的并行处理。它可以将一个大型的计算任务分解成多个小的子任务(Map 任务),在多个节点上并行执行这些子任务,然后通过 Reduce 任务将子任务的结果汇总。例如,在对海量的网页数据进行关键词统计时,Map 任务可以统计每个网页中的关键词出现次数,Reduce 任务将来自不同网页的相同关键词出现次数进行汇总。
  1. 架构原理
  • Map 阶段

    • 用户定义的 Map 函数接收输入的键值对(如文件中的每一行文本及其行号),对数据进行处理,输出中间键值对。例如,对文本数据进行单词统计,Map 函数会将每个单词作为中间键,单词出现的次数(初始为 1)作为中间值输出。这些中间键值对会被分区(Partition)和排序,相同键的键值对会被分到同一个 Reduce 任务。
  • Reduce 阶段

    • 用户定义的 Reduce 函数接收经过排序和分组后的中间键值对,对相同键对应的值进行汇总等操作,输出最终结果。例如,在单词统计中,Reduce 函数会将所有相同单词对应的中间值相加,得到该单词在所有输入数据中的总出现次数。整个 MapReduce 过程由 JobTracker(在旧版本 Hadoop 中,是主节点,负责作业调度和任务分配)和 TaskTracker(从节点,负责执行具体的 Map 和 Reduce 任务)等组件协同完成。

(四)HBase

  • 作用:分布式列式数据库,支持低延迟随机读写(如实时查询)。
  • 架构原理
    • RegionServer:存储数据Region(按行键范围划分),处理读写请求。
    • HMaster:管理Region分配与负载均衡。
    • 依赖组件:ZooKeeper管理集群状态,HDFS持久化数据。
    • LSM树结构:数据先写入内存MemStore,定期合并到磁盘StoreFile。

(五) Hive

  • 作用:数据仓库工具,通过类SQL(HiveQL)查询HDFS数据。
  • 架构原理
    • 元数据存储:使用MySQL等数据库存储表结构信息。
    • 执行引擎:将HiveQL转换为MapReduce/Tez/Spark作业(通过Hive on Spark加速)。
    • 适用场景:离线数据分析(如生成每日报表)。

(六) Spark

  • 作用:内存计算引擎,支持批处理、流处理与机器学习。
  • 架构原理
    • 弹性分布式数据集(RDD):不可变数据集合,支持转换(Transformation)与行动(Action)操作。
    • DAG调度器:将任务拆分为有向无环图优化执行流程。
    • 优势:通过内存缓存减少磁盘IO,比MapReduce快10~100倍。

(七) ZooKeeper

  • 作用:分布式协调服务,解决集群一致性、选主节点等问题。
  • 架构原理
    • Zab协议:确保所有节点状态一致(类似Paxos算法)。
    • 持久节点+临时节点:实现服务注册与发现(如HBase RegionServer注册)。
    • 典型应用:HDFS HA(通过ZKFC监控NameNode状态)。

(八)其他关键组件

  • Flume:日志采集工具,通过Agent(Source+Channel+Sink)传输数据至HDFS。
  • Sqoop:关系数据库与HDFS间数据迁移工具(基于MapReduce实现并行导入导出)。
  • Kafka:分布式消息队列,解耦生产者与消费者,支持高吞吐流数据传输。

总结:Hadoop生态协作流程

  1. 数据采集:Flume/Sqoop将数据导入HDFS/HBase。
  2. 存储:HDFS提供底层存储,HBase支持实时访问。
  3. 资源管理:YARN统一调度MapReduce、Spark等计算任务。
  4. 计算与分析:MapReduce处理离线任务,Spark加速计算,Hive提供SQL查询。
  5. 协调与监控:ZooKeeper管理集群状态,确保服务高可用。

通过以上组件协同,Hadoop生态构建了一个从数据存储、计算到分析的全链路分布式处理平台。

三 Paxos算法

(一)Paxos算法的背景与目标

  • Paxos 是分布式系统中用于在多个节点之间达成一致性(Consensus)的核心算法,由Leslie Lamport于1990年提出。
  • 核心目标是在允许节点故障(包括网络分区、消息丢失等)的异步网络环境中,确保多数派(Quorum)节点对某个值(Value)达成一致。
  • 典型应用场景: 分布式锁服务(如ZooKeeper)、数据库主节点选举(如Google Chubby)、分布式事务提交(如Spanner)等。

(二)Paxos的核心角色与流程

Paxos算法涉及三类角色:

  1. Proposer(提案者):提出提案(Proposal),包含一个唯一的提案编号(Proposal ID)和一个值(Value)。
  2. Acceptor(接受者):对提案进行投票,决定是否接受某个提案。
  3. Learner(学习者):学习最终被选定的值(可能不参与投票)。

算法的核心分为两个阶段

  • Prepare阶段(Phase 1):Proposer尝试获取多数派Acceptor的承诺。
  • Accept阶段(Phase 2):Proposer将提案提交给Acceptor,由多数派确认后达成共识。

三、算法步骤分解

1. Prepare阶段

  • Proposer行为

    1. 生成一个全局唯一的提案编号N(通常由时间戳+节点ID组成)。
    2. 向所有Acceptor发送Prepare(N)请求,要求它们承诺不再接受编号小于N的提案。
  • Acceptor行为

    • 若收到的Prepare(N)是当前最大的提案编号:
      1. 返回Promise(N, accepted_value),其中accepted_value是该Acceptor已接受的最高编号提案的值(若存在)。
      2. 承诺不再接受编号小于N的提案。
    • 若编号小于已承诺的提案编号,则忽略该请求。

2. Accept阶段

  • Proposer行为

    1. 若收到多数派Acceptor的Promise响应
    • 从所有响应中选择最高编号的提案值作为本次提案的值(若存在)。
    • 若所有响应中均无已接受的提案,则Proposer可自由选择一个值(如业务逻辑中的初始值)。
    1. 向所有Acceptor发送Accept(N, Value)请求。
  • Acceptor行为

    • 若收到的Accept(N, Value)请求的编号N 不小于 其已承诺的编号:
      1. 接受该提案,并持久化存储(N, Value)
      2. 返回Accepted(N, Value)给Proposer和Learner。

3. Learner学习最终值

  • 当Learner发现某个提案被多数派Acceptor接受时,该值即为最终选定值,并通知所有节点。

四、Paxos的数学保证

Paxos通过以下约束保证一致性:

  1. 唯一性(Safety)
  • 每个提案编号唯一,且Acceptor仅接受更高编号的提案。
  • 一旦某个值被多数派接受,后续所有更高编号的提案必须选择该值(通过Prepare阶段传递历史值实现)。
  1. 活性(Liveness)
  • 只要存在一个Proposer能持续生成更高编号的提案,且网络通信恢复,最终能达成共识。
  • 可能因竞争导致活锁(多个Proposer不断生成更高编号提案),需通过随机退避或选举主Proposer解决。

五、Paxos的变种与优化

  1. Multi-Paxos
  • 针对连续提案的优化,通过选举一个Leader(主Proposer)减少Prepare阶段的重复通信。
  • 核心思想:一旦Leader被选出,后续提案可跳过Prepare阶段,直接进入Accept阶段,提升效率。
  1. Fast Paxos
  • 允许客户端直接向Acceptor发送提案,减少Proposer的中间角色,降低延迟。
  • 需要更高的容错条件(多数派需满足2f+1节点中的f+1同意)。
  1. Cheap Paxos
  • 在非关键路径上减少节点数量,降低成本,但牺牲部分容错能力。

六、Paxos的实际应用

  1. Google Chubby
  • 分布式锁服务,使用Paxos选举主节点并维护配置信息。
  1. ZooKeeper的Zab协议
  • 基于Paxos思想改进,通过主从架构+事务日志实现原子广播。
  1. 分布式数据库(如Spanner、TiDB)
  • 使用Paxos协议跨副本同步数据,保证强一致性。

七、Paxos的局限性

  • 复杂度高:算法逻辑复杂,实现容易出错(Lamport曾称“Paxos的简单性是其最难理解的部分”)。
  • 性能开销:两阶段通信(Prepare + Accept)导致延迟较高,Multi-Paxos优化后仍可能成为瓶颈。
  • 活锁问题:需额外机制(如Leader选举)避免无限竞争。

八、Paxos与其他共识算法的对比

算法核心思想优点缺点
Paxos基于提案编号的多数派承诺机制理论严谨,容错性强实现复杂,活锁风险
Raft通过Leader选举简化流程易于理解与实现强依赖Leader,扩展性受限
Zab主从架构+事务日志原子广播高吞吐,适合顺序一致性场景需依赖ZooKeeper的特定设计

九、代码示例(伪代码)

# Proposer逻辑
def proposer_run(value):n = generate_proposal_id()prepare_responses = send_prepare(n)if len(prepare_responses) >= majority:highest_value = select_highest_accepted_value(prepare_responses)if highest_value is None:chosen_value = valueelse:chosen_value = highest_valueaccept_responses = send_accept(n, chosen_value)if len(accept_responses) >= majority:broadcast_learn(chosen_value)# Acceptor逻辑
class Acceptor:def __init__(self):self.promised_id = 0self.accepted_id = 0self.accepted_value = Nonedef on_prepare(self, n):if n > self.promised_id:self.promised_id = nreturn Promise(n, self.accepted_id, self.accepted_value)else:return Ignore()def on_accept(self, n, value):if n >= self.promised_id:self.accepted_id = nself.accepted_value = valuereturn Accepted(n, value)else:return Reject()

(十)总结

Paxos是分布式系统领域的基石算法,通过严谨的数学证明保证了在异步不可靠网络中的一致性。尽管其实现复杂度较高,但通过Multi-Paxos等优化仍被广泛应用于工业级系统。理解Paxos的核心思想(如提案编号、多数派承诺)是掌握分布式共识机制的关键。对于实际系统设计,可结合场景选择Raft等简化版本,或在Paxos基础上进行定制化改进。

相关文章:

  • 《Operating System Concepts》阅读笔记:p738-p747
  • Java从入门到“放弃”(精通)之旅——数组的定义与使用⑥
  • 批量创建OpenStack实例
  • 【java实现+4种变体完整例子】排序算法中【堆排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • doris/clickhouse常用sql
  • C++镌刻数据密码的树之铭文:二叉搜索树
  • 与终端同居日记:Linux指令の进阶撩拨手册
  • 区块链木材业务服务平台:商贸物流新变革
  • 18、TimeDiff论文笔记
  • 【综述】一文读懂卷积神经网络(CNN)
  • 【2025】Datawhale AI春训营-RNA结构预测(AI+创新药)-Task2笔记
  • [dp20_完全背包] 介绍 | 零钱兑换
  • 包含物体obj与相机camera的 代数几何代码解释
  • 220V转5V转12V电机驱动供电WT5105
  • 【25软考网工笔记】第二章(7)多路复用技术
  • Git 命令速查手册
  • 游戏引擎学习第234天:实现基数排序
  • Chromium 134 编译指南 macOS篇:编译优化技巧(六)
  • 探索 .bat 文件:自动化任务的利器
  • C++选择排序原理及实现
  • 新城市志|全球供应链动荡加剧,中国稳外贸有信心有底气
  • 报告:去年物业服务百强企业营业收入均值同比增长3.52%
  • 在历史上遭到起诉的杀人动物记录中,为什么猪如此普遍?
  • 特朗普:“百分之百”相信能与欧盟达成贸易协议
  • 又有多名券商员工考公转型,近两年证券从业人员数量减逾7%
  • 对峙10小时,韩警方搜查总统府及官邸再次宣告失败