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 ...
随机推荐
- Java 线程池 ThreadPoolExecutor 的那些事儿
线程池基础知识 ThreadPoolExecutor : 一个线程池 Executors : 线程池工厂,通过该类可以取得一个拥有特定功能的线程池 ThreadPoolExecutor类实现了Exec ...
- CodeForces 639C Bear and Polynomials
Bear and Polynomials 题解: 如果改变一个其中的一个数,那么需要知道的是,前面的数都可以进到当前位来,如果过不来的话,那么就会因为前面有数导致无法变成0. 所以我们将前面的数不断向 ...
- 牛客小白赛5 无关(relationship) 容斥原理(计算因子数的模板)
链接:https://www.nowcoder.com/acm/contest/135/A来源:牛客网 若一个集合A内所有的元素都不是正整数N的因数,则称N与集合A无关. 给出一个含有k个元素的集 ...
- 用mmap做I/O
1. Introduction mmap是Linux中一个相对复杂的函数,仅函数的参数就有6个.但是他也是一个十分强大的函数,在文件I/O,进程间通信,和malloc函数的实现中皆有他的身影 ...
- GraphQL Java-入门指南
GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时. GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任 ...
- 049 模块6-wordcloud库的使用
目录 一.wordcloud库基本介绍 1.1 wordcloud库概述 1.2 wordcloud库的安装 二.wordcloud库使用说明 2.1 wordcloud库基本使用 2.2 wordc ...
- git修改user.name 和user.email
今天刚刚入门了下git,,然后初始化的时候将用户名弄错了...就很气啊.然后网上找了半天都找不出一个可靠的修改全局用户名和邮箱的方法.. 最后还是自己摸索出来了..其实也很简单. 首先进入gi ...
- (转载)非常完善的Log4net配置详细说明
一.前言 在项目中,对项目的日志收集是非常重要的,这里我就说说代码的异常日志收集.收集异常日志,有很多第三方成熟的框架,我这里就介绍一下我常用的Log4net. Log4Net介绍 Log4net 是 ...
- [币严区块链]BitcoinCash - BCH钱包地址生成与扫块充值监控(JAVA版)
本文的方案无需自建节点,因为BCH当前区块数据大小已经达到200G以上,BTC区块数据也已超过300G,若每个币都自建节点,对云服务器的消耗会非常大. 认识BitcoinCash(BCH) Bitco ...
- PythonI/O进阶学习笔记_5.python的set和dict
前言: 我一直觉得对我来说学习知识很忌讳不系统.本篇内容与上一篇 自定义序列类是有联系的. 上一篇比较通范的了解了序列类的一些协议和特性,并且有些list的内容.这篇更加具体到set和dict这两个序 ...