大数据知识扫盲

MapReudece作业启动和运行机制

MapReduce是一种分布式计算框架,最初由Google开发,用于处理大规模数据集的批处理任务。其核心思想是将数据划分为小的块,然后并行处理这些块,最后将结果合并。以下是MapReduce作业的启动和运行机制:

  1. 作业提交
    • 用户或应用程序通过客户端将MapReduce作业提交到集群上的资源管理器(ResourceManager)。
    • ResourceManager负责调度集群上的资源并为作业分配资源。
  2. 划分数据
    • ResourceManager将输入数据划分为若干个输入分片(splits),每个输入分片通常对应一个Mapper任务。
    • 输入分片通常是文件的一部分,例如HDFS中的块(block)。
  3. Map任务
    • ResourceManager为每个Mapper任务分配计算资源,例如节点(NodeManager)。
    • 每个Mapper任务负责处理一个输入分片,对输入数据进行映射和处理。
    • 用户编写的Map函数被用于将输入数据转换为键-值对,将结果写入中间文件。
  4. 中间数据的分组和排序
    • 所有的Mapper任务的中间数据被收集并按键进行分组和排序,以便将相同键的数据发送到相同的Reducer任务。
    • 这个阶段的输出结果通常被分区并存储在分布式文件系统中,以便提供容错性。
  5. Reduce任务
    • ResourceManager为每个Reducer任务分配计算资源。
    • Reducer任务负责从Mapper的中间数据中获取相关的数据,并将它们合并和处理,生成最终的结果数据。
  6. 结果输出
    • Reduce任务的输出结果通常被写入分布式文件系统,例如HDFS。
    • 作业完成后,用户可以访问和分析这些输出结果。
  7. 作业监控和管理
    • ResourceManager和JobTracker(在Hadoop 1.x中使用)或ApplicationMaster(在Hadoop 2.x及之后版本中使用)负责监控作业的进度,处理故障,重新执行失败的任务,并确保作业成功完成。
  8. 清理资源
    • 作业完成后,集群将释放已分配的资源,以便其他作业可以使用它们。

shuffle 在大数据中的重大作用

  1. 数据重分布:shuffle 通常涉及数据的重新分布,将不同的数据分片(分区)重新组合到不同的任务中,以便进行进一步的处理。这是大数据处理中的关键操作,例如,在 MapReduce 或 Spark 中,map 阶段会生成键值对,然后进行shuffle,以便在 reduce 阶段合并和处理相关数据。
  2. 数据排序:在某些情况下,shuffle 可能需要对数据进行排序,以确保 reduce 阶段能够高效地进行数据处理。这对于需要有序数据的任务非常重要。
  3. 数据合并:shuffle 也涉及数据的合并操作,以便在 reduce 阶段将相同键的数据合并在一起。这有助于减少在 reduce 阶段的数据传输量和计算开销。
  4. 数据传输和网络开销:shuffle 涉及将数据从一个节点传输到另一个节点,这通常需要通过网络传输大量数据。因此,shuffle 操作可能会引入大量的网络开销,特别是在大规模分布式系统中。
  5. 数据局部性:为了减少网络开销,shuffle 操作通常会尝试将数据移到尽可能接近要处理它的节点上。这有助于提高数据局部性,减少网络传输。
  6. 性能优化:shuffle 操作的性能对整个大数据处理作业的性能有重大影响。因此,许多分布式计算框架(如Apache Spark)都致力于优化shuffle操作,以提高整体性能。
  7. 数据倾斜处理:在大数据处理中,数据倾斜是一个常见的问题,即某些键的数据量远远超过其他键。shuffle操作通常需要处理数据倾斜,以确保任务的负载均衡,防止某些节点上的任务变得过于繁重。

Yarn 大数据平台资源管理和作业调度框架

Apache Hadoop YARN(Yet Another Resource Negotiator)是一个大数据平台资源管理和作业调度框架,它是 Apache Hadoop 生态系统的一部分。YARN 的主要目标是提供一个通用、灵活的资源管理平台,使各种大数据处理框架(如Hadoop MapReduce、Apache Spark、Apache Flink等)可以有效地共享和管理集群资源。以下是关于YARN的一些重要信息:

  1. 资源管理: YARN 负责在集群上分配和管理资源。它将集群资源划分为容器,每个容器可以包含一个或多个任务。这种资源管理方法使多个应用程序可以共享集群资源,而不会相互干扰。

  2. 作业调度: YARN 支持多种调度策略,例如容量调度、公平调度和先进先出调度,以满足不同应用程序的需求。这使得在同一集群上运行多个应用程序变得更加容易。

  3. 容错性: YARN 具有容错性,即使在节点故障时也能够重新分配任务,以确保应用程序的稳定性和可用性。

  4. 灵活性: YARN 提供了灵活的应用程序框架,允许开发人员编写自定义应用程序,并根据需要配置资源和调度策略。这为大数据生态系统的不断发展提供了支持。

  5. 监控和管理: YARN 提供了丰富的监控和管理工具,用于跟踪应用程序的性能、资源使用和集群健康情况。这些工具包括YARN ResourceManager和NodeManager、YARN应用程序历史服务器等。

  6. 生态系统集成: YARN被设计为与大数据生态系统中的其他组件集成,包括Hadoop Distributed File System(HDFS)、Hive、Pig、Tez、Spark等。这意味着你可以在一个集群上同时运行多个大数据处理框架,而它们都可以受益于YARN的资源管理。

  7. 扩展性: YARN是一个高度可扩展的框架,可以适应不断增长的数据处理需求。它支持横向扩展,可以轻松地添加更多的节点和资源来满足增加的工作负载。

Yarn 实际运行过程

让我们通过一个具体的示例来说明YARN的工作原理。假设你有一个大数据集群,其中有数十台服务器,你想在这个集群上运行两个不同的大数据处理应用程序:一个是Hadoop MapReduce作业,另一个是Apache Spark应用程序。YARN将用于管理和调度这两个应用程序的资源。

1. 提交应用程序: 首先,你将在集群上提交两个不同的应用程序,一个是Hadoop MapReduce作业,另一个是Spark应用程序。这两个应用程序分别包括Mapper、Reducer和Spark任务。

2. ResourceManager: 集群上有一个YARN ResourceManager(RM),它是YARN的核心组件之一。RM负责接收应用程序的提交请求并为它们分配资源。RM维护有关可用资源的信息,如可用内存和CPU核心。

3. ApplicationMaster: 每个应用程序都有一个ApplicationMaster(AM)。AM是一个YARN容器,负责与RM协商资源,为应用程序分配任务,并监控应用程序的执行。对于Hadoop MapReduce应用程序,AM会与RM协商Mapper和Reducer任务,而对于Spark应用程序,AM会协商Spark任务。

4. NodeManager: 集群中的每个节点都有一个YARN NodeManager(NM),它负责监视本地资源使用情况,启动和停止容器,以及向RM报告可用资源。

5. 资源分配: RM将应用程序的资源请求与集群中的可用资源进行匹配。它决定分配多少内存、CPU核心等资源给每个应用程序。资源分配是基于调度策略(如容量调度或公平调度)进行的。

6. 执行应用程序: 一旦资源分配完成,AM将启动应用程序的任务,并开始执行。这包括在容器中运行Mapper、Reducer或Spark任务。NodeManager负责启动和监视这些容器。

7. 监控和容错性: RM和AM会不断监控应用程序的执行,以确保它们正常工作。如果应用程序失败或容器遇到问题,YARN可以重新分配资源或重启容器,以确保应用程序的稳定性和可用性。

8. 完成应用程序: 当应用程序执行完成时,AM会向RM报告,并释放已使用的资源。RM会更新集群的可用资源信息。

相关推荐
小镇程序员7 分钟前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js
tangliang_cn16 分钟前
java入门 自定义springboot starter
java·开发语言·spring boot
莫叫石榴姐16 分钟前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
程序猿阿伟16 分钟前
《智能指针频繁创建销毁:程序性能的“隐形杀手”》
java·开发语言·前端
疯狂的沙粒18 分钟前
对 TypeScript 中函数如何更好的理解及使用?与 JavaScript 函数有哪些区别?
前端·javascript·typescript
瑞雨溪27 分钟前
AJAX的基本使用
前端·javascript·ajax
新知图书28 分钟前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust
威威猫的栗子30 分钟前
Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画
开发语言·python
力透键背30 分钟前
display: none和visibility: hidden的区别
开发语言·前端·javascript
bluefox197931 分钟前
使用 Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别
开发语言·c#