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

了解Hadoop

Hadoop了解

Hadoop 是 Apache 基金会开发的一个开源分布式计算平台,主要用于存储和处理大规模数据集。
它能让用户在不了解分布式系统底层细节的情况下,轻松进行分布式程序的开发,将应用程序自动部署到由大量普通机器组成的集群上进行高效运算。下面为你详细介绍其应用场景和作用
hadoop生态系统包含了很多组件,主要的一个生态系统体系:在这里插入图片描述

核心组件介绍

HDFS
Hadoop 分布式文件系统(HDFS): 是hadoop的存储基石,具备高容错性,可以将海量的数据分散存储在多个节点,数据会被分割为多个数据块,每个数据块会有多个副本,分布在不同的节点上,这样即使部分节点出现故障,数据也不会丢失,保证了数据的安全性和可靠性,支持流式访问.

  1. NameNode: 存储文件的元数据,运行在master node节点上,负责命名空间管理和文件访问控制,
  2. DataNode: 在本地文件系统存储文件块数据,以及数据校验和,运行在slave节点上,
  3. Secondary DataNode: 用来监控HDFS状态
    在这里插入图片描述

MapReduce
是一种编程模型,用于计算海量数据,并把计算任务分割成多个在几群上并行计算独立运行的task,MapReduce 是 Hadoop的核心,它会把计算任务移动到离数据最近的地方进行执行,因为移动大量数据是非常耗费资源的。主要的处理过程分为三个步骤:

  1. map阶段: 在这个里,针对输入的数据会被分割为多个小块,每个小块由一个map任务处理,map任务会读取输入的数据然后转为键值对的形式输出,这个过程可以理解为对原始数据进行初步的过滤.
  2. shuffle排序阶段: 这个阶段会对map阶段处理之后的数据进行排序和分组,将相同的键的值归类到一起,
  3. reduce(聚合): 这个阶段每个reduce任务接受一组相同的键值列表,并对这组值执行指定规则的汇总或聚合操作.然后产生新的输出.

YARN
Yarn :是一个资源管理系统,其作用就是把资源管理和任务调度/监控功分割成不同的进程,Yarn 有一个全局的资源管理器叫 ResourceManager,每个 application 都有一个 ApplicationMaster 进程。一个 application 可能是一个单独的 job 或者是 job 的 DAG (有向无环图)。
在 Yarn 内部有两个守护进程:
• ResourceManager :负责给 application 分配资源
• NodeManager :负责监控容器使用资源情况,并把资源使用情况报告给 ResourceManager。这里所说的资源一般是指CPU、内存、磁盘、网络等。
ApplicationMaster 负责从 ResourceManager 申请资源,并与 NodeManager 一起对任务做持续监控工作。

Yarn 具有下面这些特性:
• 多租户:Yarn允许在同样的 Hadoop数据集使用多种访问引擎。这些访问引擎可能是批处理,实时处理,迭代处理等;
• 集群利用率:在资源自动分配的情况下,跟早期的Hadoop 版本相比,Yarn拥有更高的集群利用率;
• 可扩展性:Yarn可以根据实际需求扩展到几千个节点,多个独立的集群可以联结成一个更大的集群;
• 兼容性:Hadoop 1.x 的 MapReduce 应用程序可以不做任何改动运行在 Yarn集群上面。

hadoop的工作方式

hadoop的主从工作方式

在这里插入图片描述
主从的架构:

  • 一个master节点可以和多个slave节点交互
  • master节点管理,维护和监控slave节点,slave是任务处理的机器.
  • master节点是集群的核心
  • master存储元数据,slave存储业务实际数据
  • 通过master向slave节点分发任务
    hadoop的守护进程
    在这里插入图片描述

通过这个图的展示可以看出在hadoop中主要有4个守护进程:

  1. namenode: 它是HDFS运行在Master节点守护进程
  2. datanode: 它是 HDFS 运行在Slave节点守护进程。
  3. resourcemanager: 是yarn运行在master节点的守护进程
  4. NodeManager: 是yarn运行在slave节点的守护进程
    除了这些,可能还会有 secondary NameNode,standby NameNode,Job HistoryServer 等进程

通过上面的架构图可以了解到在这种架构下,对于master节点是没有高可用的,集群会很不稳定面临单点的风险,下面介绍一下再hadoop中实现高可用的方案.
我们知道 NameNode 上存储的是 HDFS 上所有的元数据信息,因此最关键的问题在于 NameNode 挂了一个,备份的要及时顶上,这就意味着我们要把所有的元数据都同步到备份节点。好,接下来我们考虑如何同步呢?每次 HDFS 写入一个文件,都要同步写 NameNode 和其备份节点吗?如果备份节点挂了就会写失败?显然不能这样,只能是异步来同步元数据。如果 NameNode 刚好宕机却没有将元数据异步写入到备份节点呢?那这部分信息岂不是丢失了?这个问题就自然要引入第三方的存储了,在 HA 方案中叫做“共享存储”。每次写文件时,需要将日志同步写入共享存储,这个步骤成功才能认定写文件成功。然后备份节点定期从共享存储同步日志,以便进行主备切换。
Hadoop NameNode HA原理
核心组件介绍:
Namenode主备切换主要是由ZKFailoverController,HealthMonitor和ActiveStandbyElector这个3个组件来协同实现:

  • ZKFailoverController作为Namenode上一个独立的进程启动(在hdfs启动脚本之中的进程为zkfc),启动的时候会创建HealthMonitor 和ActiveStandbyElector 组件,会进行整体协调负责管理和监控namenode的状态并与zookerper进行交互.
  • HealthMonitor:是对本地的namenode进行健康状态检测,检测状态,状态反馈,根据检测结果向zkfc进行汇报.它可以检测多种故障,包括硬件故障、软件故障、网络故障等
  • ActiveStandbyElector: 在zookerper的协调下进行active namenode的选举.每个 Standby NameNode 的 ActiveStandbyElector 会尝试在 ZooKeeper 中创建一个特定的节点,如果创建成功,则该 NameNode 成为新的 Active NameNode;如果创建失败,则表示有其他 NameNode 已经成功竞选为 Active NameNode,该 NameNode 继续保持 Standby 状态。在选举完成后,ActiveStandbyElector 会确保新的 Active NameNode 和其他 Standby NameNode 之间的状态同步,保证整个集群的一致性和稳定性

hadoop在linux下的安装部署

hadoop的运行模式
Hadoop 有三种运行模式,分别是本地(单机)模式、伪分布式模式和完全分布式模式,下面为详细介绍它们的区别;
本地模式
特点:
简单配置:这是 Hadoop 最基础的运行模式,几乎不需要额外配置。它把所有组件都运行在单个 Java 虚拟机中,就像普通的 Java 程序一样。
无分布式特性:此模式下不涉及数据的分布式存储与处理,主要用于开发调试简单的 MapReduce 程序或者进行代码测试。
数据存储:数据一般存于本地文件系统,而非 Hadoop 分布式文件系统(HDFS)
适用场景
适合初学者快速上手 Hadoop,在学习和开发初期用来验证 MapReduce 程序逻辑的正确性。
进行小规模数据的测试和实验。

伪分布式模式
特点:
模拟分布式环境:虽然所有 Hadoop 守护进程(如 NameNode、DataNode、ResourceManager、NodeManager 等)都在一台机器上运行,但它们以独立的 Java 进程形式存在,能够模拟分布式环境的运行机制。
使用 HDFS:数据存储采用 HDFS,可体验 Hadoop 分布式文件系统的功能,如数据的复制、容错等。
配置相对简单:相较于完全分布式模式,伪分布式模式的配置较为简便,通常只需对几个关键配置文件进行修改。
适用场景:
用于开发和测试分布式程序,让开发者在单机上就能模拟分布式环境,进行程序的调试和优化。
学习 Hadoop 各个组件的工作原理和交互方式。
完全分布式模式
特点
多节点集群:由多个物理节点组成集群,每个节点承担不同的角色,如 NameNode、DataNode、ResourceManager、NodeManager 等,各个节点之间通过网络进行通信和协作。
高可靠性和扩展性:可以根据实际需求添加或减少节点,以提高系统的处理能力和存储容量。同时,HDFS 的数据冗余机制和 YARN 的资源管理机制确保了系统的高可靠性。
复杂配置和管理:需要对每个节点进行详细的配置和管理,包括网络配置、节点间的通信、数据同步等,对运维人员的技术要求较高。

未完待续~

http://www.xdnf.cn/news/354493.html

相关文章:

  • 互联网大厂Java求职面试:基于AI的实时异常检测系统设计与实现
  • PCB设计时如何选择USART、SPI、I2C
  • 【图像大模型】Stable Diffusion Web UI:深度解析与实战指南
  • 单调栈模版型题目(3)
  • 第20篇:Linux设备驱动程序入门<七>
  • 8b10b编解码仿真
  • 前端自学入门:HTML 基础详解与学习路线指引
  • WebRTC 源码原生端Demo入门-1
  • 【大模型ChatGPT+ArcGIS】数据处理、空间分析、可视化及多案例综合应用
  • 鸿蒙电脑:五年铸剑开新篇,国产操作系统新引擎
  • 机器人运动控制技术简介
  • SpringAI特性
  • Vscode 顶部Menu(菜单)栏消失如何恢复
  • 操作系统面试题(3)
  • C++之运算符重载实例(日期类实现)
  • 云上系统CC攻击如何进行检测与防御?
  • 【Rust测试】Rust代码测试方法详解与应用实战
  • Mac配置php开发环境(多PHP版本,安装Redis)
  • JDK8 HashMap红黑树退化为链表的机制解析
  • 第五节:对象与原型链:JavaScript 的“类”与“继承”
  • odoo-049 Pycharm 中 git stash 后有pyc 文件,如何删除pyc文件
  • RslRlOnPolicyRunnerCfg 学习
  • 生成自定义的androidjar文件具体操作
  • CSS vertical-align
  • Java学习手册:微服务设计原则
  • 【从0带做】基于Springboot3+Vue3的文物展览系统
  • 【文件系统—散列结构文件】
  • Nacos源码—7.Nacos升级gRPC分析三
  • [Windows] 希捷(Seagate)硬盘官方检测工具 - SeaTools(1.4.0.7)
  • OceanBase 在业务监控系统中的应用实践