Hadoop 介绍

Hadoop 是 Apache 组织的一个分布式计算框架(java 语言),其最核心的设计就是:HDFSMapReduce,HDFS 实现存储,MapReduce 实现原理分析处理。

HDFS 文件系统

HDFS(Hadoop Distributed File System)是一个高度容错的系统,适合部署在廉价的机器上。HDFS 能提供高吞吐量的数据访问,适合那些有着超大数据集的应用程序。

设计特点
  • 大数据文件,适合大文件或者一堆大数据文件

  • 文件分块存储,HDFS 会将一个完整的大文件平均分块存储到不同计算机上

  • 流式数据访问,一次写入多次读写,和传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化只能在文件末尾添加

  • 廉价硬件

  • 备份,为防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其他某几个主机上

Master / Slave 架构

一个 HDFS 集群是有一个 Namenode 和一定数目的 Datanode 组成。Namenode 作为中心服务器负责管理文件系统的 namespace 和客户端对文件的访问,Datanode 在集群中负责管理结点上他们附带的存储。在内部,一个文件其实分成一个或多个 block,这些 block 存储在 Datanode 集合里。Namenode 执行文件系统的 namespace 操作,如打开、关闭、重命名等,同时决定 block 到具体 Datanode 结点的映射。Datanode 在 Namenode 的指挥下进行 block 的创建、删除和复制。

HDFS 的一些关键元素
  • Block:将文件分块,通常为 64M。

  • NameNode:保存整个文件系统的目录信息、文件信息及分块信息,由唯一一台主机专门保存。(2.0 版本后增加备份)

  • DataNode:用于存储 Block 文件。

  • NameNode 全权管理数据块的复制,它周期性地从集群中的每个 DataNode 接受心跳信号和块状态报告(BlockReport)。结合艘到心跳信号以为这该 DataNode 工作正常,块状态报告包含了一个该 DataNode 上所有数据块的列表。

MapReduce 文件系统

MapReduce 是一种编程模型,用于大规模数据的并行运算。MapReduce 分成两个部分:Map(映射)和 Reduce(归纳)。当你向 MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个 Map 任务,然后分配到不同的节点上去执行,每一个 Map 任务处理输入数据中的一部分,当 Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为 Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个 Map 的输出汇总并输出。