【大数据】深入浅出Hadoop,干货满满

【大数据】深入浅出Hadoop

  • 文章脉络
  • Hadoop
  • HDFS
  • MapReduce
  • YARN
  • Hadoop集群硬件架构

假设现在有一个PB级别的数据库表要处理。

在单机情况下,只能升级你的内存、磁盘、CPU,那么这台机器就会变成 “超算”,成本太高,商业公司肯定是没法这么干的。

考虑在多主机情况下,如果把PB级别的表先拆分成若干个GB级别的数据包,每台计算机处理好了之后,再归并到一起,那么就是可行的,并且每台机器也不贵,而且存储和算力不够时还可以继续加机器。

无论是线上的web应用,还是偏离线的数仓服务,一旦流量和数据量大了之后必须得走集群多节点这个方案。而一旦涉及到集群场景,就必然产生资源调度、负载均衡、高可用、高容错、可拓展等等的问题,因此要设计一系列补丁(框架和中间件)去拆东墙补西墙,保证多集群多节点下任务不出错。

于是Hadoop及其生态就应运而生了。


文章脉络

在这里插入图片描述

图1 本文知识点

Hadoop

  Hadoop是一个开源的分布式计算平台,由Apache软件基金会开发和维护。它是大数据处理的基石,能够高效地存储和处理大规模数据。目前业界基本上用的都是Hadoop及其生态下的产品。Hadoop的主要特点是高可靠性和高扩展性,它可以在成百上千个节点上运行,每个节点都可以存储和处理数据。

  狭义的Hadoop,通常就指HDFS + MapReduce + YARN。

  但是随着其生态的发展,今天我们再提及Hadoop,通常指的是它的整个生态,包括Hive、Hbase、Spark、Pig、Flume、Sqoop等等。

【注意】本文主要介绍“狭义的Hadoop”,指HDFS、MapReduce、YARN这三个组件。

在这里插入图片描述

图2 Hadoop1.x和2.x的架构对比

  图2是Hadoop的版本1和版本2的架构对比。在早期,Hadoop的生态还不齐全,因此MapReduce既负责计算,也负责对多节点的资源进行管理,以完成作业的合理分配。

  升级到2.x后,把1.x中MapReduce的功能剥离开,新增了YARN组件做统一的资源管理和调度。

【注意】像Spark这种基于内存的计算框架,不会使用MapReduce,但是Spark也没有资源调度(进而控制HDFS)的功能,因此新增的YARN可以友好地支持类似于Spark这种不会使用MapReduce的技术。

  Hadoop主要由以下三个组件构成:

  1、Hadoop分布式文件系统(HDFS):HDFS是Hadoop的存储系统,用于存储大量的数据。 它通过将数据分散存储在多个节点上来实现数据的可靠存储和高吞吐量访问。数据被分割成块(通常是128MB或256MB大小),并在多个节点上复制,以提高数据的可靠性和系统的容错能力。

  2、MapReduce:MapReduce是Hadoop的处理框架,用于大规模数据处理。它将数据处理任务分解成两个函数:Map和Reduce。Map函数处理输入数据,并生成中间键值对。Reduce函数则对这些中间键值对进行聚合处理,生成最终的结果。

  3、YARN(Yet Another Resource Negotiator):YARN是Hadoop的资源管理器,负责管理集群中的计算资源。它允许各种数据处理应用在Hadoop集群上运行,不仅仅限于MapReduce。

HDFS

  Hadoop Distributed File System (HDFS) 是Hadoop的最核心组件,用来存储大量数据。HDFS是一种分布式文件系统,它将数据存储在由大量廉价硬件组成的集群上,并提供高吞吐量的数据访问,适合用于大规模数据处理场景。

  由于要具有高容错性、高吞吐量的特点,HDFS在存储数据时会进行切块,然后对每个块进行多副本存储,每个副本存储在不同的从节点上,以避免因单节点故障造成数据丢失。

【注意】正因为HDFS是多副本存储的(默认副本数为3),如果你看到你在你们公司自研的管理平台上看到的表总大小是3GB,那么其实它有可能实际上只有1GB。要注意分清文件大小统计的计算方法。

  HDFS的系统架构如下:

在这里插入图片描述

图3 HDFS架构(图片来源于Hadoop官方文档)

  HDFS主要有三个核心概念:
  · Client:用于与HDFS交互的接口,比如命令hadoop fs或者Java接口。通过RPC与节点通信。
  · NameNode:HDFS集群中的主节点,负责维护整个文件系统的命名空间和元数据。
  · DataNode:存储实际的数据块,负责处理文件系统客户端的读写请求,发送心跳。

【注意】一个HDFS集群只有一个活跃的NameNode,虽然在HDFS的高可用性(HA)配置中,会有两个NameNode(一个主NameNode和一个备用NameNode)以提供故障转移功能。

  Namenode和Datanode可以在普通的商用机器上运行。这些机器一般运行着GNU/Linux操作系统。HDFS采用Java语言开发,因此任何支持Java的机器都可以部署Namenode或Datanode。由于采用了可移植性极强的Java语言,使得HDFS可以部署到多种类型的机器上。一个典型的部署场景是一台机器上只运行一个Namenode实例,而集群中的其它机器分别运行一个Datanode实例。这种架构并不排斥在一台机器上运行多个Datanode,只不过这样的情况比较少见。

  集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者。

MapReduce

  在介绍MapReduce之前,先介绍大数据的计算模式。

  大数据的计算模式主要分为 批计算(batch computing)、流计算(stream computing)、交互计算(interactive computing)、图计算(graph computing) 等。其中,流计算和批计算是两种主要的大数据计算模式,分别适用于不同的大数据应用场景。

  批式处理框架主要有Hadoop MapReduce和Spark等。Hadoop MapReduce组件封装了MapReduce并行编程模型。Spark是对Hadoop MapReduce组件的改进,通过对中间结果使用内存存储,大幅提高了计算速度,目前是批处理应用的主流选择。

【注意】计算框架又可称为“引擎”,比如你写Hive(Hadoop生态的其他工具)SQL查表,那么就可以选择是使用MapReduce还是Spark来执行,因此计算框架又可以称为执行引擎。

  流式处理框架主要有Storm、Spark Streaming、Flink等。Storm是较早成熟的低延迟流式数据处理框架,可以进行事件级(单条数据)处理。Spark Streaming是基于Spark批处理实现的微批式的流式处理,延迟较高,可以和Spark一起应用,实现流批一体的数据处理。Flink是当前最出色的流式数据处理框架,可以进行事件级数据处理,具有低延迟、吞吐量大、支持SQL等优点。

【注意】
批计算场景be like 先拿到截至昨天用户表的所有数据,然后进行处理(比如group by),最后得到结果,抽象理解为“全量且T+1”。

流计算场景be like 我要实时监控我这家公司的订单情况,并需要一些处理和分析操作,然后输出出来,需要实时(延迟低,1s内),此时就不得不用Flink、Storm之流。

  接下来正式介绍MapReduce。

  MapReduce作为一种全新的通用并行编程模型,是基于集群的并行计算方式的创新抽象,非常简单易用,开发友好。MapReduce处理数据为Key-Value格式,其主要思想是从函数式编程借鉴而来的。MapReduce模型将计算分为两个阶段。

  Map(映射)阶段:对每条数据记录进行独立处理,其处理逻辑相当于对每条输入执行一个映射变换(即函数的计算),因此可以在大量节点进行并行处理(通常在数据所在节点)。

  Reduce(规约)阶段:汇总计算阶段,即处理逻辑具有记录之间的相关性,例如按Key对Value进行加和运算,此阶段一般会产生节点间的数据传输(即Shuffle操作)。

  MapReduce的系统架构如下:

在这里插入图片描述

图4 MapReduce架构

  MapReduce主要有四个核心概念:
  · Client:用于提交和管理MapReduce作业的工具,如命令行hadoop jar
  · JobTracker:JobTracke负责资源监控和作业调度。JobTracker监控所有TaskTracker与job的健康状况,一旦发现失败,就将相应的任务转移到其他节点;同时,JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源。
  · TaskTracker:TaskTracker会周期性地通过Heartbeat将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)。
  · Task:Task 分为Map Task和Reduce Task两种,均由TaskTracker启动。

【注意】Map Task和Reduce Task是可以编写Java脚本或者Python脚本等去执行的,但是学习成本和使用成本都比较高。一般不是特别需要,写HQL就能搞定工作需要。

  MapReduce内部逻辑的大致流程主要由以下几步完成:

  Mapper阶段

  1) 对输入数据进行解析的组件:因为不同的数据可能存储的数据格式不一样,这就需要有一个InputFormat组件来解析这些数据。默认情况下,它提供了一个TextInputFormat来解释数据。TextInputFormat会将文件的每一行解释成(key,value),key代表每行偏移量,value代表每行数据内容。通常情况我们不需要自定义InputFormat,因为MapReduce提供了很多种InputFormat的实现,我们根据不同的数据格式,选择不同的InputFormat来解释就可以了。

  2) 输入数据处理:使用Mapper来完成,这个Mapper是必须要实现的,因为根据不同的业务对数据有不同的处理。当缓冲区满了之后,数据被写入到本地磁盘上的一个临时文件中。

  Shuffle阶段

  (在Mapper和Reducer阶段之间)
  3) 排序和分组:在Mapper任务完成之后,Shuffle阶段开始,这个阶段包括排序和分组操作,确保相同键的所有值都在一起。
  4) 压缩:为了减少网络传输的数据量,中间数据可能会被压缩。
  5) 数据传输:根据Partitioner的决策,中间数据被传输到对应的Reducer节点。默认的情况下,Partitioner会对map输出的key进行hash取模,比如有6个Reduce Task,它就是模(mod)6,如果key的hash值为0,就选择第0个Reduce Task,如果key的hash值为1,就选择第一个Reduce Task。这样不同的map对相同单词key,它的hash值取模是一样的,所以会交给同一个reduce来处理。

  Reduce阶段

  6) 数据合并:Reducer从不同的Mapper节点接收数据,并进行合并。
  7) 数据处理:Reducer的reduce函数被调用,对每个键的所有值进行处理,生成最终的结果。
  8) 数据输出:Reducer的输出结果被写入到OutputFormat指定的输出位置,通常是HDFS。

【注意】在集群中,MapReduce是处在DataNode的节点上的,也就是说每个从节点都会有MapReduce。

YARN

  YARN(Yet Another Resource Negotiator)是Hadoop集群的资源管理器,它是在Hadoop 2.x版本中引入的,用来替代Hadoop 1.x中的传统MapReduce架构中的JobTracker和TaskTracker组件。YARN为Hadoop集群提供了一个更加通用的资源管理平台,不仅支持MapReduce作业,还支持其他类型的数据处理框架,如Apache Spark、Apache Flink等。

  YARN采用了经典的Master-Slave架构, 其中ResourceManager对应主, NodeManager对应从。

  YARN的系统架构如下:

在这里插入图片描述

图5 YARN架构(图片来源于Hadoop官方文档)

  YARN主要有四个核心概念:
  · Client:负责提交应用程序到YARN集群,并处理与应用程序相关的配置和提交细节,比如命令yarn jar或者Java接口。
  · ResourceManager:YARN集群的资源管理器,负责整个集群的资源分配和调度。
  · NodeManager:是YARN集群中的每个节点的代理,负责该节点的资源管理和任务执行。
  · ApplicationMaster:是应用程序的代理,负责与ResourceManager协商资源,并与NodeManager协调任务的执行。每个提交到YARN集群的应用程序都有一个ApplicationMaster实例。

Hadoop集群硬件架构

在这里插入图片描述

图6 Hadoop集群硬件架构

  现在再看这张图,想必大家已经是一目了然。

  主节点上:部署HDFS的NameNode组件,管理命名空间,管理客户端对文件的访问,负责跟踪数据块到DataNode的映射;部署Yarn的ResourceManager组件,管理整个集群中的资源。

  从节点上:部署HDFS的DataNode组件,服务于客户端的读/写请求;部署Yarn的NodeManager组件,监视本节点容器的资源使用情况,并将其报告给Resource-Manager;运行MapReduce的容器。

【注意】至此Hadoop基本盘已经说清楚了,除非去做云原生开发、运维这些工作,否则对于大数据开发、推荐算法的朋友们掌握这些已经够用了。

  对于其他Hadoop生态的产品,浅浅拓展下(如图7),以后还会对常用的框架进行专门介绍。

在这里插入图片描述

图7 Hadoop体系的分层架构

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过卷积神经网络(CNN)识别和预测手写数字

一:卷积神经网络(CNN)和手写数字识别MNIST数据集的介绍 卷积神经网络(Convolutional Neural Networks,简称CNN)是一种深度学习模型,它在图像和视频识别、分类和分割任务中表现出色。CNN通过模仿…

8. GIS数据分析师岗位职责、技术要求和常见面试题

本系列文章目录: 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

【高等代数笔记】线性空间(一到四)

3. 线性空间 令 K n : { ( a 1 , a 2 , . . . , a n ) ∣ a i ∈ K , i 1 , 2 , . . . , n } \textbf{K}^{n}:\{(a_{1},a_{2},...,a_{n})|a_{i}\in\textbf{K},i1,2,...,n\} Kn:{(a1​,a2​,...,an​)∣ai​∈K,i1,2,...,n},称为 n n n维向量 规定(规定…

【技术前沿】智能反向寻车解决方案:提升停车场用户体验与运营效率

亲爱的技术员及停车场管理者们,您是否曾遇到过车主在庞大的停车场中迷失方向,耗费大量时间寻找爱车的困境?这不仅影响了车主的停车体验,也无形中增加了停车场的管理难度和运营成本。本文专为解决这一痛点而生,介绍最新…

基于人工智能的手写数字识别系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 手写数字识别是一种经典的计算机视觉任务,目标是让机器能够识别手写数字。通过人工智能技术,特别是卷积神经网…

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询…

【论文分享】MyTEE: Own the Trusted Execution Environment on Embedded Devices 23‘NDSS

目录 AbstractINTRODUCTIONBACKGROUNDARMv8 ArchitectureSecurity statesTrustZone extensionsVirtualization Communication with Peripherals MOTIVATIONATTACK MODEL AND ASSUMPTIONSYSTEM DESIGNOverviewExecution Environments IsolationDMA FilterExternal DMA controlle…

flutter的入口和原生交互

从今天起,笔者要开始从flutter列表页面向原生页面跳转了 首先遇到了N个No such module "Flutter" 因为笔者的公司其实是从前往后改造Flutter的,所以也不需要引擎组,但是笔者搞不懂,只能照着葫芦画瓢,以后等…

【重学 MySQL】十六、算术运算符的使用

【重学 MySQL】十六、算术运算符的使用 加法 ()减法 (-)乘法 (*)除法 (/ 或 div )取模(求余数) (% 或 mod )注意事项 在 MySQL 中,算术运算符用于执行数学运算,如加法、减法、乘法、除法和取模(求余数)等。…

2024数学建模国赛选题建议+团队助攻资料(已更新完毕)

目录 一、题目特点和选题建议 二、模型选择 1、评价模型 2、预测模型 3、分类模型 4、优化模型 5、统计分析模型 三、white学长团队助攻资料 1、助攻代码 2、成品论文PDF版 3、成品论文word版 9月5日晚18:00就要公布题目了,根据历年竞赛题目…

自动化运维之WGCLOUD入门到掌握 - ubuntu服务器进行入侵检测分析

WGCLOUD监测平台,有个日志监控模块,我们本文就用它来进行ubuntu的入侵检测分析 准备:ubuntu 20,WGCLOUD v3.5.4 ubuntu的登录日志文件,用于分析用户登录行为:/var/log/auth.log,我们今天就用u…

AWS SES服务 Golang接入教程(排坑版)

因为刚来看的时候 也迷迷糊糊的 所以 先讲概念 再上代码 一 基础设置 这里需要完成两个最基础的设置任务 1 是验证至少一个收件电子邮箱 2 【很关键】是验证发送域。即身份里的域类型的身份。(可以理解为配置你的域名邮箱服务器(SMPT)为亚马…

微软出品的一款管理多个远程桌面连接的工具

RDCMan(Remote Desktop Connection Manager)是微软官方出品的一款用于管理多个远程桌面连接的工具。它可以帮助用户集中管理和分类远程桌面,特别适用于需要同时管理大量服务器或在不同计算机间切换操作的场景。 RDCMan的主要功能包括&#x…

[深度学习][LLM]:浮点数怎么表示,什么是混合精度训练?

混合精度训练 混合精度训练1. 浮点表示法:[IEEE](https://zh.wikipedia.org/wiki/电气电子工程师协会)二进制浮点数算术标准(IEEE 754)1.1 浮点数剖析1.2 举例说明例子 1:例子 2: 1.3 浮点数比较1.4 浮点数的舍入 2. 混合精度训练2.1 为什么需…

继收购西门子物流自动化后,丰田又投资一家AGV公司,智能物流版图已极其夸张...

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 继成功将西门子物流自动化(机场物流业务)纳入麾下后,丰田并未停下其征伐的步伐,而是再度出手,与新兴科技巨头Gideon携手,共同绘制了一幅…

副本集 Election succeeded

目录 1. 分析mongo副本集 Election succeeded 的全过程:2. 从日志里面看到数据库一致性的对比吗?3. 模拟主备不同步,副本集切换步骤注意事项: not master and slaveOkfalse解释: 其他方案方法一:使用 rs.st…

时间同步服务

多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协 议,日志,集群等。 利用NTP(Network Time Protocol) 协议使网络中的各个计算机时间达到…

全英文地图/天地图和谷歌瓦片地图杂交/设备分布和轨迹回放/无需翻墙离线使用

一、前言说明 随着风云局势的剧烈变化,对我们搞软件开发的人员来说,影响也是越发明显,比如之前对美对欧的软件居多,现在慢慢的变成了对大鹅和中东以及非洲的居多,这两年明显问有没有俄语或者阿拉伯语的输入法的增多&a…

vmware用ghost镜像ios、esd格式装系统

1、需要下载一个pe.iso镜像,可以用大白菜,老毛桃什么的,vmware选择从光盘启动 然后在PE里面把磁盘分为两个区,C,D盘 然后修改ISO镜像,变成要恢复的ghost包 把iso里面文件拷贝到D盘,用桌面PE工具开始重…

鸿蒙开发中实现自定义弹窗 (CustomDialog)

效果图 #思路 创建带有 CustomDialog 修饰的组件 ,并且在组件内部定义controller: CustomDialogController 实例化CustomDialogController,加载组件,open()-> 打开对话框 , close() -> 关闭对话框 #定义弹窗 (CustomDial…