一、分布式
1、基本概念
分布式计算是一种计算模型,其中任务被分解为较小的子任务,这些子任务在多个计算节点(如计算机或服务器)上并行执行,以加快处理速度和提高计算能力。分布式计算的目标是通过协调这些节点来解决大规模复杂问题,通常涉及海量数据或计算密集型任务。
分布式网络存储技术是将数据分散地存储于多台独立的机器设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性。
a、 分布式计算 关注如何将计算任务分配到多个节点上并高效地完成计算。
b、分布式存储关注如何将数据分散存储在多个节点上,并通过网络提供可靠、可扩展的存储服务。
2、分布式计算的关键概念
1)节点
节点是分布式系统中的单个计算机或服务器。每个节点可能独立运行和执行部分任务。
节点通常通过网络连接并彼此通信。
2)集群
由多个节点组成的计算资源池,用于并行处理和协作计算,实现同一业务。
3)任务分配与协调
主节点(或协调器)负责将任务分配到不同的工作节点,收集结果并整合。
4)网络通信
节点之间需要通过网络进行通信,使用消息传递协议(如 RPC、HTTP)来协调和共享数据。
5)数据分布
数据在不同节点间进行分片和分布,以便提高数据处理能力并减少瓶颈。
6)微服务
拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行。
或
微服务架构(Microservices Architecture)是一种将复杂应用程序拆分成多个小型、独立的服务的方法,这些服务可以分布式地运行在不同的机器、容器或虚拟机上。每个微服务负责特定的业务功能,并且可以独立开发、部署和扩展。微服务之间通过网络进行通信,通常使用轻量级的协议(如 HTTP/REST、gRPC 或消息队列)。
7)分布式
是一种工作方式,若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统,将不同的业务分布在不同的地方。
8)负载均衡
负载均衡(Load Balancing)是一种将请求或任务分配到多个服务器或资源上的技术,以确保系统能够平稳、高效地运行。其主要目的是通过合理分配工作负载,防止单一服务器过载,同时提高系统的可用性和可靠性。
负载均衡的主要类型包括:
a、轮询 (Round Robin):将请求按顺序依次分配给每台服务器,简单且高效。
b、最少连接 (Least Connections):优先将请求分配给当前连接数最少的服务器,适用于服务器性能差异较大的场景。
c、源地址哈希(Source IP Hashing):根据客户端的IP地址计算一个哈希值,将相同IP的请求始终分配给同一台服务器,以确保会话一致性。
3、分布式计算的优点
a、高性能 :通过并行处理,分布式计算能够在更短时间内完成大规模计算任务。
b、可扩展性 :系统可以通过增加节点的数量来扩展计算能力。
c、容错性:即使某些节点故障,系统仍然可以继续运行,通过数据冗余和故障恢复来保证任务完成。
4、常见技术和框架
二、Hadoop
1、什么是Hadoop
Hadoop 是一个开源的分布式计算框架,主要用于处理大规模数据集。它提供了一个可靠、可扩展且高效的存储和处理平台,特别适用于需要存储和处理海量数据的应用。Hadoop 采用分布式存储和计算模型,能够在成千上万的节点上处理数据,支持大数据的存储、处理和分析。
2、Hadoop的组成
3、Hadoop优势或特点
(1)高可靠性 :Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
(2)高扩展性 :在集群间分配任务数据,可方便的扩展数以千计的节点。
(3)高效性 :在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
(4)高容错性:能够自动将失败的任务重新分配。
4、Hadoop的三种安装方式
单机模式、伪分布式模式和分布式模式。
4、Hadoop和Hadoop生态系统
三、HDFS
1、什么是HDFS
HDFS(Hadoop Distributed File System) 是一个分布式文件系统,是 Hadoop 生态系统中的核心组成部分,用于分布式存储和管理大规模数据。它设计用于在廉价硬件上存储超大文件,同时提供高吞吐量的数据访问能力。解决的是海量存储问题。
2、HDSF架构
采用主从架构 ,包括一个NameNode(主节点)和多个从节点DataNode(数据节点),以及Secondary NameNode(辅助主节点)。NameNode负责管理文件系统的命名空间和访问控制,而DataNode负责实际的数据存储和处理。
(1) NameNode 是 HDFS 的核心组件,负责管理整个文件系统的元数据,如文件目录结构、文件块位置、块到数据节点的映射等。它是一个单点控制器(master),不存储实际数据,而是存储数据块的元信息,知道HDFS中任何给定文件的块列表及其位置。
(2) DataNode 是 HDFS 的工作节点,负责存储实际的数据块。每个数据块会被存储在不同的 DataNode 中以实现数据冗余。DataNode 定期向 NameNode 发送心跳信号,报告其健康状况和存储块的信息。
(3)Secondary NameNode辅助主节点的作用是定期获取 NameNode 的元数据快照,并合并元数据日志以防止 NameNode 的内存过载。它不是 NameNode 的备份,而是用来帮助恢复或重建元数据快照。
3、HDFS的工作原理
4、HDFS特性
a、高容错性 :通过数据冗余实现,系统可以容忍节点失效而不丢失数据。
b、高吞吐量 :适合处理大批量数据的应用,如日志分析和大规模数据处理。
c、流式数据访问 :设计为一次写入多次读取,适用于大数据处理和分析。
d、可扩展性:能够随着节点的增加而扩展存储和计算能力。
5、常见面试题目
5.1如何解决NameNode的单点故障问题
由于NameNode存储的是整个HDFS的元数据,如果它出现故障,会导致整个HDFS系统的不可用,这就是所谓的"单点故障"(SPOF,Single Point of Failure)。
解决办法:
(1)、HDFS High Availability (HA) 方案(最常用)
(2)、NameNode Federation(联盟)
(3)、Checkpointing 和 Secondary NameNode
(4)、Distributed Metadata Storage(分布式元数据存储)
对于超大规模的HDFS系统,可以考虑将元数据存储分布在多个节点上,以减少单点故障的影响。例如,通过使用分布式数据库或元数据存储方案(如Apache HBase、Zookeeper)来存储部分元数据,使得即使NameNode故障,其他组件也能提供一定的恢复能力。
总结:
(1)HDFS High Availability (HA) :配置主备NameNode,利用ZooKeeper进行故障转移,使用JournalNode保证元数据的一致性。
(2)NameNode Federation :通过多个NameNode分担元数据管理,实现更高的可扩展性和容错性。
(3)Checkpointing和Secondary NameNode :虽然这并不是完全的故障转移解决方案,但可以通过定期检查点提高恢复速度。
(4)分布式元数据存储:使用分布式数据库存储部分元数据来降低单点故障的风险。
四、MapReduce
1、什么是MapReduce
MapReduce 是一种编程模型和计算框架,用于并行处理大规模数据集。MapReduce将任务分解为Map(映射)和Reduce(归约)两个阶段,开发人员只需通过编写Map和Reduce函数,不需要考虑分布式计算框架内部的运行机制,即可在Hadoop集群上实现分布式运算。MapReduce可以有效地处理大规模数据集的计算问题,并提供了容错性和可伸缩性。
2、MapReduce作业的组成成分
一个 MapReduce 作业包括两个主要部分:Map 阶段 和 Reduce 阶段,它们的工作原理如下:
2.1 Map阶段
2.2 Shuffle 和 Sort 阶段
2.3 Reduce 阶段
3、MapReduce作业执行的简要流程
4 优缺点
五、Yarn
1、什么是YARN
YARN是Hadoop 的一个核心组件,它负责集群资源的管理和作业调度,目的是将资源管理和作业调度功能与 MapReduce 计算框架分离,使得 Hadoop 更加灵活,支持多种计算框架(如 MapReduce、Spark、Tez 等)共享集群资源。
2、YARN的核心组件
3、YARN的资源调度策略
4、YARN的资源调度过程
六、Spark
1、什么是Spark
Spark 是一个基于内存计算的分布式计算框架,支持数据并行和任务并行的计算模型。
2、Spark特点
(1)速度快 :Spark 提供了比 Hadoop MapReduce 更高的计算速度,通过内存计算大大减少了磁盘 I/O 的开销,提供了非常高的处理性能。
(2)易于使用 :Spark 提供了一个简单易用的编程接口,支持多种编程语言,包括Java\Python\R语言等。
(3)通用性强 :Spark 提供了丰富的库和模块,适用于各种数据处理需求,如批处理、流处理、机器学习和图计算等。
(4)兼容性高:Spark 可以非常方便地与其他的开源产品进行融合。
3、Spark的运行模式
- local 本地模式(单机)
- standalone 独立集群模式
- standalone-HA 高可用模式
- on yarn 集群模式
- on mesos 集群模式
- on cloud 集群模式
4、Spark核心组件
5、Spark的执行模型
Spark 的执行模型是基于 DAG(有向无环图) 和 集群调度 的分布式计算模型。这个模型将作业分解为多个任务并通过集群节点进行并行执行。
粗略地讲:Spark 的执行模型通过 DAG 图、任务划分、Stage 划分等机制,将用户的作业并行化,并通过调度和集群管理器来优化执行过程。整个执行过程包括从 Driver 接收作业、将作业拆分成多个 Stage 和 Task、分配到 Executor 上执行、进行必要的 Shuffle 处理,最后通过容错机制保证计算的可靠性。
详细地说:在 Spark 中,每个操作(如 map、reduce)都对应着一个作业 (Job)。当用户提交一个 Spark 应用 时,它会被划分为一个或多个作业 。一个作业通常会被划分为多个 Stage,每个 Stage 被划分成若干个任务 ,每个任务在集群的不同节点上并行执行。任务是 Spark 的基本执行单元,操作具体的数据分区。Spark 使用 DAG 来表示作业的执行计划。每个作业会被表示为一个 DAG 图 ,其中每个节点表示一个操作(如 map、reduce),每个边表示操作之间的数据传输依赖关系。Spark 会根据 DAG 将作业划分为多个阶段,逐一执行这些阶段,并在执行过程中进行数据的依赖管理。
a、Spark 的调度器 负责将作业划分为任务,并调度这些任务到集群中的不同节点上执行。
b、Spark 支持多种集群管理器 ,如 YARN、Mesos 和 Kubernetes。集群管理器协调资源分配,启动 Executor,执行任务。
c、Executor(执行器 ) 是 Spark 中的一个进程,负责执行任务,并存储计算结果。Executor 会从 Driver 获取任务,并在集群节点上执行这些任务。每个 Executor 会处理一个或多个任务,并将结果返回给 Driver。
d、Driver 是 Spark 应用的控制中心,它负责协调应用的执行过程,接收用户的作业并将其分发到集群上的 Executor 进行执行。
5、RDD
4.1 什么是RDD
RDD(Resilient Distributed Dataset) 叫做弹性分布式数据集,是 Spark 的核心抽象,是一种不可变的、可分区、元素可以并行计算的数据集合。
4.2 RDD的操作/算子
转换操作(Transformation) :转换操作返回一个新的 RDD,但不会立即计算。
动作操作(Action):动作操作会触发实际的计算,返回值不是 RDD(无返回值或返回其他的,例如RDD中元素个数)
4.3 RDD特性
- 基于内存 :RDD(弹性分布式数据集)基于内存计算的核心思想是将数据加载到内存中以加快处理速度。
(在RDD的工作机制中,当数据被加载到内存后,可以进行快速的迭代计算,而不需要频繁地访问磁盘,大大减少了磁盘IO。尤其适用于需要多次访问相同数据的操作,比如机器学习和图计算等任务。) - 惰性计算:RDD的惰性计算意味着转换算子不会立即执行,而是将其计算逻辑记录在计算图中。只有当遇到行动算子时,RDD才会真正计算,并优化整个计算过程。
- 容错机制:RDD(弹性分布式数据集)的容错机制使它能够在节点故障的情况下保持计算结果的正确性和系统的稳定性。
- 不可变性:RDD一旦创建,它的内容就不能被修改。这意味着对RDD的任何操作都会生成一个新的RDD,而不会改变原始RDD的内容。
- 分区性 :RDD 的分区是指将数据集按照一定的规则分割成若干个部分,每个部分称为一个分区,每个分区是RDD的一个子集,这些分区可以分布在集群中的不同节点上进行并行处理。分区是RDD的物理数据存储单元。
- 可持久性:RDD(可持久性(Persistence)是指将 RDD 的计算结果存储在内存或磁盘中,以避免在后续操作中重新计算。
4.4 RDD容错机制(血统信息)
(1)RDD通过记录其血统信息 来实现容错。
(2)血统信息是指RDD如何从其他RDD转换而来的记录。每个RDD都维护了一个转换操作的记录,包括它的父RDD及变换操作。
(3)如果某个分区的数据丢失,Spark可以利用血统信息重新计算丢失的部分,而不是重新计算整个RDD。
优点:
- 高效恢复:通过重计算丢失的数据,而不是保存数据的副本,Spark避免了大量的数据冗余,提高了存储效率。
- 透明性:用户不需要手动处理数据丢失的问题,Spark的容错机制在后台自动处理。
4.5 RDD的分区策略
七、Hive
Hive 是一个建立在 Hadoop 之上的数据仓库工具,主要用于处理大规模结构化数据。它提供了一个类似 SQL 的查询语言 HiveQL,使得用户能够方便地进行数据查询、分析和报告生成,而无需掌握复杂的 MapReduce 编程模型。它能够与 Hadoop 和 Spark 等大数据平台集成。Hive 主要用于大数据存储和分析,在许多大数据场景中,特别是在 ETL(提取、转换、加载)和批量数据分析中得到了广泛应用。