当前位置: 首页 > news >正文

hadoop 的组建概述

  • 一:hdfs 的相关概念
  • 二:yarn 的相关概念

一:hdfs 的相关概念:

1.1 hdfs 的来源:

HDFS 的来源

源自于Google的GFS论文
发表于2003年10月

HDFS是GFS克隆版

Hadoop Distributed File System

易于扩展的分布式文件系统

运行在大量普通廉价机器上,提供容错机制

为大量用户×××能不错的文件存取服务

###1.2 hdfs 的架构:

image_1b2vc350s1j1avfna5r1h82fgg9.png-89.7kB

1. menode 是一个中心服务器,单一节点(简化系统的设计和实现),负
责管理文件系统的名字空间(namespace)以及客户端对文件的访问。

2.操作,NameNode 负责文件元数据的操作,DataNode负责处理文件
内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它
跟那个DataNode联系,否则NameNode会成为系统的瓶颈。

3.本存放在哪些DataNode上由 NameNode来控制,根据全局情况做出块
放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带块
消耗和读取时延

4.Namenode 全权管理数据块的复制,它周期性地从集群中的每个
Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味
着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数
据块的列表。

image_1b2vc3v461ab11bol9sv1c3s3ksm.png-133.2kB

NameNode

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

DataNode

在本地文件系统存储文件块数据,以及块数据的校验和。

Secondary NameNode

用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照

1.3 namenode 的启动过程

image_1b2vc7mm019el1iqqs5pfbg99313.png-101.1kB

1、Name启动的时候首先将fsimage(镜像)载入内存,并执行(replay)编辑日志editlog的的各项操作;

2、一旦在内存中建立文件系统元数据映射,则创建一个新的fsimage文件(这个过程不需SecondaryNameNode)和一个空的editlog;

3、在安全模式下,各个datanode会向namenode发送块列表的最新情况;

4、此刻namenode运行在安全模式。即NameNode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败);

5、NameNode开始监听RPC和HTTP请求

解释RPC:RPC(Remote Procedure Call Protocol)——远程过程通过协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议;

6、系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中;

7、在系统的正常操作期间,namenode会在内存中保留所有块信息的映射信息。

1.4 DataNode 的作用

1.个数据块在DataNode以文件存储在磁盘上,包括两个文件,
一个是数据本身,一个是元数据包括数据块的长度,块数据的
校验和,以及时间戳

2.DataNode启动后向NameNode注册,通过后,周期性(1小
时)的向NameNode上报所有的块信息。

3.心跳是每3秒一次,心跳返回结果带有NameNode给该
DataNode的命令如复制块数据到另一台机器,或删除某个数据
块。如果超过10分钟没有收到某个DataNode 的心跳,则认为该
节点不可用。

4.集群运行中可以安全加入和退出一些机器

1.5 hdfs 的存储活机制

image_1b2vd5a33kir108o7noggj1p8s1g.png-171.6kB

文件

1.文件切分成块(默认大小128M),以块为单位,每个块有多个副本存储
在不同的机器上,副本数可在文件生成时指定(默认3)

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

3.DataNode 在本地文件系统存储文件块数据,以及块数据的校验和。

4.可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能
修改文件内容。
数据损坏(corruption)处理

1.当DataNode读取block的时候,它会计算checksum

2.如果计算后的checksum,与block创建时值不一样,说明
该block已经损坏。

3.Client读取其它DN上的block。

4.NameNode标记该块已经损坏,然后复制block达到预期设
置的文件备份数

5.DataNode 在其文件创建后三周验证其checksum
SafeMode 相关说明

1.安全模式下,集群属于只读状态。但是严格来说,只是保证HDFS
元数据信息的访问,而不保证文件的访问,因为文件的组成Block信
息此时NameNode还不一定已经知道了。所以只有NameNode已了解
了Block信息的文件才能独到。而安全模式下任何对HDFS有更新的操
作都会失败.

2.对于全新创建的HDFS集群,NameNode启动后不会进入安全模式,
因为没有Block信息。

二:yarn 的相关概念

2.1 hadoop 1.x 与 hadoop 2.x 的 比较

image_1b2vdo0c91dsd1p9t19p318grdsl1t.png-168.6kB

2.2 yarn 的架构图

image_1b2vdpq7nhkqumh1vpp1a5kgft2a.png-290.4kB

YARN服务组件

1.YARN 总体上仍然是Master/Slave 结构,在整个资源管理框架中,
ResourceManager 为Master,NodeManager 为Slave。

2.ResourceManager 负责对各个NodeManager 上的资源进行统一
管理和调度

3.当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个
程序的。
ApplicationMaster,它负责向ResourceManager 申请资源,并要
求NodeManger 启动可以占用一定资源的任务。

4.由于不同的ApplicationMaster 被分布到不同的节点上,因此它们
之间不会相互影响
ResourceManager 的作用

1.全局的资源管理器,整个集群只有一个,负责集群资
源的统一管理和调度分配。

  功能
1.1 处理客户端请求

1.2 启动/监控ApplicationMaster

1.3 监控NodeManager

1.4 资源分配与调度
NodeManager 的作用

1. 整个集群有多个,负责单节点资源管理和使用

 功能:

1.1 单个节点上的资源管理和任务管理

1.2 处理来自ResourceManager的命令

1.3 处理来自ApplicationMaster的命令

1.4 NodeManager管理抽象容器,这些容器代表着可供一个特定
应用程序使用的针对每个节点的资源。

1.5 定时地向RM汇报本节点上的资源使用情况和各个Container的
运行状态

Application Master 的作用:

1.1 管理一个在YARN 内运行的应用程序的每个实例

  功能:

1.2 数据切分

1.3 为应用程序申请资源,并进一步分配给内部任务

1.4 任务监控与容错

1.5 负责协调来自ResourceManager的资源,幵通过
NodeManager监视容器的执行和资源使用(CPU、内存等的资
源分配)。

Container 的作用

1. YARN中的资源抽象,封装某个节点上多维度资源,如内存、CPU、磁盘、网络
等,当AM向RM申请资源时,RM向AM返回的资源便是用Container表示的。

2. YARN 会为每个任务分配一个Container,且该任务只能使用该Container中描述
的资源。

 功能

 2.1 对任务运行环境的抽象

 2.2 描述一系列信息

 2.3 任务运行资源(节点、内存、CPU)

 2.4 任务启动命令

 2.5 任务运行环境

YARN 资源管理

1. 资源调度和资源隔离是YARN作为一个资源管理系统,最重要和最基础的两个功能。
资源调度由ResourceManager完成,而资源隔离由各个NM实现。

2. ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的“资源调
度”)后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具
有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。

3. 当谈及到资源时,我们通常指内存,CPU和IO三种资源。Hadoop YARN同时支持
内存和CPU两种资源的调度。

4.内存资源的多少会会决定任务的生死,如果内存不够,任务可能会运行失败;相比之
下,CPU资源则不同,它只会决定任务运行的快慢,不会对生死产生影响。

5. YARN允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点
上的内存会被若干个服务共享,比如一部分给YARN,一部分给HDFS,一部分给HBase等,YARN
配置的只是自己可以使用的,配置参数如下:

image_1b2vev3ja1fdm1bc2jgdhqh9llm.png-279.7kB


6. 目前的CPU被划分成虚拟CPU(CPU virtual Core),这里的虚拟CPU是YARN自己引入的概念,
初衷是,考虑到不同节点的CPU性能可能不同,每个CPU具有的计算能力也是不一样的,比如某
个物理CPU的计算能力可能是另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU
多配置几个虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数。
在YARN中,CPU相关配置参数如下:

image_1b2vf0vhrdg0efn107t1al7ptc13.png-159.4kB

转载于:https://blog.51cto.com/flyfish225/2096387

相关文章:

  • RxJava -- fromArray 和 Just 以及 interval
  • ifup em2启动网卡时报错:connection activation failed
  • BOOST.ASIO源码剖析(一)
  • iis web.config 配置示例
  • 不要仅为85%的用户设计:关注无障碍设计
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • Oracle安装时,已有oracle用户,将用户添加到oinstall和dba用户组
  • freenom域名解析与次级域名
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端CORS请求梳理
  • osquery简单试用
  • 关于Java中分层中遇到的一些问题
  • 156:Ananagrams
  • 区块链技术
  • 浅度理解NodeJS的HTTP模块
  • hexo+github搭建个人博客
  • Android 架构优化~MVP 架构改造
  • android 一些 utils
  • Git学习与使用心得(1)—— 初始化
  • JavaScript HTML DOM
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • k8s 面向应用开发者的基础命令
  • Kibana配置logstash,报表一体化
  • Python socket服务器端、客户端传送信息
  • Python爬虫--- 1.3 BS4库的解析器
  • vuex 笔记整理
  • 初识 webpack
  • 订阅Forge Viewer所有的事件
  • 经典排序算法及其 Java 实现
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端工程化(Gulp、Webpack)-webpack
  • 使用Swoole加速Laravel(正式环境中)
  • 延迟脚本的方式
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (十) 初识 Docker file
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • **PHP二维数组遍历时同时赋值
  • .equals()到底是什么意思?
  • .NET 4.0中的泛型协变和反变
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Documented注解的作用
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @Service注解让spring找到你的Service bean
  • @vue/cli 3.x+引入jQuery
  • [].slice.call()将类数组转化为真正的数组