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)的更多相关文章

  1. Hadoop源代码点滴-文件系统HDFS

    HDFS是Hadoop集群的文件系统,这是一种分布(distributed).容错(fault tolerant)的文件系统 所谓分布,是说整个文件系统的内容并非集中存储在一台或几台“文件服务器上”, ...

  2. Hadoop源代码分析:HDFS读取和写入数据流控制(DataTransferThrottler类别)

    DataTransferThrottler类别Datanode读取和写入数据时控制传输数据速率.这个类是线程安全的,它可以由多个线程共享. 用途是构建DataTransferThrottler对象,并 ...

  3. Hadoop源代码点滴-基础概念

    大数据特征:volume(数量).variety(多样性).velocity(产生的速度) 大数据特征:多.乱.快.杂 数据的来源:业务数据.日志.管理文档(OCR).互联网.物联网.外购

  4. Hadoop源代码点滴-自然常数e

    数学里的 e 为什么叫做自然底数?是不是自然界里什么东西恰好是 e? https://www.zhihu.com/question/20296247

  5. hadoop集群之HDFS和YARN启动和停止命令

    假如我们只有3台linux虚拟机,主机名分别为hadoop01.hadoop02和hadoop03,在这3台机器上,hadoop集群的部署情况如下: hadoop01:1个namenode,1个dat ...

  6. Hadoop HDFS, YARN ,MAPREDUCE,MAPREDUCE ON YARN

    HDFS 系统架构图 NameNode 是主节点,存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等.NameNode将 ...

  7. hadoop/hdfs/yarn 详细命令搬运

    转载自文章 http://www.cnblogs.com/davidwang456/p/5074108.html 安装完hadoop后,在hadoop的bin目录下有一系列命令: container- ...

  8. Hadoop(HDFS,YARN)的HA集群安装

    搭建Hadoop的HDFS HA及YARN HA集群,基于2.7.1版本安装. 安装规划 角色规划 IP/机器名 安装软件 运行进程 namenode1 zdh-240 hadoop NameNode ...

  9. Hadoop源代码导入Eclipse

    须要进一步学习hadoop.须要看看内部源代码实现.因此须要将hadoop源代码导入都eclipse中,简单总结一下,详细过程例如以下: 首先确保已经安装了git.maven3.protobuf2.5 ...

随机推荐

  1. React之 redux 的简单介绍及使用

    1.为什么使用redux?在小型react项目的开发中 ,view(视图层)中的数据模型(即数据),可以存放在组件中的 state 对象,换句话说页面中的动态数据存放在 state 中. 但对于开发大 ...

  2. 【JVM从小白学成大佬】6.创建对象及对象的访问定位

    <JVM从小白学成大佬>系列推出到现在,收到了很多小伙伴的好评,也收到了一些小伙伴的建议,在此表示感谢. 有几个小伙伴提出了希望出一篇介绍对象的创建及访问,猿人谷向来是没有原则的,小伙们要 ...

  3. HTML(五)列表,区块,布局,表单和输入

    HTML 列表 无序列表 Coffee Tea Milk 默认是圆点,也可以 圆圈 正方形 有序列表 Coffee Tea Milk Coffee Tea Milk 默认是用数字排序 大写字母 小写字 ...

  4. 从入门到入土的JS 随笔day01

    js 的全称是javascript ,JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型. 它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用 ...

  5. 【selenium】- webdriver常见元素定位(上)

    本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1. 元素的定位 2.By.id 打开Firefox,打开百度首页,右键点击选择“使用Firebug”查看元素. 点击红框内的按钮,将鼠标指针 ...

  6. B-generator 1_2019牛客暑期多校训练营(第五场)

    题意 给出\(x0,x1,a,b\), \(x_i = a\cdot x_{i-1} + b\cdot x_{i-2}\),问\(x_n取模mod\) 题解 用十进制快速幂,二进制快速幂是每到下一位就 ...

  7. EDU 50 E. Covered Points 利用克莱姆法则计算线段交点

    E. Covered Points 利用克莱姆法则计算线段交点.n^2枚举,最后把个数开方,从ans中减去. ans加上每个线段的定点数, 定点数用gcs(△x , △y)+1计算. #include ...

  8. POJ - 3026 Borg Maze BFS加最小生成树

    Borg Maze 题意: 题目我一开始一直读不懂.有一个会分身的人,要在一个地图中踩到所有的A,这个人可以在出发地或者A点任意分身,问最少要走几步,这个人可以踩遍地图中所有的A点. 思路: 感觉就算 ...

  9. BZOJ2038 小Z的袜子 莫队

    BZOJ2038 题意:q(5000)次询问,问在区间中随意取两个值,这两个值恰好相同的概率是多少?分数表示: 感觉自己复述的题意极度抽象,还是原题意有趣(逃: 思路:设在L到R这个区间中,x这个值得 ...

  10. hdu 3966 Aragorn's Story(树链剖分+区间修改+单点查询)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意:给一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路径上 ...