Hadoop技术内幕之Hadoop基本结构

Hadoop基本结构

Hadoop 由两部分组成, 分别是分布式文件系统和分布式计算框架 MapReduce。
分布式文件系统主要用于大规模数据的分布式存储, 而 MapReduce 则构建在分布式文件系
统之上, 对存储在分布式文件系统中的数据进行分布式计算。

HDFS结构

HDFS 是一个具有高度容错性的分布式文件系统, 适合部署在廉价的机器上。 HDFS 能
提供高吞吐量的数据访问, 非常适合大规模数据集上的应用。

总体上采用了 master/slave 架构, 主要由以下几个组件组成 :ClientNameNodeSecondary NameNode(在Hadoop 0.21.0中,SecondaryNameNodeCheckpoint Node代替) 和 DataNode

Hadoop技术内幕之Hadoop基本结构_第1张图片

  1. Client
    Client( 代表用户) 通过与 NameNode 和 DataNode 交互访问 HDFS 中的文件。 Client
    提供了一个类似 POSIX 的文件系统接口供用户调用。
  2. NameNode
    整个 Hadoop 集群中只有一个 NameNode。 负责管理 HDFS的目录树和相关的文件元数据信息。 这些信息是以“fsimage” ( HDFS 元数据镜像文件)和“editlog” ( HDFS 文件改动日志) (在Hadoop 0.21.0中,二者合二为一)两个文件 形式存放在本地磁盘, 当 HDFS 重启时重新构造出来的。 此外,NameNode 还负责监控各个 DataNode 的健康状态, 一旦发现某个DataNode 宕掉, 则将该 DataNode 移出 HDFS 并重新备份其上面的数据。
  3. Secondary NameNode
    Secondary NameNode 最重要的任务并不是为 NameNode 元数据进行热备份, 而是定期合并 fsimage 和 edits 日志, 并传输给 NameNode。
    Secondary NameNode负责合并 fsimage 和 edits, 并将文件存储到磁盘上,
  4. DataNode
    每个 Slave 节点上安装一个 DataNode, 它负责实际的数据存储, 并将数据信息定期汇报给 NameNode。 DataNode 以固定大小的 block 为基本单位组织文件内容, 默认情况下 block 大小为 64MB。 当用户上传一个大的文件到 HDFS 上时, 该文件会被切分成若干个 block, 分别存储到不同的 DataNode ; 同时, 为了保证数据可靠, 会将同一个 block以流水线方式写到若干个( 默认是 3, 该参数可配置) 不同的 DataNode 上。 这种文件切割后存储的过程是对用户透明的。

Hadoop MapReduce结构

也采用Mater/Slave结构。它主要由以下几个组件组成 : Client、 JobTracker、 TaskTracker 和 Task。

Hadoop技术内幕之Hadoop基本结构_第2张图片

  1. Client
    用户编写的 MapReduce 程序通过 Client 提交到 JobTracker 端 ; 同时, 用户可通过 Client 提供的一些接口查看作业运行状态。 在 Hadoop 内部用“作业” ( Job) 表示 MapReduce 程序。 一个MapReduce 程序可对应若干个作业, 而每个作业会被分解成若干个 Map/Reduce 任务( Task)。
  2. JobTracker
    JobTracker 主要负责资源监控和作业调度。 JobTracker 监控所有TaskTracker 与作业的健康状况, 一旦发现失败情况后, 其会将相应的任务转移到其他节点; 同时, JobTracker 会跟踪任务的执行进度、 资源使用量等信息, 并将这些信息告诉任务调度器, 而调度器会在资源出现空闲时, 选择合适的任务使用这些资源。 在 Hadoop 中, 任务调度器是一个可插拔的模块, 用户可以根据自己的需要设计相应的调度器。
  3. TashTracker
    TaskTracker 会周期性地通过 Heartbeat 将本节点上资源的使用情况和任务的运行进度汇报给 JobTracker, 同时接收 JobTracker 发送过来的命令并执行相应的操作( 如启动新任务、 杀死任务等)。 TaskTracker 使用“slot”等量划分本节点上的资源量。“slot”代表计算资源( CPU、内存等)。 一个 Task 获取到一个 slot 后才有机会运行, 而 Hadoop 调度器的作用就是将各个TaskTracker 上的空闲 slot 分配给 Task 使用。 slot 分为 Map slot 和 Reduce slot 两种, 分别供Map Task 和 Reduce Task 使用。 TaskTracker 通过 slot 数目( 可配置参数) 限定 Task 的并发度。
  4. Task
    Task 分为 Map Task 和 Reduce Task 两种, 均由 TaskTracker 启动。HDFS 以固定大小的 block 为基本单位存储数据, 而对于 MapReduce 而言, 其处理单位是 split。split 是一个逻辑概念, 它只包含一些元数据信息, 比如数据起始位置、 数据长度、 数据所在节点等。split 的多少决定了 Map Task 的数目, 因为每个 split 会交由一个 Map Task 处理。

Hadoop技术内幕之Hadoop基本结构_第3张图片

Map Task 先将对应的 split 迭代解析成一个个 key/value 对, 依次调用用户自定义的 map() 函数进行处理, 最终将临时结果存放到本地磁盘上, 其中临时数据被分成若干个 partition, 每个 partition 将被一个 Reduce Task 处理。

Hadoop技术内幕之Hadoop基本结构_第4张图片

该过程分为三个阶段
①从远程节点上读取 MapTask 中间结果( 称为“Shuffle 阶段” ); ②按照 key 对 key/value 对进行排序( 称为“Sort 阶段” ) ;
③依次读取 , 调用用户自定义的 reduce() 函数处理, 并将最终结果存到 HDFS 上( 称为“Reduce 阶段” )。

Hadoop技术内幕之Hadoop基本结构_第5张图片

你可能感兴趣的:(笔记-Hadoop)