Apache Hadoop有2个核心的组件,他们分别是:

HDFS: HDFS是一个分布式文件系统集群,它可以将大的文件分裂成块并将他们冗余地分布在多个节点上,HDFS是运行在用户空间的文件系统

MapReduce: MapReduce是函数式编程领域分布式计算中的一个编程模型,这个模型是专门用于查询/处理存储在HDFS中的大量数据

HDFS

NameNode

namenode将整个源数据维护在内存中,这有助于客户端接收快速响应读取请求。因此运行namenode的机器需要很大的内存。文件的数量越多,内存消耗的越多
namenode也维护存储在磁盘上的持久元数据,称为 fsimage
当在集群中 placed/deleted/updated文件时,这些操作会在edits文件中更新,更新edits日志后,在内存中的元数据也相应更新
每次写入操作都不会更新fsimage

重启namenode会发生以下事件:

  1. 从磁盘读取fsimage文件加载到内存中
  2. 读取edits日志文件中的每个操作,并把这些操作在内存中应用到fsimage
  3. 把fsimage持久化到磁盘

Secondary namenode

因为fsimage文件并不会更新每次操作,而edits 日志文件可能会变得非常大,当namenode需要重启的时候,edits日志文件需要合并到fsimage,这会使得重启变得非常慢,而secondary namenode可以解决这个问题

secondary namenode负责定期执行合并来自namenode的edits日志文件和fileimage

如果namenode进程失败,可以利用secondary namenode合并的数据重建文件系统元数据,因为secondary namenode是定时 checkpoint数据,因此会存在一些数据丢失的情况

注意:secondary namenode并不是故障转移节点

  1. 从namenode获取edits日志文件
  2. 从namenode获取 fsimage文件
  3. 将eidts日志中的所有操作应用到fsimage中
  4. 把fsimage推送到namenode

上面的操作是周期性的执行,因此无论何时重启namenode,它都会有一个相对较新的fsimage,这样启动时间就会快很多

DataNode

datanode是负载存储实际文件的节点,这些文件作为数据块在集群中进行分割,通常是128MB大小的块,块的大小是可以配置的。Hadoop集群中文件块还会将自己复制到其他的datanode冗余,以便在datanode进程失败的时候不会丢失数据,datanode向namenode发送存储在该节点的文件块的信息,并响应所有的namenode文件系统的操作

上图示例,文件A、B和C文件块被复制到集群多个节点上冗余,这确保了即使其中一个节点故障,数据仍然可用。这个集群的复制因子为3,表示文件文件块被复制了3次。namenode维护文件在集群中的位置列表,当有客户端需要访问一个文件,namenode会向客户端提供文件在哪个数据节点上,然后客户端会直接从数据节点访问文件

YARN

YARN是在Hadoop集群中处理数据的一个通用的分布式应用程序管理框架, YARN解决了一下两个重要问题:

  • 支持大的集群(4000+节点)
  • 能够运行MapReduce之外的其他应用程序已经存储在HDFS中的数据,例如MPI和Apache Giraph

YARN 资源管理框架包括 ResourceManager(资源管理器)、Applica-tionMaster、NodeManager(节点管理器)。各个组件描述如下

(1)ResourceManager
ResourceManager 是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(ApplicationManager,AM)。
Scheduler 负责分配最少但满足 Application 运行所需的资源量给 Application。Scheduler 只是基于资源的使用情况进行调度,并不负责监视/跟踪 Application 的状态,当然也不会处理失败的 Task。
ApplicationManager 负责处理客户端提交的 Job 以及协商第一个 Container 以供 App-licationMaster 运行,并且在 ApplicationMaster 失败的时候会重新启动 ApplicationMaster(YARN 中使用 Resource Container 概念来管理集群的资源,Resource Container 是资源的抽象,每个 Container 包括一定的内存、IO、网络等资源)。

(2)ApplicationMaster
ApplicatonMaster 是一个框架特殊的库,每个 Application 有一个 ApplicationMaster,主要管理和监控部署在 YARN 集群上的各种应用。

(3)NodeManager
主要负责启动 ResourceManager 分配给 ApplicationMaster 的 Container,并且会监视 Container 的运行情况。在启动 Container 的时候,NodeManager 会设置一些必要的环境变量以及相关文件;当所有准备工作做好后,才会启动该 Container。启动后,NodeManager 会周期性地监视该 Container 运行占用的资源情况,若是超过了该 Container 所声明的资源量,则会 kill 掉该 Container 所代表的进程。

提交作业给YARN一系列步骤

  1. 当作业提交的集群,Client第一个接收到来自ResourceManager的应用程序ID
  2. 接下来,Client将作业资源复制到HDFS中的一个位置
  3. 然后,ResourceManager启动第一个容器NodeManager管理调出ApplicationMaster
  4. ApplicationMaster基于要执行的作业,请求资源来自ResourceManager
  5. 一旦ResourceManager调度具有请求的容器资源,ApplicationMaster联系NodeManager启动容器并执行任务。 在MapReduce作业的情况下,该任务将是一个map或reduce任务。
  6. 客户端检查ApplicationMaster以获取状态更新提交的工作

The read/write operational flow in HDFS

为了更好的理解HDFS,我们需要知道 HDFS是如何进行以下操作的

  • A file is written to HDFS
  • A file is read from HDFS

HDFS uses a single-write, multiple-read model, where the files are writtern once and read several time.The data cannot be altered once written. However, data can be appended to the file by reopening it(只能追加,不能修改).All files in the HDFS are saved as data blocks.

 Writing files in HDFS

  1. client 告知namenode它想要write a file, namenode检查该文件是否已经存在
  2. 如果存在,将会返回一个消息给client,如果不存在,namenode会给这个新文件创建一个metadata(元数据)
  3. client会将文件分成数据包并建立数据队列,然后将队列中的数据包以流的形式发送给集群中的datanode
  4. namenode维护了datanode信息列表,并且配置好了数据副本因子,namenode 提供datanode构建管道执行写入
  5. 然后将来自数据队列中的第一个数据包传输到第一个datanode,第一个datanode存储了该数据block,然后复制给管道的下一个datanode,这个过程将一直持续到数据包被写入最后一个datanode
  6. 每一个写在databode上的数据包,会进行确认发送给client
  7. 如果数据包无法写入其中一个datanode,那么该datanode会从管道中 删除,并且把其余的数据包写入到正常的datanode. namenode意识到副本数不足,会安排另一个datanode进行复制
  8. 写入所有数据包后,client执行关闭操作,指示数据队列中的数据包已完全传输
  9. client通知namenode写操作已经完成了

 Reading files in HDFS

  1. client连接namenode获取要读取的文件数据块的位置
  2. namenode返回数据块所在datanode地址列表
  3. 对于任何读取操作,HDFS会尝试使用datanode网络最接近client的数据返回
  4. client有了列表后,就会连接datanode然后以流式进行读取数据块
  5. 在一个datanode读取完块后,终止该datanode连接并与承载序列中下一个块的datanode进行数据块传输。这个过程将持续到该文件的最后一个块被读取完

Hadoop基础概念的更多相关文章

  1. Hadoop基础概念介绍

    基于YARN的配置信息, 参见: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ hadoop入门 - 基础概念 ...

  2. hadoop分布式存储(1)-hadoop基础概念(毕业设计)

    hadoop是一种用于海量数据存储.管理.分析的分布式系统.需要hadoop需要储备一定的基础知识:1.掌握一定的linux操作命令 2.会java编程.因此hadoop必须安装在有jdk的linux ...

  3. hadoop分布式存储(1)-hadoop基础概念

    hadoop是一种用于海量数据存储.管理.分析的分布式系统.需要hadoop需要储备一定的基础知识:1.掌握一定的linux操作命令 2.会java编程.因此hadoop必须安装在有jdk的linux ...

  4. 大数据 - hadoop基础概念 - HDFS

    Hadoop之HDFS的概念及用法 1.概念介绍 Hadoop是Apache旗下的一个项目.他由HDFS.MapReduce.Hive.HBase和ZooKeeper等成员组成. HDFS是一个高度容 ...

  5. Hadoop 新生报道(三) hadoop基础概念

    一.NameNode,SeconderyNamenode,DataNode NameNode,DataNode,SeconderyNamenode都是进程,运行在节点上. 1.NameNode:had ...

  6. Hadoop 基础概念

    Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰富,包括ZooKe ...

  7. hadoop基础教程免费分享

    提起Hadoop相信大家还是很陌生的,但大数据呢?大数据可是红遍每一个角落,大数据的到来为我们社会带来三方面变革:思维变革.商业变革.管理变革,各行业将大数据纳入企业日常配置已成必然之势.阿里巴巴创办 ...

  8. Hadoop基础-MapReduce的工作原理第二弹

    Hadoop基础-MapReduce的工作原理第二弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Split(切片)  1>.MapReduce处理的单位(切片) 想必 ...

  9. Hadoop基础-HDFS分布式文件系统的存储

    Hadoop基础-HDFS分布式文件系统的存储 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS数据块 1>.磁盘中的数据块 每个磁盘都有默认的数据块大小,这个磁盘 ...

随机推荐

  1. 前端开发——让算法"动"起来

    正文 当然在我们不清楚具体操作细节前我们可以先假设一下,我们能够用什么来实现.按照以前看过的排序动画我将其分为 1.Js操作Dom,再搭配简单的css 2.Canvas动画 之后在查资料的时候发现还有 ...

  2. Dijk入门(杭电2544题)

    #include<iostream> #include<cstring> using namespace std; #define INF 0x3f3f3f3f int n,m ...

  3. 如何在DELL R420上部署EXSI虚拟化(服务器上的安装)

    <VMware ESXi>是一款虚拟化软件.软件支持windows平台客户端界面管理,客户端界面与正常使用的虚拟机WMware Workstation界面功能类似VMware ESXI 服 ...

  4. [论文理解] Receptive Field Block Net for Accurate and Fast Object Detection

    Receptive Field Block Net for Accurate and Fast Object Detection 简介 本文在SSD基础上提出了RFB Module,利用神经科学的先验 ...

  5. How to solve the error "Field service in com.xx.xxx.xxxx required a bean of type 'com.aa.bb.cc' that could not be found."

    When runung a SpringBoot demo, I  got a error as following: *************************** APPLICATION ...

  6. leetcode 76最小覆盖子串

    time O(n) spaceO(n) 的方法: 还是借助哈希表,所有字母初始化为0,将t中出现的所有字母次数全都记录在哈希表里: 采用双指针,分别为一个头指针head,和尾指针tail.flag记录 ...

  7. Jenkins发布

    右键查看图片显示全图

  8. sklearn.feature_extraction.DictVectorizer

    sklearn.feature_extraction.DictVectorizer:将字典组成的列表转换成向量.(将特征与值的映射字典组成的列表转换成向量) 1. 特征矩阵行代表数据,列代表特征,0表 ...

  9. java:Spring框架4(Project,ER图)

    1.Project: ER图: applicationContext.xml: <?xml version="1.0" encoding="UTF-8"? ...

  10. Azure Data Lake Storage Gen2实战体验

    相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 作为微软Azure上最新 ...