1.hadoop架构及作用

(1)Common

hadoop核心组件,基本jar包依赖,公共工具程序

(2)HDFS(Hadoop Distributed File System)

分布式文件系统,解决分布式存储

(3)MapReduce

分布式计算框架

(4)Yarn

分布式资源管理系统

2.HDFS架构及功能

(1)client 客户端

linux window/sheel COMMAND-LINE
java/scala/python PROJECT
向namenode发送请求,和datanode发生交互

(2)NameNode

元数据节点,储存元数据信息,负责处理客户端的请求
(文件block的位置信息不保存在namenode上,namenode只提供文件名,文件大小,块名,块数量,读取文件时client先找到最近的一个datanode节点,通过nodemanager访问resourcemanager,获取块存储的位置信息)

(3)DataNode

数据节点:保存和block检索
执行数据读写操作

(4)Secondary NameNode

合并edit.log到fsimage中
赋值NameNode完成内存中元数据存储的持久化

3.HDFS架构优缺点

优点:

(1)高扩展性

可以根据业务需求增加集群机器的数量,可以是普通机器

(2)高容错性

数据层面:hadoop底层维护多个数据副本 yarn->datanode
管理层面:hadoop框架能自动将失败的任务重新分配
yarn->appmaster->container
zookeeper->namenode

(3)数据量大

依靠hdfs可以操作PB级的数据

(4)流式访问

序列化,流传输,支持任意数据类型

缺点:

(1)不适合低延时

I/O操作频繁

(2)不可以并发

没有锁机制,不支持事务

(3)不使用数据量小的文件

占空间(1个block块占128M),小文件过多,nn内存有限,寻址慢

4.HDFS写数据流程

1.client 请求client创建DFSDFS dfs = FileSystem.open()向NN请求 (源文件已存在)
2.NN 确认目录存在、用户无操作权限 return false否则 return true
3.client 切分并请求第一个Block DNclient将文件切成n个128M的Blockclient向NN请求第1个Block的存储DN列表
4.NN 返回DN列表假如返回:dn1 dn2 dn3
5.client 写入a. FSDOS向dn1请求写入b. dn1请求dn2,dn2请求dn3,分别建立pipeline管道c. dn3响应dn2,dn2响应dn1,dn1响应clientd. Block传输d.1: client读取第一个Block并以Packet(64k)为单位传输,dn1每收到一个Packet会建立等待应答队列,并逐级传输给dn2,dn3d.2: dn3,dn2,dn1逐级应答,并将结果反馈给clientd.3: 重复d.1~2直至Block传输完成f. 关闭FSDOS
6.client发送complete给NN
7.重复3~6直至所有Block传输完成

5.HDFS读数据流程

1.client创建DFSDFS dfs = FileSystem.open()2.DFS向NN请求RPC获取【文件开始部分或全部】Block有序列表列表按距离client的距离升序排序每个Block包含DN地址,如果client就是DN,则本地读取3.DFS向client返回支持文件定位的输入流对象FSDIS【了解】FSDIS中包含一个(DFSIS)DFSInputStream,用来管理DN和NN之间的IO如:DN中数据缺失或者下载一部分之后任务失败,则可以通过DFSInputStream联系NN求助NN借助YARN找到距离最近的另一个备份节点将未完成的下载任务迁移到该节点,并通过【支持文件定位】的输入流对象FSDIS进行【续传】4.client调用FSDIS的read()找到离client最近的DN,并连接DN5.DFSIS依次读取一个批次的Blocka. 读取包含文件第一个Block的最近DN地址b. 重复调用read()方法,直至第一个Block读取完成c. 关闭DN连接d. 重复a~c直至第一个批次的Block全部读取完成6.重复2~5,直至所有批次的Block读取完成7.关闭DFSIS,FSDIS,DFS

5.MapReduce过程详解

1.确定MapTask数和设置分区

TextInputFormat extends FileInputFormat implement InputFormat

InputFormat
InputFormat 的主要功能就是确定每一个 map 任务需要读取哪些数据以及如
何读取数据的问题,每一个 map 读取哪些数据由 InputSplit(数据切片)决定,
如何读取数据由 RecordReader 来决定。InputFormat 中就有获取 InputSplit 和RecordReader 的方法

FileInputFormat实现了InputFormat,实现了 getSplit方法,可设置切片大小,通过切片大小可设置MapTask任务个数
computeSliteSize=Math.max(minSize, Math.min(maxSize, blockSize))
默认为blockSize大小
NumMapTask=ceil(FileSize/computeSliteSize)

TextInputFormat继承了FileInputFormat,重写了getRecordReader方法,设定了读取数据的方式为逐行读取,每条记录是一行输入。键是LongWritable 类型,存储该行在整个文件中的字节偏移量。值是这行的内容,不包括任何行终止符(换行符和回车符)

2.MapTask过程

(1)Read阶段:通过TextInputFormat->RecordReader按inputSplit记录的文件位置逐行读取,以行字节偏移量作为k,一行内容为vaue,通过context封装,作为参数传入mapper方法中
(2)Map阶段:通过mapper方法中设置的逻辑方法对上一步产生的(k,v)做处理,生成新的(k,v)
(3)Collect阶段:在用户编写 map()函数中,当数据处理完成后,一般会调用 OutputCollector.collect()输出结果。在该函数内部,它会将生成的 key/value分区(调用 Partitioner),并写入一个环形内存缓冲区中。
4.Spill 阶段:即“溢写”,当环形缓冲区满后,MapReduce 会将数据写到本地磁盘上,生成一个临时文件。需要注意的是,将数据写入本地磁盘之前,先要对数据进行分区,再按键值进行排序。如果设置了combiner,则还需进行合并压缩。溢写会产生多个小文件
5.Combiner阶段:当所有数据处理完,溢出结束,对所有小文件进行合并。合并以分区为单位,并且保证分区内按key有序。这一步的结果保证了MapTask结束后生成了一个分区有序的大文件

3.Shuffle阶段

6.reducetask根据自己的分区号去各个maptask节点上拷贝相同分区的数据到本地磁盘工作目录上,如果不超过阈值,直接放到内存中,再进行合并为大文件,大文件按照key值有序排列

4.ReduceTask阶段

7.调用GroupingComparator方法对大文件里的数据进行按key分组,从文件中每次取出一组(k,values),调用自定义reduce方法进行逻辑处理

8.通过OutputFormat方法将结果数据写入part-r-0000文件中

5.YARN基本框架及主要功能

(1)ResourceManage

ResourceManager 是 YARN 中的全局资源管理器,相当于将集群中各个机器可用的资源看做一个整体,然后进行统一管理和分配,它会接收来自各个节点(NodeManager)的资源回报信息,并将这些信息按照一定的策略分配给应用程序。
ResourceManager 主要作用

  1. 处理客户端请求,Clinet 提交 Job,首先是由ResourceManager 来反馈。
  2. 监控 NodeManager,监控 NodeManager 心跳,发送指令给 NodeManager。
    1. 启动或监控 ApplicationMaster。

4.资源的分配和调度。
ResourceManager 核心组成:
1.Resource Scheduler(资源调度器),主要负责协调集群中各个应用的资源分配,保证整个集群的运行效率。Resouce Scheduler 只是一个纯调度器,只负责给用户提交的应用分配 Container(资源),它不会关注应用程序监控及其运行状态等信息,它不做监控以及应用程序的状态跟踪,并且不负责应用程序的容错,也就是说,当应用程序失败时,它不负责重启应用程序。
2.ApplicationManager(应用管理器),主要负责接收用户应用的提交请求,为应用程序分配第一Container 来运行ApplicationMaster还有就是负责监控ApplicationMaster,并在遇到失败时重启ApplicationMaster 运行的Container。ApplicationMaster 每一个程序都会有一个,运行在 Container 中,可以看做是每一个应用的管理者。

(2) NodeManager

NodeManager 运行在集群的节点上,这一点从前面安装分布式环境中可以看
出,一般 NodeManager 会与 DataNode 在同一个节点。NodeManager 在集群中会
有多个,负责管理每个节点上的资源。它主要负责接收来自 ResouceManager 的
资源分配请求,分配具体的 Container 给具体的任务,同时,它还负责监控并报
告 Container 使用信息给 ResouceManager。NodeManager 只负责管理自身节点上
的 Container,并不关心运行在 Container 上的任务的运行信息,任务的运行信息
由 ApplicationMaster 来管理。
NodeManager 主要作用:
➢ 管理单个节点上的资源
➢ 监控 Container 生命周期和使用的资源
➢ 处理来自 ResourceManager 的指令
➢ 处理来自 ApplicationMaster 的指令
在 NodeManager 注册到 ResourceManager 之后,它就会不间断的向
ResourceManager 发送心跳(heartbeat),如果 ResourceManager 有需要它执行
的指令,就作为响应发送给它。在 NodeManager 加载一个 Container 之前,它需
要本地化需要的资源,包括数据文件,可执行文件,shell script 等。这些 Resource
可能有能够在不同用户之间共享的资源,有能够在相同用户不同应用之间共享的
资源,以及只能够被这一个 Container 使用的资源。NodeManager 也可以在
ResourceManager 的指示下,杀掉 Container。当处于下面的几种场景中时,
NodeManager 就可能 Kill 掉一个 Container。 ➢ ResourceManager 告诉它,Application 已经完成了。
➢ Scheduler 决定抢占这个 Container,并将它分配给另一个 Application 或者
用户。
➢ NodeManager 检测到,这个 Container 使用的资源已经超过指定的资源限
制。
当一个 Container 完成时,NodeManager 会清除它在本地存储的数据。当一
个应用完成时,NodeManager 会删除全部跟它相关的 Container 的数据

(3) ApplicationMaster

ApplicationMaster 运行在 Container 中,它主要功能是向 ResourceManager
申请资源和 NodeManager 协同工作,运行应用的各个任务(比如 MapTask、
ReduceTask),然后跟踪它们状态及监控各个任务的执行,遇到失败的任务还负
责重启它。YARN 中运行的每个应用程序都有一个自己独立的 ApplicationMaster。
ApplicationMaster(AM)的主要作用:
➢ 负责数据的切分。比如 MapReduce 任务会根据 InputSplit 信息来进行数
据切分。
➢ 为应用程序申请资源,并进一步分配给内部任务。比如 MapReduce 任务,
主要是为 MapTask 和 ReduceTask 申请运行资源来运行 Task
➢ 内部任务的监控和容错。
➢ 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视任务
的执行和资源使用情况。
ApplicationMaster 启动后会和 ResourceManager 保 持 连 接 , 定 期 向
ResourceManager 发送心跳(heartbeat),回报自己的健康信息。然后计算应用
(Application)需要的资源,然后跟 ResourceManager 沟通,让 ResourceManager
给它分配 Container,分配了 Container 后,ApplicationMaster 和 NodeManager 沟
通来加载 Container 运行任务

(4) Container

Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内
存、CPU、磁盘、网络等。Container 是 YARN 框架的计算单元,是具体运行 Task
(如 MapTask、ReduceTask)的基本单位。Container 是一个动态资源分配单位,
将内存、CPU、磁盘、网络等资源封装在一起,限定了每个任务使用的资源量。
从上面的描述可以看出,Container 很像我们使用的虚拟机系统,就是在
NodeManager 节点机器上分配一块独立的空间来运行任务。
Container 与集群节点的关系:一个节点可以运行多个 Container,但是需要
明确的是 Container 不能跨多个机器。任何一个用户提交的应用拆分后的任务都
必须运行在一个或多个 Container 中。

6.yarn-job执行全过程


1.client向ApplicationManager发出提交job的请求
2.ApplicationManager返回一个JobID及job资源的提交路径
3.client将运行job所需要的jar包,配置信息,切片信息等资源上传到返回的HDFS路径中
4.上传成功后,client向ApplicationManager发出执行job的请求
5.ApplicationManager将请求提交给ResourceSchedule
6.ResourceSchedule将job放到调度队列,当执行到该job时,通ApplicationManager
7.ApplicationManage在一个相对空闲的namenode上开辟container,创建ApplicationMaster
8.ApplicationMaster下载client提交的资源到本地,根据inputsplit信息生成MapTask和ReduceTask并确定各自任务数
9.ApplicationMaster向ResourceSchedule申请运行多个MapTask任务的资源
10. ResourceSchedule 将运行 MapTask 任 务 分 配 给 空 闲 的 多 个NodeManager,NodeManager 分别领取任务并创建容器(Container)
11. ApplicationMaster向接收到任务的nodemanager发送开启MapTask任务指令,每个接收到任务的 NodeManager 启动 MapTask,MapTask 对数据进行处理,并分区排序。
12.MrAppMaster 等待所有 MapTask 运行完毕后,向 ResourceManager申请容器(Container),运行 ReduceTask。
13.程序运行完毕后,MrAppMaster 会向 ResourceManager 申请注销自己

hadoop生态圈详解相关推荐

  1. 《Hadoop技术详解》一导读

    前 言 Hadoop技术详解 本书采用的约定 本书采用以下排版约定. 斜体 用于表明新的术语.URL.电子邮件地址.文件名和文件扩展名. 等宽字体 用于程序清单,正文段落中有关的程序元素,如变量及函数 ...

  2. Apache Hadoop版本详解

    由doop版本混乱多变,因此,Hadoop的版本选择问题一直令很多初级用户苦恼.本文总结了ApacheHadoop和Cloudera Hadoop的版本衍化过程,并给出了选择Hadoop版本的一些建议 ...

  3. Hadoop Streaming详解

    一: Hadoop Streaming详解 1.Streaming的作用 Hadoop Streaming框架,最大的好处是,让任何语言编写的map, reduce程序能够在hadoop集群上运行:m ...

  4. Hadoop日志详解

    文章目录 1 Hadoop日志详解 2 Hadoop 系统服务输出的日志 2.1 修改Hadoop系统服务日志目录(包括NameNode.secondarynamenode.datanode.reso ...

  5. Spark之 spark简介、生态圈详解

    来源:http://www.cnblogs.com/shishanyuan/p/4700615.html 1.简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorith ...

  6. Hadoop生态系统详解

    4.1 Hadoop生态系统 狭义的Hadoop VS 广义的Hadoop 广义的Hadoop:指的是Hadoop生态系统,Hadoop生态系统是一个很庞大的概念,hadoop是其中最重要最基础的一个 ...

  7. Hadoop核心组件详解—HDFS、YARN、MapReduce

    Hadoop 是一个开源的分布式计算和存储框架,它的作用非常简单,就是在多计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供平台支持,相当于在某种程度上将多台计算机组织成 ...

  8. hadoop配置文件详解系列(二)-hdfs-site.xml篇

    上一篇介绍了core-site.xml的配置,本篇继续介绍hdfs-site.xml的配置. 属性名称 属性值 描述 hadoop.hdfs.configuration.version 1 配置文件的 ...

  9. hadoop SecondNamenode 详解

    SecondNamenode名字看起来很象是对第二个Namenode,要么与Namenode一样同时对外提供服务,要么相当于Namenode的HA. 真正的了解了SecondNamenode以后,才发 ...

最新文章

  1. mac redis 链接_在Ubunt/Mac系统安装Redis以及设置Redis密码并且允许远程连接 - Laravel学习网...
  2. 编译安装openresty+mysql+php7
  3. 微服务、SOA 和 API对比与分析
  4. 暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...
  5. SMSSMS垃圾邮件检测器的专业攻击
  6. [html]请描述HTML元素的显示优先级
  7. C#后台调用前台js(RegisterStartupScript)
  8. Linux内核安装-5.9.1为例
  9. PAT (Basic Level) Practise (中文)- 1002. 写出这个数 (20)
  10. Android修改Eclipse 中的Default debug keystore路径,以及修改android的AVD默认路径
  11. 嫦娥四号生物科普载荷内长出月球第一片植物嫩芽
  12. memcache使用方法测试 # 转自 简单--生活 #
  13. Opencv获取DroidCamx视频流并改变分辨率
  14. 【转】推荐系统算法总结(一)
  15. 华为手机序列号前三位_华为Nova2s手机序列号前六位是TPG4C1是什么意思
  16. 2022即将结束,2023,扬帆起航!
  17. html背景对联效果恭贺新春,恭贺新春的对联
  18. 4种常见的鉴权方式及说明
  19. GrayWorld 色彩均衡算法
  20. ConcurrentHashMap(jdk1.8)讲解及常见面试题

热门文章

  1. 力天创见客流热区图分析
  2. ae无法连接ame_怎么我的AE无法连接media encoder?如何解决AE链接不了media encoder的问题?求教谢谢...
  3. mean(求均值),max/min(求最值)
  4. 谷歌云开大会,李飞飞等高管公布多款AI新产品
  5. ADT: Graph 图
  6. BS工作原理—BS总结
  7. 【数据结构】单链表(增、删、查、改)的实现 [初阶篇_ 复习专用]
  8. 如何利用CRM软件建立有利可图的客户关系?
  9. ThinkPHP 关闭调试模式
  10. setup time和hold time