Hadoop源代码点滴-系统结构(HDFS+YARN)
Hadoop建立起HDFS和YARN两个字系统,前者是文件系统,管数据存储;后者是计算框架,管数据处理。
如果只有HDFS而没有YARN,那么Hadoop集群可以被用作容错哦的文件服务器,别的就没有什么应用可言了。虽然HDFS是个分布式的文件系统,但是对服务器的用户来说那只是他的内部实现,从外部看与一般的Raid结构的文件服务器并无多大的区别。
从功能和层次上看,YARN是HDFS的用户,是HDFS的上一层,YARN的功能是建立在HDFS基础上的,HDFS提供数据供YARN字系统处理和计算。
YARN代表中一种新的计算模式,在传统的“客户/服务”模式中,计算在哪里,就把数据(通过网络)搬运到哪里。而YARN所实现的模式却是“数据在哪里,计算就在哪里进行”YARN子系统里的计算就好像溶化在HDFS所在的集群中一样。传统的“客户/服务”模式是哑铃状的集中存储加集中计算,而Hadoop的模式是“溶化”式的、“打成一片”的分布存储家分布计算。显然,对于大数据处理,后者的效率(从而其价值)比前者要大得多。
这两个子系统都是分布式的,但都是主从式分布。HDFS、YARN都有主节点、从节点。客户只能跟YARN的主系统打交道,而不直接跟任何一个从节点打交道;即使他正在某个从节点上,也只是借由这个从节点跟主节点打交道。同样,如果用户要将一个文件复制到HDFS中也首先要跟HDFS主节点打交道,而后在主节点的安排和指引下将文件内容传递到某些从节点上。
YARN和HDFS是同一个集群上的两个子系统,但和并不意味着把集群中的节点机器划分为两个集合,分别用于两个字系统;而是集群中 的每个节点及其都扮演着两种角色,打折两份工。所以,当我们说某台节点是HDFS的话一个从节点时,他也许(多半)又是YARN的从节点,但也不排除恰巧是YARN的主节点的可能。
HDFS主从节点分别是NameNode的JVM进程、DataNode的JVM进程。
YARN主从节点分别是ResourceManager的JVM进程、NodeManager的JVM进程。
假定某个节点是从节点,则其上可能运行着NodeManager的JVM、DataNode的JVM、Mapper的JVM。
用户眼中的Hadoop,更多的是指YARN。
在早期的Hadoop系统中(2.0之前的版本),在主节点上扮演“中央政府”角色的是JobTracker的JVM进程,子节点运行的是TaskTracker,TaskTracker负责将作用(如mapper、Reducer)的JVM进程投入运行。JobTracker负责跟踪TaskTracker的运行,TaskTracker负责跟踪Mapper、Reducer的运行。
主节点上的RM掌管着集群内各个节点上资源的分配使用,记录着个节点的资源时候情况。这里的所谓的资源就是存储和CPU。存储其实质虚存空间,CPU也是指“虚核”,即VCore。什么叫VCore呢,一个进程,一个线程,一台JVM都可以占用一个VCore,但是一个线程绝对不会需要两个VCore。
一个作业被提交到RM,其申请材料首先会被保存起来,排入一个等待调度的队列。然后RM通过一个YARN调度模块进行调度,首先在它的账本中选出一个具有足够空闲的节点,让其担任“项目组长”的角色,并将一个操作系统层面的Shell命令行连同分配的资源配额等信息打包作为一个容器发送给这个节点,使其就地启动一个进程作为这个作业的“应用主管”,即Application Master,缩写为AM,这就好比“中央”(主节点)在收到作业请求后就立项(排队调度),并指定一个“地方政府”(子节点)作为该项目的牵头单位,在当地成立一个项目组,组长的角色成为AM(一个JVM进程)。
注意,这里所的是AM,而不是“Job Master"。从从前的JobTracker不同,现在主节点上的RM已经把视野从“作业”扩展到了“应用”,意思是可以在YARN框架中运行的不再限于原来的Java作业,也可以是普通的任何“应用”,可以不是Java类,还可以不是MapReduce。
此外,交由“牵头单位”用来启动的AM进程的shell命令也并非固定不变的,而是取决于所提交的具体应用。
所以,AM不限于java,Task也不限于java。
AM是一个独立的进程,独立的JVM,而不是与当地NodeManager在一个模块中,与NodeManager不在同一个JVM上。
一个应用一旦有了AM,就开始分析,如分解成16个Mapper和1个Reducer,那么至少再需要17个容器(不算AM本身所占的容器),即17个进程,如果完成任务的是java,即17个JVM进程。17个容器是要想RM申请的,AM无权自行发放,所以AM需要就具体应用所含的任务逐一向RM申请容器,申请通过后,RM将容器发送给AM(而不是直接发送给指派的节点)。
AM得到RM分配下来的容器之后,就要与该容器所指派的节点联系,将容器转发给这个节点,以“发动launch”这个容器所包含的任务在目标节点上运行。指定的节点拿到这个任务后,启动一个进程来运行这个任务。
为什么要把容器中的任务作为进程运行,(对于java)而不是放在NodeManager(jvm)中作为一个模块来运行呢?这里有几个原因。1、安全考虑,防止Task的Bug把整个NodeManager拖垮。2、灵活性的考虑,Task可能不是java体系的,肯呢个是c++、shell。3、另外一个NodeMange可能承担多个应用的任务,如果不把task作为独立的进程,就会给管理带来困难。
发动了容器所含的任务在所指派节点上运行之后,AM和RM并非就袖手旁观,而是通过心跳密切注视和管理者这些任务的运行,必要时kill
Hadoop源代码点滴-系统结构(HDFS+YARN)的更多相关文章
- Hadoop源代码点滴-文件系统HDFS
HDFS是Hadoop集群的文件系统,这是一种分布(distributed).容错(fault tolerant)的文件系统 所谓分布,是说整个文件系统的内容并非集中存储在一台或几台“文件服务器上”, ...
- Hadoop源代码分析:HDFS读取和写入数据流控制(DataTransferThrottler类别)
DataTransferThrottler类别Datanode读取和写入数据时控制传输数据速率.这个类是线程安全的,它可以由多个线程共享. 用途是构建DataTransferThrottler对象,并 ...
- Hadoop源代码点滴-基础概念
大数据特征:volume(数量).variety(多样性).velocity(产生的速度) 大数据特征:多.乱.快.杂 数据的来源:业务数据.日志.管理文档(OCR).互联网.物联网.外购
- Hadoop源代码点滴-自然常数e
数学里的 e 为什么叫做自然底数?是不是自然界里什么东西恰好是 e? https://www.zhihu.com/question/20296247
- hadoop集群之HDFS和YARN启动和停止命令
假如我们只有3台linux虚拟机,主机名分别为hadoop01.hadoop02和hadoop03,在这3台机器上,hadoop集群的部署情况如下: hadoop01:1个namenode,1个dat ...
- Hadoop HDFS, YARN ,MAPREDUCE,MAPREDUCE ON YARN
HDFS 系统架构图 NameNode 是主节点,存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等.NameNode将 ...
- hadoop/hdfs/yarn 详细命令搬运
转载自文章 http://www.cnblogs.com/davidwang456/p/5074108.html 安装完hadoop后,在hadoop的bin目录下有一系列命令: container- ...
- Hadoop(HDFS,YARN)的HA集群安装
搭建Hadoop的HDFS HA及YARN HA集群,基于2.7.1版本安装. 安装规划 角色规划 IP/机器名 安装软件 运行进程 namenode1 zdh-240 hadoop NameNode ...
- Hadoop源代码导入Eclipse
须要进一步学习hadoop.须要看看内部源代码实现.因此须要将hadoop源代码导入都eclipse中,简单总结一下,详细过程例如以下: 首先确保已经安装了git.maven3.protobuf2.5 ...
随机推荐
- Filter(过滤器)(有待补充)
Filter(过滤器) 一.Filter(过滤器)简介 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的 ...
- Delphi - Indy TIdMessage和TIdSMTP实现邮件的发送
idMessage / idSMTP 首先对idMessage类的各种属性进行赋值(邮件的基本信息,如收件人.邮件主题.邮件正文等),其次通过idSMTP连接邮箱服务器,最后通过idSMTP的Send ...
- java基础-多线程一
什么是线程 说到线程就不得不说下进程了, 大家都知道,许许多多的线程组合在一起就成了一个进程,进程是由操作系统进行资源操作的一个最小的单位,线程则是比进程更小的实际执行操作的单位:每个线程都有自己的堆 ...
- cogs249 最长公共子串(后缀数组 二分答案
http://cogs.pro:8080/cogs/problem/problem.php?pid=pxXNxQVqP 题意:给m个单词,让求最长公共子串的长度. 思路:先把所有单词合并成一个串(假设 ...
- 271.已正确安装证书,但https显示连接不安全(此页面的部分内容不安全)
1.问题描述 成功安装证书,但是显示连接不安全 此页面的部分内容(例如图像)不安全 如下图 2.问题原因 页面引用(含有)http资源的文件.图片.脚本 如:图片引自其他http资源的网站 我的是引自 ...
- 【Offer】[15] 【二进制中1的个数】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路分析 让整数和1相与,可以判断整数二进制表示中最右边一位是否为1, ...
- Spring源码分析之-加载IOC容器
本文接上一篇文章 SpringIOC 源码,控制反转前的处理(https://mp.weixin.qq.com/s/9RbVP2ZQVx9-vKngqndW1w) 继续进行下面的分析 首先贴出 Spr ...
- sql 增删改列名
添加列:alter table table_name add new_column data_type [interality_codition] ALTER TABLE dbo.tb newColu ...
- thinkphp5.1导出excel文件第三方类库运用
若没安装请到:链接地址 https://www.phpcomposer.com/这里安装 composer 安装过的,cmd切换到项目根目录运行:composer require phpoffice/ ...
- 剖析nsq消息队列(二) 去中心化代码源码解析
在上一篇帖子剖析nsq消息队列(一) 简介及去中心化实现原理中,我介绍了nsq的两种使用方式,一种是直接连接,还有一种是通过nslookup来实现去中心化的方式使用,并大概说了一下实现原理,没有什么难 ...