Hadoop(http://hadoop.apache.org/)是 Apache 开源组织的一个分布式计算开源框架,用 java 语言实现在大量计算机组成的集群中对海量数据进行分布式存储并计算分析。Hadoop 框架中最核心设计就是:HDFS 和 MapReduce,以及 Hadoop 2.x 的 YARN
Hadoop核心
核心组件就是 HDFS 和 MapReduce
HDFS(Hadoop Distributed File System)
HDFS 是 Hadoop 体系中数据存储管理的基础。一个高度容错的分布式文件系统,能检测和应对硬件故障,适合部署在廉价的通用硬件上。传统文件系统的硬盘寻址慢,通过引入存放文件信息的服务器 NameNode 和实际存放数据的服务器 DataNode,对数据系统进行分布式储存读取。通过流式数据访问,提供高吞吐量的数据访问。提供了一次写入多次读取的机制,数据以块(Block)的形式,分布在集群不同物理机器上。
详细参考 HDFS 设计
Mapreduce(分布式计算框架)
MapReduce 是一种分布式计算模型,用于大数据集并行计算。屏蔽了分布式计算框架细节,将计算过程抽象成 Map 和 Reduce 两部分,其中 Map 对数据集上的独立元素进行指定的操作,生成键值对(Key-Value)形式中间结果。Reduce 则对中间结果中相同“键”的所有“值”进行归约,得到最终结果。
MapReduce 的核心思想是把计算任务分配给集群内的各个服务器执行。通过对计算任务的拆分(Map 计算 \ Reduce 计算)再根据任务调度器(JobTracker)对任务进行分布式计算。当向 MapReduce 框架提交一个计算作业时,计算框架会首先把计算作业拆分成若干个 Map 任务,分配到不同的节点上去执行,每一个 Map 任务处理输入数据中的一部分,当 Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为 Reduce 任务的输入数据。Reduce 的任务就是把前面若干个 Map 的输出汇总到一起并输出。
MapReduce 非常适合在大量计算机组成的分布式并行环境里进行数据处理。详细参考 MapReduce 设计
YARN(分布式资源管理器)
YARN 是在第一代 MapReduce 基础上演变而来的,将 Hadoop 1.x 的 JobTracker 功能分别拆到不同的组件里面了,每个组件分别负责不同的功能。主要是为了解决扩展性较差,不支持多计算框架而提出的。 YARN 是一个通用资源调度平台,支持多种计算框架,如 MapReduce、Spark、Storm 等。
Hadoop 2.x 新特性:
引入了NameNode Federation,解决了横向内存扩展
引入了NameNode HA,解决了NameNode单点故障
引入了YARN,负责资源管理和调度
增加了ResourceManager HA解决了ResourceManager单点故障
Hadoop 3.x 新特性:
JDK升级至JDK8
Mapreduce 调整为内存+磁盘处理数据
引入Erasure Encoding技术,防止数据丢失,降低存储开销
支持多NameNode
推荐书籍
《Hadoop权威指南》
《Hadoop实战》