Hadoop核心之分布式文件系统HDFS
参考:https://www.cnblogs.com/maybe2030/p/4593190.html
Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)是Hadoop的核心模块之一,它主要解决Hadoop的大数据存储问题,其思想来源与Google的文件系统GFS。HDFS的主要特点:
保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。运行在廉价的机器上。
适合大数据的处理。HDFS默认会将文件分割成block,64M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重。
HDFS中的两个重要角色:
[Namenode]
1)管理文件系统的命名空间。
2)记录每个文件数据快在各个Datanode上的位置和副本信息。
3)协调客户端对文件的访问。
4)记录命名空间内的改动或者空间本省属性的改动。
5)Namenode 使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等。
从社会学来看,Namenode是HDFS里面的管理者,发挥者管理、协调、操控的作用。
[Datanode]
1)负责所在物理节点的存储管理。
2)一次写入,多次读取(不修改)。
3)文件由数据库组成,一般情况下,数据块的大小为64MB。
4)数据尽量散步到各个节点。
从社会学的角度来看,Datanode是HDFS的工作者,发挥按着Namenode的命令干活,并且把干活的进展和问题反馈到Namenode的作用。
客户端如何访问HDFS中一个文件呢?具体流程如下:
1)首先从Namenode获得组成这个文件的数据块位置列表。
2)接下来根据位置列表知道存储数据块的Datanode。
3)最后访问Datanode获取数据。
注意:Namenode并不参与数据实际传输。
数据存储系统,数据存储的可靠性至关重要。HDFS是如何保证其可靠性呢?它主要采用如下机理:
1)冗余副本策略,即所有数据都有副本,副本的数目可以在hdfs-site.xml中设置相应的复制因子。
2)机架策略,即HDFS的“机架感知”,一般在本机架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提供带宽利用率。
3)心跳机制,即Namenode周期性从Datanode接受心跳信号和快报告,没有按时发送心跳的Datanode会被标记为宕机,不会再给任何I/O请求,若是Datanode失效造成副本数量下降,并且低于预先设置的阈值,Namenode会检测出这些数据块,并在合适的时机进行重新复制。
4)安全模式,Namenode启动时会先经过一个“安全模式”阶段。
5)校验和,客户端获取数据通过检查校验和,发现数据块是否损坏,从而确定是否要读取副本。
6)回收站,删除文件,会先到回收站/trash,其里面文件可以快速回复。
7)元数据保护,映像文件和事务日志是Namenode的核心数据,可以配置为拥有多个副本。
8)快照,支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态。
如上图所示,HDFS也是按照Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。
-
NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
-
SecondaryNameNode:是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。
-
DataNode:Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。
-
热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。
-
冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。
-
fsimage:元数据镜像文件(文件系统的目录树。)
-
edits:元数据的操作日志(针对文件系统做的修改操作记录)
-
namenode内存中存储的是=fsimage+edits。
-
SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量。
Hadoop核心之MapReduce
上部分提到Hadoop存储大数据的核心模块HDFS,这一部分介绍Hadoop处理大数据部分的核心模块MapReduce。
Apache Foundation对MapReduce的介绍:“Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.”
由此可知,Hadoop核心之MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有着这些关键词,一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。因此,对于MapReduce,可以简洁地认为,它是一个软件框架,海量数据是它的“菜”,它在大规模集群上以一种可靠且容错的方式并行地“烹饪这道菜”。
MapReduce主要是用于解决Hadoop大数据处理的。所谓大数据处理,即以价值为导向,对大数据加工、挖掘和优化等各种处理。
MapReduce擅长处理大数据,它为什么具有这种能力呢?这可由MapReduce的设计思想发觉。MapReduce的思想就是“分而治之”。Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。“简单的任务”包含三层含义:一是数据或计算的规模相对原任务要大大缩小;二是就近计算原则,即任务会分配到存放着所需数据的节点上进行计算;三是这些小任务可以并行计算,彼此间几乎没有依赖关系。Reducer负责对map阶段的结果进行汇总。至于需要多少个Reducer,用户可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1。
MapReduce的工作机制如图所示:
MapReduce的整个工作过程如上图所示,它包含如下4个独立的实体:
1)客户端,用来提交MapReduce作业(程序员编写的运行在MapReduce上的应用程序称为作业(job))。
2)jobtracker,用来协调作业的运行。
3)tasktracker,用来处理作业划分后的任务。
4)HDFS,用来在其它实体间共享作业文件。
MapReduce整个工作过程有序地包含如下工作环节:
1)作业的提交
2)作业的初始化
3)任务的分配
4)任务的执行
5)进程和状态的更新
6)作业的完成
- 分阶段展示
Hadoop核心之Yarn
YARN 通过两种长期运行的守护进程提供其核心服务:一个资源管理器(resource manager, one per cluster) 管理集群资源的使用; 运行于集群内所有节点上的
节点管理器(node managers) 用于启动和监视容器(container). 一个容器使用一系列受限的资源(内存,CPU,等)执行应用程序特定的进程。依赖于 YARN 是如何
配置的,一个容器可能是一个 Unix 进程,或者一个 Linux cgroup.
在 YARN 上运行一个应用程序,客户端联系 resource manager 并请求它运行一个 application master 进程。 resource manager 找到一个能够在一个容器内运行
application master 的 node manager. 一旦 application master 运行起来它到底能做什么完全取决于应用程序。它可以简单地在它运行的容器内运行一个计算并
将结果返回给客户端。或者,它从 resource manager 请求更多的容器,并使用它们运行一个分布式计算。后面就是 MapReduce YARN 应用程序做的事情了。
YARN 本身并不为应用程序各个部分(client, master, process) 之间提供任何彼此通信的方法。很多重要的 YARN 应用程序使用一些远程通信机制(例如 Hadoop 的RPC 层)来将状态更新和结果传递回给客户端,但这些是应用程序特定的。
原文:https://blog.youkuaiyun.com/devalone/article/details/80679872