Hadoop简介

Hadoop简介

1.概念

Hadoop是一套大数据解决方案. 它提供了一套分布式系统基础架构. 核心内容包含HDFS和MapReduce, 在Hadoop2.0以后引入YARN
简单来讲, HDFS是供数据存储的, MapReduce是方便数据计算的, YARN是负责资源调度的

  • HDFS对应namenode和DataNode. NameNode负责保存元数据的基本信息, Datanode直接存放数据本身
  • MapReduce对应JobTracker和TaskTracker. JobTracker负责分发任务, TaskTracker负责执行具体任务
  • 对应到Master/Slave架构, NameNode和JobTracker对应Master, DataNode和TaskTracker对应Slave

2.HDFS

Hadoop简介
HDFS由四部分组成, HDFS Client, NameNode, DataNode, SecondaryNameNode

  • HDFS Client:
    1.提供一些命令来管理, 访问HDFS, 比如启动或关闭HDFS
    2.与DataNode交互, 读取或写入数据. 读取时, 要与NameNode交互, 获取文件存储位置信息; 写入HDFS的时候, Client把文件切分成一个一个的Block, 然后进行存储

  • NameNode:
    整个 Hadoop 集群中只有一个 NameNode. 它是整个系统的"总管", 负责管理 HDFS 的目录树和相关的文件元数据信息. 这些信息是以"fsimage"( HDFS 元数据镜像文件 )和"editlog"(HDFS 文件改动日志)两个文件形式存放在本地磁盘, 当 HDFS 重启时重新构造出来的. 此外, NameNode 还负责监控各个 DataNode 的健康状态, 一旦发现某个 DataNode 宕掉, 则将该 DataNode 移出 HDFS 并重新备份其上面的数据
    1.管理HDFS的名称空间
    2.管理Block的映射信息
    3.配置副本策略
    4.处理客户端读写请求

  • DataNode:
    1.存储实际的数据块
    2.执行数据块的读/写操作

  • SecondaryNameNode:
    并非是NameNode的热备, 当NameNode挂掉时, 不能马上替换NameNode并提供服务
    1.辅助NameNode, 分担其工作量
    2.定期合并fsimage和edits日志, 并推送给NameNode
    3.在紧急情况下, 可辅助恢复NameNode

3.MapReduce

这里的MapReduce是
Hadoop简介

  • Client:
    用户编写的MapReduce程序通过Client提交到JobTracker端; 同时, 用户可通过Client提供的一些借口查看作业运行状态. 在Hadoop内部用作业(Job)表示MapReduce程序. 每个MapReduce任务可对应若干个作业, 每个作业会被分解成若干个Map/Reduce任务(Task)

  • JobTracker:
    JobTracker主要负责资源调度和作业监控. JobTracker监控所有TaskTracker与作业的健康情况, 一旦发现失败情况后, 其会将相应的任务转移到其他节点; 同时JobTracker会跟踪任务的执行进度, 资源使用量等信息, 并将这些信息告诉任务调度器

  • TaskTracker:
    TaskTracker会周期性地通过Heartbeat将本节点上资源使用情况和任务执行进度汇报给JobTracker, 同时接受JobTracker发送过来的命令并执行相应的操作(启动新任务, 杀死任务等). TaskTracker使用“slot”等量划分本节点上的资源量. "slot"代表计算资源(CPU, 内存等). 一个Task获取到一个slot才有机会运行. 而Hadoop调度器的作用就是将各个TaskTracker上的空闲的slot分配给Task使用. slot分为 Map slot和Reduce slot两种, 分别供Map Task和Reduce Task使用

  • Task:
    Hadoop简介
    Task分为Map Task和Reduce Task两种, 均有TaskTracker启动. HDFS以固定大小的Block为基本单元存储数据, 而对于MapReduce而言, 其处理单位是split. split是一个逻辑概念, 其只包括一些元数据信息, 比如数据起始位置, 数据长度, 数据所在节点等. 它的划分方法完全由用户自己决定. 不过, split的多少决定了Map Task的数目, 因为每个split会交给 一个Map Task去处理.

下图是Map Task的执行流程,Map Task先将一个个split迭代解析成k-v对, 依次调用用户定义的map()函数进行处理, 最终将临时结果存储在本地磁盘上. 其中临时数据被分为若干个partition, 每个partition将被一个Reduce Task处理.
Hadoop简介
Reduce Task:
1.从远程节点上读取Map Task的中间结果(Shuffle)
2.按照key对key-value进行排序(Sort)
3.依次读取<key, valuelist>, 按照用户定义的reduce()函数处理, 并将结果存放到HDFS上(Reduce)

4.YARN

Hadoop简介

  • ResourceManager:
    1.Resource Manager负责整个集群的资源管理和分配, 是一个全局的资源管理系统
    2.NodeManager以心跳的方式向ResourceManager汇报资源使用情况(主要是CPU和内存的使用情况).
    3.YARN Scheduler根据Application的请求为其分配资源, 不负责Application Job的监控, 追踪, 运行状态反馈, 启动等工作

  • NodeManager:
    1.NodeManager是每个节点上的资源和任务管理器, 它是管理这台机器的代理, 负责该节点程序的运行, 以及该节点资源的管理和监控. YARN集群每个节点都运行一个NodeManager.
    2.NodeManager定时向ResourceManager汇报本节点资源使用情况和Container的运行状态. 当ResourceManager宕机时NodeManager自动连接RM备用节点
    3.NodeManager接受并处理来自ApplicationMaster的Container启动, 停止各种请求

  • ApplicationMaster:
    用户提交的每个应用程序均包含一个ApplicationMaster, 它可以运行在ResourceManager以外的机器上.
    1.负责与ResourceManager协商以获取资源(Container)
    2.将得到的资源进一步分配给内部的任务(资源的二次分配)
    3.与NodeManager通信以启动/停止任务
    4.监控所有任务运行状态, 并在任务运行失败时重新为任务申请资源以重启任务