hadoop

Hadoop是什么?Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算.

大数据的四个特征:

海量的数据规模,多样的数据类型,快速的数据流转,数据价值的体现。

hadoop2x的核心模块

Hadoop Comon:

为其他Hadoop模块提供基础设施

Hadoop HDFS

一个高可靠,高吞吐量的分布式文件系统

Hadoop MapReduce:

一个分布式的离线并行计算框架

Hadoop YARN:

一个新的MapReduce框架,任务调度与资源管理

HDFS

Hadoop的设计思想受到Google公司的GFS设计思想的启示,基于一种开源的理念实现的分布式分布式文件系统。HDFS的设计基础与目标如下。

1)硬件错误(Hardware Failure)是常态,因而需要数据冗余技术。

2)流失数据访问(Streaming Data Access),即数据批量读取而非随机读写,Hadoop擅长做数据分析而不是事务处理。

3)大规模数据集(Large Data Sets)。

4)简单一致性模型(Simple Coherency Model),即为了降低系统复杂度,对文件采用一次性写多次读的逻辑设计,也就是文件一经写入,关闭,就再不要修改。

5)“Moving Computation is Cheaper than Moving Data”,通俗理解,程序采用“数据就近”原则分配节点执行。

6)Portability Across Heterogeneous Hardware and Software Platforms,即有着很强的可扩展性。

hadoop的核心组件扮演怎样的角色 hadoop2.x核心组件_HDFS



HDFS体系结构

HDFS体系结构如图1所示,它采用主从结构,Namenode属于主段,Datanode属于从端。

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)快照,支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态。

Mapreduce

是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输入(input),通过本身定义好的计算模型,得到一个输出(output),这个输出就是我们所需要的结果。

MapReduce将计算过程分为两个阶段:Map和Reduce Map阶段并行处理输入数据,Reduce阶段对Map结果进行汇总。

Shuffle链接Map和Reduce两个阶段: Map Task将数据写到本地磁盘,Reduce Task从每个Map Task上读取一份数据

仅适合离线批处理:具有良好的容错性和扩展性,适合简单的批处理任务

缺点明显: 启动开销大,过多使用磁盘导致效率低下等

YARN

YARN是资源管理系统,理论上支持多种资源,目前支持CPU和内存两种资源


YARN产生背景


    直接源于MRv1在几个方面的缺陷


            扩展性受限


            单点故障


            难以支持MR之外的计算


    多计算框架各自为战,数据共享困难


            MR:离线计算框架


            Storm:实时计算框架


            Spark:内存计算框架


YARN设计目标



    通用的统一资源管理系统



        同时运行长应用程序和短应用程序



    长应用程序



        通常情况下,永不停止运行的程序



        Service、HTTP Server等



    短应用程序



        短时间(秒级、分钟级、小时级)内会运行结束的程序



        MR job、Spark Job等





YARN基本架构




hadoop的核心组件扮演怎样的角色 hadoop2.x核心组件_HDFS_02





ResourceManager


整个集群只有一个,负责集群资源的统一管理和调度


详细功能


        处理客户端请求


        启动/监控ApplicationMaster


        监控NodeManager


        资源分配与调度


NodeManager


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


详细功能


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


        处理来自ResourceManager的命令


        处理来自ApplicationMaster的命令


ApplicationMaster


每个应用有一个,负责应用程序的管理


详细功能


        数据切分


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


        任务监控与容错


Container


对任务运行环境的抽象


描述一系列信息


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


        任务启动命令


        任务运行环境


YARN运行过程



hadoop的核心组件扮演怎样的角色 hadoop2.x核心组件_hadoop的核心组件扮演怎样的角色_03




YARN容错性


ResourceManager


        存在单点故障;


        正在基于 ZooKeeper实现HA。


NodeManager


        失败后,RM将失败任务告诉对应的AM;


        AM决定如何处理失败的任务。


ApplicationMaster


        失败后,由RM负责重启;


        AM需处理内部任务的容错问题;


        RMAppMaster会保存已经运行完成的Task,重启后无需重新运行。


YARN调度框架


    双层调度框架


        RM将资源分配给AM


        AM将资源进一步分配给各个Task


    基于资源预留的调度策略


        资源不够时,会为Task预留,直到资源充足


        与“all or nothing”策略不同(Apache Mesos)


YARN资源调度器


    多类型资源调度


        采用DRF算法(论文:“Dominant Resource Fairness: Fair Allocation of Multiple Resource Types”)


目前支持CPU和内存两种资源


    提供多种资源调度器


        FIFO


        Fair Scheduler


        Capacity Scheduler


    多租户资源调度器


        支持资源按比例分配


        支持层级队列划分方式


        支持资源抢占



YARN资源隔离方案


    支持内存和CPU两种资源隔离


        内存是一种“决定生死”的资源


        CPU是一种“影响快慢”的资源


    内存隔离


        基于线程监控的方案


        基于Cgroups的方案


    CPU隔离


        默认不对CPU资源进行隔离


        基于Cgroups的方案


YARN支持的调度语义


    支持的语义


        请求某个特定节点/机架上的特定资源量


        将某些节点加入(或移除)黑名单,不再为自己分配这些节点上的资源


        请求归还某些资源


    不支持的语义


        请求任意节点/机架上的特定资源量


        请求一组或几组符合某种特质的资源


        超细粒度资源


        动态调整Container资源