智客公社

标题: 大数据系列(1)之 HADOOP原理 [打印本页]

作者: 北京现代123    时间: 2021-6-10 19:22
标题: 大数据系列(1)之 HADOOP原理
一、Hadoop定义及三大核心组件

1、Hadoop定义

Hadoop是一个开源的分布式系统框架。 Hadoop可以运用廉价的机器来存储我们的数据,大大减少了成本,可编写和运转分布式运用途理大规模数据,是专为离线和大规模数据分析而设计的。 Hadoop的数据来源可以是任何方式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的功能,具有更灵敏的处理才能。 Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce(数据处理)。 Hadoop就是一个分布式计算的处理方案。
2、 Hadoop三大核心组件

(1)HDFS( Hadoop Distribute File System): hadoop的数据存储工具。
Hadoop分布式文件系统(HDFS)是一种被设计成合适运转在通用硬件上的分布式文件系统。HDFS是一个高度容错性的系统,合适部署在廉价的机器上。它能提供高吞吐量的数据访问,非常合适大规模数据集上的运用。采用 master/ slave架构。一个HDFS集群是由一个 Namenode和一定数目的 Datanodes组成。

(2) Hadoop MapReduce:分布式计算框架
Map/ Reduce是一个运用简易的软件框架,基于它写出来的运用程序可以运转在由上千个商用机器组成的大型集群上,并以一种牢靠容错的方式并行处理上T级别的数据集。

(3)YARN( Yet Another Resource Negot iator,另一种资源协调者): Hadoop的资源管理器。
二、Hadoop三大核心组件的工作原理

1、HDFS工作原理

要了解HDFS的外部工作原理,首先要了解什么是分布式文件系统。
分布式系统:多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样处理某种成绩,这样的系统我们称之为分布式系统。
分布式文件系统:是分布式系统的一个子集,它们处理的成绩就是数据存储。换句话说,它们是横跨在多台计算机上的存储系统。存储在分布式文件系统上的数据自动分布在不同的节点上。HDF采用ster/slave架构形式,1一个 Mster(Name Node,)带N个Slaves(DataNode/DN)下图展现了HDFS的基本架构。

[attach]623163[/attach]

HDFS基本架构图


NameNode和 DataNode是HDFs的两个次要组件。
其中,元数据存储在 NameNode上,而数据存储在DataNode的集群上。元数据包括了文件名、节点(i node)数、数据块地位等,而数据则是文件的实践内容。存储在HDFS上的每份数据片有多份副本(replica)保存在不同的服务器上。在本质上,NameNode是HDFS的 Master(主服务器),DataNode是 Slave(从服务器)。DataNode担任处理文件系统客户端的文件读写,并在NameNode的一致调度下停止数据库的创建、删除和复制工作。NameNode是一切HDFs元数据的管理者,用户数据永远不会经过NameNode。对于NameNode和 DataNode分工,可以举个例子:

客户端写入内容
例如,客户端发送一个央求给NameNode,说它要将“zhou.log”文件写入到HDFS,过程如下:

[attach]623164[/attach]

客户端写入内容

NameNde担任管理存储在HDFS上一切文件的元数据,它会确认客户端的央求,并记录下文件的名字和存储这个文件的 DataNode集合。它把该信息存储在内存中的文件分配表里。

第一步:客户端发音讯给 NameNode,说要将“zhou.log”文件写入。(如图1中的①)

第二步: Name Node发音讯给客户端,叫客户端写到DataNode A、B和D,并直接联络 DataNode B。(如图1中的②)

第三步:客户端发音讯给 DataNode B,叫它保存一份“zhou.log”文件,并且发送一份副本

给 DataNode A和 DataNode D。(如图1中的③)

第四步: DataNode B发音讯给 DataNode A,叫它保存一份“zhou.log”文件,并且发送一

份副本给 DataNode D。(如图1中的④)

第五步: DataNode A发音讯给 DataNode D,叫它保存一份“zhou.log”文件。(如图1中的

⑤)

第六步: Dat aNode D发确认音讯给 DataNode A。(如图1中的⑤)

第七步: DataNode A发确认音讯给 DataNode B。(如图1中的④)

第八步: DataNode B发确认音讯给客户端,表示写入完成。(如图1中的⑥)
在分布式文件系统的设计中,应战之一是如何确保数据的分歧性。对于HDFS来说,直到一切要保存数据的 DataNodes确认它们都有文件的副本时,数据才被以为写入完成。因此,数据分歧性是在写的阶段完成的。一个客户端无论选择从哪个 Dat aNode读取,都将得到相反的数据。

客户端读取内容

客户端查看之前写入的内容的执行流程如下图所示:

[attach]623165[/attach]

客户端读取内容

为了了解读的过程,可以以为一个文件是由存储在 DataNode上的数据块组成的。

第一步:客户端讯问NameNode它应该从哪里读取文件。(如图2中的①)

第二步: NameNode发送数据块的信息给客户端。(数据块信息包含了保存着文件副本的DataNode的IP地址,以及 DataNode在本地硬盘查找数据块所需求的数据块ID。)(如图2中的②)

第三步:客户端检查数据块信息,联络相关的 Dat aNode,央求数据块。(如图2中的③)

第四步; Dat aNode前往文件内容给客户端,然后关闭衔接,完成读操作。(如图2中的④)客户端并行从不同的 Dat aNode中获取一个文件的数据块,然后衔接这些数据块,拼成残缺的文件。

如何保证可用性:经过副本疾速恢复硬件缺点。
DataNode能够由于多种缘由脱离集群,如硬件缺点、主板缺点、电源老化和网络缺点等。当一切运转正常时, DataNode会周期性发送心跳信息给 Name Node(默许是每3秒钟一次。假如 NameNode在预定的工夫内没有收到心跳信息(默许是10分钟),它会以为 DataNode出成绩了,把它从集群中移除,并且启动一个进程去恢复数据。对于HDFS来说,丢失一个 DataNode意味着丢失了存储在它的硬盘上的数据块的副本。假如在恣意工夫总有超过一个副本存在(默许3个),缺点将不会导致数据丢失。当一个硬盘缺点时,HDFS会检测到存储在该硬盘的数据块的副本数量低于要求,然后自动创建需求的副本,以达到满副本数形状。

如何切分文件:跨多个 DataNode切分文件
在HDFS里,文件被切分成数据块,通常每个数据块64MB-128MB,然后每个数据块被写入文件系统。同一个文件的不同数据块不一定保存在相反的 DataNode上。这样做的好处是当对这些文件执行运算时,可以经过并行方式读取和处理文件的不同部分。

总结一下:

NameNode

1)担任客户端央求的呼应;

2)担任元数据(文件的称号、副本系数、 Block存放的DN)的管理;

DataNode

1)存储用户的文件对应的数据块( Block);

2)要定期向 Name Node发送心跳信息,汇报本身及其一切的 block信息,健康状况;
2、Map/ Reduce工作原理

2.1、基本原理:

一个Map/Reduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由map义务(task)以完全并行的方式处理它们。框架会对map的输入先停止排序,然后把结果输入给 reduce义务。通常作业的输入和输入都会被存储在文件系统中。MapReduce将计算过程可看作两个阶段:Map和 Reduce如图:

[attach]623166[/attach]


1)Map阶段并行处理输入数据;

2) Reduce阶段对Map结果停止汇总;

MapReduce计算模型也可看作三个阶段构成:Map、 shuffle、 Reduce

1)Map是映射,担任数据的过滤分法,将原始数据转化为键值对;

2)Reduce是合并,将具有相反key值得value停止处理后再输入新的键值对作为最终结果。

3)为了让Reduce可以并行处理Map的结果,必须对Map的输入停止一定的排序与分割,然后再交给对应的 Reduce,而这个将Map输入停止进一步整理并交给Reduce的过程就是Shuffle;
2.2、Shuffle简介

Shuffle描画着数据从 map task输入到 reduce task输入的这段过程,shuffle是衔接Map和 Reduce之间的桥梁,Map的输入要用到 Reduce中必须经过 shuffle这个环节,shuffle的功能高低直接影响了整个程序的功能和吞吐量。由于在分布式状况下, reducetask需求跨节点去拉取其它节点上的 map task结果。这一过程将会产生网络资源耗费和内存,磁盘I0的耗费。通常 shuffle分为两部分:Map阶段的数据预备和 Reduce阶段的数据拷贝处理。普通将在mp端的Shuffle称之为 Shuffle Write,在 Reduce端的Shuffle称之为 Shuffle Read。
Shuffle过程简述如下

mp端的Shue过程简述

1) input,根据 split输入数据,运转mp义务;

2) patition,每个map task都有一个内存缓冲区,存储着map的输入结果;

3)spi11,当缓冲区快满的时分需求将缓冲区的数据以暂时文件的方式存放到磁盘;

4) merge,当整个 map task结束后再对磁盘中这个 map task产生的一切暂时文件做合并生成最终的正式输入文件,然后等待 reduce task来拉数据。

[attach]623167[/attach]


map端,有4个map:Reduce端,有3个reduce。4个mp也就是4个JVM,每个JVM处理一个数据分片( split1-split4),每个map产生一个map输入文件,但是每个map都为后面的 reduce产生了3部分数据(分别用红1、绿2、蓝3标识),也就是说每个输入的map文件都包含了3部分数据. mapper运转后,经过 Partitioner接口,根据key或 value及 reduce的数量来决议当前map的输入数据最终应该交由哪个 reduce task处理. Reduce端一共有3个 reduce,去后面的4个map的输入结果中抓取属于本人的数据。

[attach]623168[/attach]


reduce端的 Shuffle过程简述

reduce task在执行之前的工作就是不断地拉取当前job里每个 map task的最终结果,然后对从不同地方拉取过来的数据不断地做 merge,也最终构成一个文件作为 reduce task的输入文件。

1)Copy过程,拉取数据;

2) Merge阶段,合并拉取来的小文件;

3) Reducer计算;

4) Output输入计算结果;

3、YARN的工作原理

3.1、Hadoop1x与 hadoop2x的区别

[attach]623169[/attach]

上图 Hadoop与 hadoop2x的区别

Yarn从 hadoop2引入,最后是为了改善 MapReduce的完成,但是它具有通用性,异样执行其他分布式计算形式。
3.2、为什么要引入yan呢

首先,简单了解 hadoop.x的 MapReduce工作原理:

[attach]623170[/attach]

jobTracker其承担的义务有拆分义务、计算资源、分配资源、调度义务与 dat anode停止通讯。在 hadoop中每个运用程序被表示成一个作业,每个作业又被分成多个义务, jobTracker的作业控制模块担任作业的分解和形状监控。其中形状监控次要包括 Task Tracker形状监控、作业形状监控和义务形状监控,次要为容错和义务调度提供决策根据。
TaskTracker是 JobTracker和Task之间的桥梁:一方面,从 JobTracker接收并执行各种命令:运转义务、提交义务、杀死义务等:另一方面,将本地节点上各个义务的形状经过心跳周期性汇报给 JobTracker, TaskTracker与 Job Tracker和Task之间采用了RFC协议停止通讯。
从图中可以看出 JobTrack属于单节点,每台机器都要与 master节点建立关系,其责任非常大,假如 master节点出现异常,那么整个程序就会非常紧张。因此hadoop2.x分散了JobTrack的权益。
hadoop.2.x的 MapReduce工作原理:

[attach]623171[/attach]

hadoop.2.x的 MapReduce工作原理:


hadoop2.x将 JobTracker的资源管理给了( Resource Manager),作业拆分、调度及监控分给了AM( App Master)。HM有一个可插拔的调度组件 Scheduler(纯属的调度器)担任运转中的各种运用分配资源,不担任运用程序的监控和形状跟踪。当客户端提交一个义务央求,M接收到了,就会寻觅一个合适的机器启动NM(M只担任“寻觅”这个动作)真正启动NM进程的是NM(Node Manager),NM是担任给当前所在机器执行的义务分配资源,来运转 MapReduce操作,而 Container就是所谓的资源,AM本质上也是一个 Container(即资源),只是AM不停止作业的执行,只担任作业的拆分以及下面各个 Container的作业调度及监控:回过来,当NM启动了AM之后,AM就会根据义务来决议向RM央求所需求的机器、资源来完成义务,异样的,RM分配了机器之后, Container还是由各个机器的NM来启动,每个 Container都和AM建立关系。当义务正式跑起来了,NM和AM也不是闲着,NM担任监控当前机器能否正常运转,AM担任监控其作业的形状。

RM:有两个次要组件 Scheduler和 ApplicationsManager:Scheduler担任根据容量、队列等限制,将资源分配给各种正在运转的运用程序。Scheduler是纯粹的调度器,它不对运用程序形状停止监视或跟踪,此外,它不保证由于运用程序缺点或硬件缺点而重新启动义务。 Scheduler根据运用程序的资源需求执行其调度功能:它是基于 Container的笼统概念执行的,包含内存、cpu、磁盘、网络等元素。Scheduler有一个可插入的组件,担任在不同的队列、运用程序等之间划分集群资源。当前的 Scheduler如 CapacityScheduler和 FairSchedulerApplicationsManager担任接受作业提交,央求 Container启动 ApplicationMaster,并在失败时重新启动 ApplicationMaster容器。每个运用程序 ApplicationMaster担任从 Scheduler央求适当的 Container,跟踪其形状井监视进度。

NM是 slave节点的进程,相似 TaskTracker的角色,是每台机器框架的代理,处理来自RM的央求:接收并处理来自AM的 Container启动、中止等各种央求:担任管理那个运用程序的 Container(执行运用程序的同期),并监控他们的资源运用状况(包括:CPU、内存、磁盘和网络),并报告RM。

AM:运用程序的 Master,每一个运用程序对应一个AM,在用户提交一个运用程序时,一个AM的轻量型进程实例就会启动,AM协调运用程序内的一切义务的执行每一个 Application(对应 hadoop.x的Job)都有一个AM,AM运转在RM之外的机器上。ApplicationMaster担任从 Scheduler央求适当的 Container,跟踪其形状并监视进度。本质也是一个 Container。

Container:是义务运转环境的笼统封装,Container只是运用NM上指定资源的权利AM必须向NM提供更多的信息来启动 Container,描画义务的运转资源(节点、内存、CP)、启动命令和运转环境.

Yan架构作业图如下:

[attach]623172[/attach]

Yan架构作业图


总结
我们看到 JobTracker的功能被分散到各个进程中包括 ResourceManager和 NodeManager比如监控功能,分给了Node Manager,和 Application Master, ResourceManager外面又分为了两个组件:调度器及运用程序管理器。也就是说Yarn重构后, JobTracker的功能,被分散到了各个进程中。同时由于这些进程可以被单独部署所以这样就大大减轻了单点缺点及压力。同时我们还看到Yarn运用了 Container,而 hadoop,x中运用了slot,slot存在的缺陷比如只能map或者 reduce用. Container则不存在这个成绩。
四、优缺陷

1、 Hadoop优点:

1成本低,可以运用廉价机器存储数据;

2扩容才能强;

3高效率,经过 MapReduce并行计算,能疾速处理数据;

4牢靠性, hadoop能自动地维护数据的多份副本,并且在义务失败后能自动地重新部署计算义务。
2、 Hadoop缺陷:

1 Hadoop该框架设计的初衷是针对海量数据的运算处理的成绩,因此对于一些数据量很小的处理没有任何优势可言,甚至还不如单机串行的效果,功能也完全表现不出来;

2高时延,只合适离线处理数据;

3 Hadoop不能高效存储大量小文件;

4 Hadoop系统设计的前提是一次写入多次读取的状况,因此无法修正某条详细的数据,只能 overwrite全部的数据,或者是在文件末尾追加数据。
作者: 无聊来看看啊    时间: 2021-6-11 07:00
向楼主学习
作者: 280海湖    时间: 2021-6-11 07:00
关注,等大神更新完了再看!楼主加油!
作者: 林檎彡    时间: 2021-6-11 22:50
我有个小建议,楼主把内容写详细点吧才会吸引更多读者呀。




欢迎光临 智客公社 (http://bbs.cnaiplus.com/) Powered by Discuz! X3.4