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. C#数据结构_排序

    /** * 冒泡排序 * * @param array * @return */ public static int[] bubbleSort(int[] array) { if (array.len ...

  2. unity编辑器扩展_01(在工具栏中创建一个按钮)

    代码: [MenuItem("Tools/Test",false,1)]    static void Test()    {        Debug.Log("tes ...

  3. Java基础之Iterable与Iterator

    Java基础之Iterable与Iterator 一.前言: Iterable :故名思议,实现了这个接口的集合对象支持迭代,是可迭代的.able结尾的表示 能...样,可以做.... Iterato ...

  4. OpenCvSharp 通过特征点匹配图片

    现在的手游基本都是重复操作,一个动作要等好久,结束之后继续另一个动作.很麻烦,所以动起了自己写一个游戏辅助的心思. 这个辅助本身没什么难度,就是通过不断的截图,然后从这个截图中找出预先截好的能代表相应 ...

  5. Drop Table对MySQL的性能影响分析

    [问题描述] 最近碰到有台MySQL实例出现了MySQL服务短暂hang死,表现为瞬间的并发线程上升,连接数暴增. 排查Error Log文件中有page_cleaner超时的信息,引起我们的关注: ...

  6. C++中的I/O输入输出问题

    C++ I/O navigation: 1.文件输入输出 2.string流 1.输入输出 C++语言不直接处理输入输出,而是通过一些标准库中类型.从设备(文件,控制台,内存)中读取数据,向设备中写入 ...

  7. 牛客练习赛38 E 出题人的数组 2018ccpc桂林A题 贪心

    https://ac.nowcoder.com/acm/contest/358/E 题意: 出题人有两个数组,A,B,请你把两个数组归并起来使得cost=∑i∗ci 最小,归并要求原数组的数的顺序在新 ...

  8. codeforces 749D Leaving Auction(二分)

    题目链接:http://codeforces.com/problemset/problem/749/D 题意:就是类似竞拍,然后报价肯定要比上一个高,然后查询输入k个数表示那些人的竞拍无效, 输出最后 ...

  9. PythonI/O进阶学习笔记_3.2面向对象编程_python的封装

    前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第三篇 封装. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...

  10. Redis的那些最常见面试问题(转)

    Redis的那些最常见面试问题         1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型 ...