type
status
date
slug
summary
tags
category
icon
password

分布式系统

定义

多个电脑通过网络连接,协同工作完成一个任务

特点

  1. 资源共享:节点之间共享硬件,数据和资源
  1. 并行处理
  1. 容错性

实现方式

集群

  • 定义:同构,本地网络,集中
  • 特点:资源共享,负载均衡,高容错
  • 示例:Hadoop,HPC

网格计算

  • 定义:异构,分散

云计算

  • 定义:通过互联网提供按需计算资源和服务,异构
  • 特点:动态扩展,按量付费;虚拟化;IaaS, PaaS, SaaS
  • 示例:AWS,Google, Clould Platform

集群

集群的瓶颈和问题

  1. 网络
  1. 节点故障
  1. 数据一致性:有效的同步和锁机制
  1. 负载均衡
  1. 安全性

进程和线程的区别

  • 进程是占一个独立内存空间
  • 线程是一个进程的子任务

多进程

多进程可以充分利用多核CPU的优势,实现真正的并行处理,如Web服务器、独立的计算任务等

多线程

适用于需要高效通信和共享资源的任务,如GUI应用、游戏开发等

Hadoop

用于处理大规模数据集的开源分布式计算框架

HDFS (Hadoop Distributed File System) 分布式文件系统

特性

  1. 分布式存储:将文件分成多个blocks,存在集群的不同节点上,通常为128MB或256MB
  1. 高容错:每个数据块都有副本再不同节点,方便数据恢复
  1. 高吞吐量:优化读写操作
  1. 流式数据访问:一次写入、多次读取

架构

  1. NameNode 主节点:HDFS的中心控制节点。负责元数据的协调和管理
  1. DataNode 数据节点:实际的数据储存和读取

工作流程

  1. 文件储存
    1. 一个文件写入HDFS,切块放到集群中的多个DataNode,NameNode记录数据块位置和副本信息
  1. 读取文件
    1. 客户端读取文件,NameNode提供数据块信息,DataNode交互数据
  1. 数据复制
    1. 每个数据块复制到多个 DataNode 上

HDFS的优势

  1. 扩展性
  1. 容错性
  1. 高吞吐量

HDFS的局限

  1. 小文件处理效率低
  1. 优化顺序写入,但是对随机写入的支持较差
  1. 更适合实时数据

MapReduce

由两个主要的计算阶段组成:Map 阶段和 Reduce 阶段。这两个阶段用于处理数据,并将其转换为有用的结果

Map阶段

处理输入数据,转成键值对
过程
  1. 输入数据被分成小块,分发给多个 Map 节点处理
  1. 每个节点对数据进行**映射(Map)**操作,输出为键值对(key-value pair)
示例
  • 假设输入数据是一个包含文本文件的日志文件。Map 函数可以统计每个单词的出现次数,将每个单词映射为一个键值对(单词,1)

Shuffle 阶段

负责对 Map 任务的输出进行排序、分组、分发,为 Reduce 任务提供有序的输入
  1. Map 端输出
    1. key-value pairs不会立即发送给 Reduce 节点,而是先写入本地磁盘的缓冲区(buffer)
  1. Partition 分区
    1. 哈希函数对key-value pairs进行分区
  1. Sort 排序
    1. 按键进行排序
  1. Combine 预聚合
    1. 将相同键的值在本地进行初步的聚合
  1. Shuffle数据传输
    1. 通过网络将分区后的数据从 Map 节点 传输到对应的 Reduce 节点

Reduce阶段

将 Map 阶段生成的中间键值对进行汇总和处理,生成最终的结果
过程
  1. Map阶段的键值对被分组和排序,具有相同键的分到一起
  1. Reduce函数将每个键的所有值进行合并,并输出一个新的键值对
示例
  • Reduce 函数将所有单词的出现次数汇总,生成每个单词的总出现次数

工作流程

  1. Split阶段:输入数据存在HDFS,分块,分发到各个计算节点
  1. Map阶段:读取,执行Map函数,转成键值对(Ip地址,次数n)
  1. Shuffle洗牌阶段
  1. Reduce任务:处理汇聚后的键值对,执行 Reduce 函数,将数据汇总成最终结果
  1. 输出结果:写入 HDFS 或其他存储系统中
⚠️
Combine的作用
  1. 降低I/O:提供给MapReduce的缓存的容量是有限的,缓存中Map结果的数量会不断增加,很快就会占满整个缓存,需要把缓存中的内容一次性写入磁盘,并清空缓存。先进行初步合并可以减少需要写入磁盘的数据量
  1. 降低网络传输成本:Combine减少数据规模,也就减少网络传输的耗时

优势

  1. 扩展性
  1. 容错性

局限

  1. 性能瓶颈:分组和排序阶段
  1. 对于复杂操作,图计算机器学习可能不太高效

YARN (Yet Another Resource Negotiator)

资源管理和作业调度框架,负责管理集群的计算资源,并调度作业在集群上运行
⚠️
旧版本 MapReduce 中的 JobTracker/TaskTracker 在可扩展性、内存消耗、可靠性和线程模型方面存在很多问题,需要开发者做很多调整来修复。
在 MR1 中,JobTracker 有两个功能,一个是资源管理,另一个是作业调用

核心组件

  1. ResourceManager(资源管理器):拥有调度决定权,调度资源进行分配
  1. NodeManager(节点管理器):负责节点的资源监控和管理
  1. ApplicationMaster(应用程序主控器):管理生命周期和资源需求,与 ResourceManager 交互

示例:MapReduce作业

  1. 提交作业:提交 MapReduce 作业到 YARN 集群
  1. 资源申请:ApplicationMaster 向 ResourceManager 请求资源,以启动任务
  1. 资源分配:ResourceManager 将资源分配给 ApplicationMaster,NodeManager 启动任务容器
  1. 任务执行:容器执行 MapReduce 任务,ApplicationMaster 监控任务状态
  1. 作业完成:作业完成后,资源被释放,ApplicationMaster 向 ResourceManager 报告作业状态

YARN 的局限性

  1. 复杂性
  1. 性能瓶颈
  1. 调度策略限制

Hadoop 的生态系统

Hive

数仓,提供SQL查询语言 (HiveSQL),用于在HDFS上执行数据查询和分析

Spark

集群计算系统,比 MapReduce 更快的内存计算能力,并支持多种数据处理任务,如批处理、实时处理、机器学习和图计算

代码框架

  1. Map和Reduce 函数
    1. 使用 Hadoop Streaming 运行作业

      Spark

      是 Hadoop MapReduce 的一种改进。Spark 提供了一个统一的分析引擎,可以支持 SQL 查询、流处理、机器学习和图计算等多种大数据处理任务

      核心概念

      RDD (Resilient Distributed Dataset)

      它是一个分布式的、只读的、不可变的数据集合。RDD 的设计旨在提供高效的并行计算,支持在大规模数据集上进行复杂的数据处理任务
      核心特性
      1. 弹性(Resilient):能够在节点失败时自动恢复
      1. 分布式(Distributed):
        1. RDD 被分布在集群中的多个节点上,支持并行计算。
        2. 每个 RDD 被分成多个分区(partition),这些分区分布在不同的节点上并行处理
      1. 不可变(Immutable):只读数据:RDD 是不可变的,即一旦创建就不能修改。对 RDD 的任何操作都会生成新的 RDD。

      Transformation 和 Action

      • Transformation:转换操作,如 map、filter,它们是懒执行的,只有在触发 Action 时才会实际计算
      • Action:行动操作,如 count、collect,它们会触发实际的计算

      优点

      1. 基于内存运算,处理速度快
      1. 提供更高级的API
      1. 容错性(RDD)
      1. 与 Hadoop HDFS、YARN都有兼容

      Spark和Hadoop的区别

      1. 场景不同
        1. Hadoop是一个分布式数据储存框架
          Spark是提供这种储存方式的数据处理工具
      1. 处理速度不同
        1. MapReduce:磁盘读取,处理,写入磁盘,速度会有影响
          Spark:磁盘读取,中间数据放入内存,完成必要的分析处理,再写回集群
      1. 容错性不同
        1. Hadoop:依赖于数据副本(HDFS)的持久化和任务重试来实现容错,恢复速度慢
          Spark:RDD的特性,能够更快速地恢复丢失的数据
       

      HPC

      HPC和Hadoop的区别

       
      • 高性能计算适用于计算密集型的作业,如果节点需要访问的数据量很庞大,就会遇到网络带宽的瓶颈
      • Hadoop尽量在节点上存储数据,就能实现本地快速访问,也就是数据本地化。

      工作流程

      1. 任务划分(Task Partitioning):将计算任务划分为多个子任务,以便并行执行。
      2. 任务分配(Task Assignment):分配给节点 (Slurm)
      3. 并行计算(Parallel Computation):MPI
      4. 数据交换(Data Exchange):计算节点之间交换中间结果和数据。
      5. 结果汇总(Result Aggregation)
      6. 结果输出(Output Results):使用存储系统(如并行文件系统)存储结果

      Slurm 资源和作业调度系统

      脚本示例

      提交作业

      MPI

      流程

      1. 初始化MPI环境:
          • comm = MPI.COMM_WORLD:获取全局通信器
          • rank = comm.Get_rank():获取当前进程的 rank
          • size = comm.Get_size():获取总进程数
      1. 读数据
      1. 数据分块并分配给每个进程
      1. 每个进程进行任务
      1. 结果收集到根进程

      Python代码示例 (mpi4py)

      服务模型分类

      IaaS(Infrastructure as a Service)
      • IaaS 提供基础的计算资源,如虚拟机、存储、网络等
      • 用户可以运行操作系统和应用程序
      • 具有高度的灵活性和控制权,适合需要定制化硬件和软件环境的用户
      • Google Cloud Platform的Compute Engine
      PaaS(Platform as a Service)
      • PaaS 提供开发和部署应用程序的平台
      • 用户可以专注于应用程序的开发和管理
      • Google Cloud Platform 的 App Engine
      SaaS(Software as a Service)
      • 提供通过互联网访问的软件应用程序
      • 用户不需要管理底层的基础设施和平台,只需使用服务商提供的应用程序
      • Microsoft Office 365

      部署模型分类

      公有云
      私有云
      混合云

      虚拟化技术

      虚拟化技术是一种通过软件创建虚拟版本的计算资源(如操作系统、服务器、存储设备或网络资源)的技术。这些虚拟版本可以在同一台物理硬件上运行,允许多个虚拟系统共享物理资源,从而提高资源利用率和灵活性

      虚拟机(VM)

      • 架构:在物理硬件上虚拟出完整的虚拟计算环境
      • 资源开销高,启动时间长,隔离性高
      • 应用场景:适合多租户环境、需要不同操作系统的应用、传统企业应用部署。

      容器 (Container)

      • 架构:容器共享宿主操作系统 (物理计算机上运行的基础操作系统) 的内核,只包含运行应用所需的依赖。
      • 资源开销低,启动时间短,隔离性低
      • 应用场景:适合微服务架构、现代应用开发、DevOps 环境。

      Docker

      一种开源的容器化平台

      镜像(Image)和容器(Container)

      1. 镜像(Image)
          • 镜像是一个只读的模板,它包含了文件系统内容、配置参数。静态不可变
      1. 容器(Container)
          • 容器是镜像的运行实例,其中包含了运行应用程序所需的所有内容
          • 容器可以被启动、停止、删除、暂停等操作

      原理

      Namespaces

      • 使用 Linux 的 Namespaces 技术来实现资源的隔离
      • 进程 ID,自己的虚拟网卡、IP 地址和路由表

      Cgroups(控制组)

      • 使用 cgroups 来限制和管理容器的资源使用,例如 CPU、内存、磁盘 I/O 等

      UnionFS(联合文件系统)

      • 实现镜像的分层存储
       

      Docker和Kubernetes (k8s)

      Docker用于容器的构建和运行,而Kubernetes用于容器集群的管理和编排

      Docker Compose

      1. 运行多个Docker容器应用程序的工具,使用一个单独的YAML文件来配置应用程序
      1. 使用一个命令就可以一次性启动、停止和管理整个应用程序的容器集合。
      举例
      在这个例子中,我们定义了三个服务:web、api和db。web服务使用Nginx镜像,api服务使用自定义的应用程序镜像,而db服务使用MySQL镜像。api服务依赖于db服务,在启动api服务之前,需要先启动db服务。我们还定义了端口映射,将主机的80端口映射到web服务的容器端口80上。
      通过这个Docker Compose文件,您可以使用docker-compose up命令一次性启动所有服务,或者使用docker-compose down命令停止并删除所有相关的容器。这使得管理和运行多个相关的容器应用程序变得更加简单和方便。

      Ansible

      服务器搭建教程(以Oracle为例)机器学习算法
      Loading...
      Boomshakalaka
      Boomshakalaka
      CJY
      小红书
      最新发布
      数据库系统和SQL
      2025-3-21
      Nodejs Windows安装教程
      2025-3-16
      计算机网络
      2025-3-16
      机器学习算法
      2025-3-16
      云里雾里看梅里-云南
      2025-3-16
      南半球纽约 - 悉尼
      2025-3-16