大数据平台简介

news2025/5/9 17:13:30

一、分布式系统基础架构

(一)定义与核心特征

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

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

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

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

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

(二) 关键组件

  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 = value
        else:
            chosen_value = highest_value
        accept_responses = send_accept(n, chosen_value)
        if len(accept_responses) >= majority:
            broadcast_learn(chosen_value)

# Acceptor逻辑
class Acceptor:
    def __init__(self):
        self.promised_id = 0
        self.accepted_id = 0
        self.accepted_value = None

    def on_prepare(self, n):
        if n > self.promised_id:
            self.promised_id = n
            return 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 = n
            self.accepted_value = value
            return Accepted(n, value)
        else:
            return Reject()

(十)总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高精度算法(加、减、乘、除、阶乘和)​

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 唯有主动付出,才有丰富的果…

实战设计模式之备忘录模式

概述 与解释器模式、迭代器模式一样,备忘录模式也是一种行为设计模式。备忘录模式允许我们保存一个对象的状态,并在稍后恢复到这个状态。该模式非常适合于需要回滚、撤销或历史记录等功能的应用场景。通过使用备忘录模式,开发者可以轻松添加诸…

吉尔吉斯斯坦工商会代表团赴齐河德瑞新能源汽车考察

德州齐河,2025年4月15日电 时中美贸易突变之际,乘国家一带一路之风。 展中国新能源之宏图,塑国贸体系之新方向。 今日上午,吉尔吉斯斯坦共和国工商会代表团一行三人受邀抵达济南,开启对德瑞新能源科技有限公司&…

无人机在农业中的应用与挑战!

一、无人机在农业中的作用 1. 提升作业效率与降低成本 无人机在喷洒农药、播种、施肥、吊运等环节显著提升效率。例如,湖北秭归县使用大疆T100无人机吊运脐橙,单次85公斤的运输任务仅需2分钟,而人工需1小时,综合成本降低250元…

QT网络拓扑图绘制实验

前言 在网络通讯中,我qt常用的是TCP或者UDP协议,就比方说TCP吧,一台服务器有时可能会和多台客户端相连接,我之前都是处理单链接情况,最近研究图结构的时候,突然就想到了这个问题。那么如何解决这个问题呢&…

支持中文对齐的命令行表格打印python库——tableprint

文章目录 快速入门 还在为表格中含有中文,命令行打印无法对齐而苦恼吗? 还在为冗长的数据添加代码而抓狂吗? tableprint来了!!!,它完美的解决了上述两个问题,快来试试吧!…

从《周游记3》演绎歌剧版《菊花台》,周杰伦婚礼曲目意大利文版惊喜亮相

今天(4月19日)22:00,由魔胴西西里咖啡冠名的户外实境互动综艺《周游记3》第四期即将播出。本期节目中,“J式之旅”发起人周杰伦和林暐恒、杜国璋、陈冠霖、陈冠廷,将继续意大利之旅,从那不勒斯的百年老店到…

生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)

免疫检查点分子与肿瘤免疫治疗 免疫检查点分子与肿瘤免疫治疗-2

CasualLanguage Model和Seq2Seq模型的区别

**问题1:**Causal Language Modeling 和 Conditional Generation 、Sequence Classification 的区别是什么? 因果语言模型(Causal Language Model): 预测给定文本序列中的下一个字符,一般用于文本生成、补全句子等,模型…

verilog float mult

module pipe_float_mul(input wire clk ,// 时钟信号input wire en ,// 使能信号input wire rst_n ,// 复位信号input wire round_cfg ,// 决…

微信小程序调用yolo目标检测模型

目录 后端 前端微信小程序 完整代码 后端 利用Flask,调用目标检测模型,后端代码如下。 # flask_yolo.py from flask import Flask, request, jsonify from ultralytics import YOLO from PIL import Imageapp Flask(__name__) model_path best.p…

Flink框架十大应用场景

Flink框架适合应用的场景 1. 流式数据处理 Flink框架最常用的应用场景是流式数据处理。流式数据处理是指对实时数据进行处理,以便及时地做出决策。例如,一个电商网站需要对用户的行为进行实时分析,以便根据用户的兴趣和行为推荐商品。Flink框架可以帮助电商网站实时地处理数…

【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】

1. 背景 我们会在很多资料上看到 BluetoothPhoneService 类,但是我们在实际 aosp 中确找不到具体的实现, 这是为何? 这是一个很好的问题!虽然在车载蓝牙电话场景中我们经常提到类似 BluetoothPhoneService 的概念,但…

【Harmony】文本公共接口EditMenuOptions的使用

文章目录 一、EditMenuOptions介绍二、相关接口介绍2.1、editMenuOptions2.2、EditMenuOptionsonCreateMenu函数说明onMenuItemClick函数说明 2.3、TextRange对象说明2.4、TextMenuItem对象说明2.5、TextMenuItemId属性ofequals 三、简单案例 一、EditMenuOptions介绍 EditMen…

《软件设计师》复习笔记(14.1)——面向对象基本概念、分析设计测试

目录 一、面向对象基本概念 对象(Object) 类(Class) 抽象(Abstraction) 封装(Encapsulation) 继承(Inheritance) 多态(Polymorphism&#…

JS中实现类似sleep、wait、delay的延时功能

前言 编写代码时很多时候需要进行流程化的操作,各个流程间通常需要等待一定时间,这在很多语言中通常可以使用 sleep 、 wait 、 delay 等函数来实现。JavaScript原生并没有类似的功能,想要延时通常就是使用 setTimeout(functionRef, delay) …

Banana Pi BPI-RV2 RISC-V 路由器开发板发售, 全球首款RISC-V路由器

Banana Pi BPI-RV2 开源路由器是矽昌通信和⾹蕉派开源社区(Banana Pi )合作设计, 联合打造全球首款RISC-V架构路由器开发板。 这是香蕉派开源社区与矽昌通信继BPI-Wifi5 低成本Wifi5 路由器合作之后的又一力作,为全球开发者与商业客户提供基于…

MAUI项目iOS应用以进 App Store 分发

目录 一.通过Visual Studio分发应用1. 登录Apple 开发者帐户到 Visual Studio2.创建分发证书和配置文件3. 分发应用4. 在App Store Connect 中创建应用程序记录5. 如果你想使用mac发布应用 一.通过Visual Studio分发应用 1. 登录Apple 开发者帐户到 Visual Studio 首先我们要…

CentOS 7系统yum报错解决方案(CentOS 7官方EOL问题修复)

摘要 解决CentOS 7因EOL导致的yum update报错问题,通过替换阿里云镜像源恢复软件安装功能,包含详细操作步骤、操作截图、验证方法与备选镜像源,附有安全风险提示。 一、故障现象与原因分析 1.1 典型报错信息 # 执行yum命令时出现&#xff…

解决Windows update服务启动拒绝访问的问题 | wuauserv 注册表拒绝访问的方法

在某些情况下,为了配置系统更新相关服务(例如禁用 Windows 自动更新),我们需要更改注册表中 wuauserv 项的权限。本教程将带你一步步操作,成功获取并修改权限。 修改注册表路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv 步骤一:打开注册表编辑…