Hadoop目前是Apache旗下的顶级项目之一, 是Google在2004年提出的“MapReduce”分布式计算框架的一个Java实现。

¤ “MapReduce”是一种简化的分布式编程模型, 让程序自动分布到一个由普通机器组成的超大集群上并发执行。 MapReduce的run-time系统会解决输入数据的分布细节, 跨越机器集群的程序执行调度, 处理机器的失效, 并且管理机器之间的通讯请求。 这样的模型允许程序员可以不需要有什么并发处理或者分布式系统的经验, 就可以处理超大的分布式系统
的资源。

Google提出的“MapReduce”分布式计算框架,主要分为以下几个部分

Hadoop与Google MapReduce的对应关系

Hadoop 原理

Hadoop core
Hadoop的核心子项目, 提供了一个分布式文件系统(HDFS)和支持MapReduce的分布式计算。
HBase
建立在Hadoop内核之上, 提供可靠的, 可扩展的分布式数据库。
ZooKeeper
一个高效的, 可扩展的协调系统。 分布式应用可以使用ZooKeeper来存储和协调关键共享状态。
PIG
建立于Hadoop内核之上, 是一种支持并行计算运行框架的高级数据流语言。

Hadoop最主要的就是Core, 它又分为HDFS和MapReduce两个部分, 前者提供分布式数据存储,后者提供任务的分发和归拢。 其他组件都是围绕着这两个核心进行工作。

HDFS的设计初衷:

一次写入多次读取	
不支持文件并发写入	
不支持文件修改	

HDFS的适用范围:

存储并管理PB级数据	
处理非结构化数据	
注重数据处理的吞吐量, 对延时不敏感	
应用模式为一次写入多次读取存取模式	

HDFS上传文件流程:

当客户端上传数据时, 先向NamaNode请求创建文件, 然后NameNode会返回存储的
DataNode节点和位置信息。随后客户端先通过管道将文件传到本地硬盘,每凑满指定大小(默认是64M) , 再一起上传到一个DataNode, DataNode收到文件后会返回确认信息, 并以4K为单位传到下一DataNode。该文件上传方式被称为“流水式。

MapReduce原理

MapReduce来源于函数式编程语言。 它由两个动词Map和Reduce组成, “Map(展开) ” 就是将一个任务分解成为多个任务, “Reduce”就是将分解后多任务处理的结果汇总起来, 得出最后的分析结果。不论是现实社会, 还是在程序设计中, 一项工作往往可以被拆分成为多个任务, 任务之间的关系可以分为两种: 一种是不相关的任务,可以并行执行; 另一种是任务之间有相互的依赖, 先后顺序不能够颠倒, 这类任务是无法并行处理的。

  MapReduce理念:处理海量数据(>1TB)上百/上千CPU实现并行处理简单地实现以上目的移动计算比移动数据更划算。

MapReduce特性:

自动实现分布式并行计算
容错
提供状态监控工具
模型抽象简洁, 程序员易用	

Reduce处理数据时, 为了提高速度, 并不是把结果直接写入硬盘, 而是先在内存中进行缓存和排序, 才会一起写入硬盘。缓冲区的默认大小是100M, 当数据量达到设定的阀值(默认0.8) 后, 会开始向硬盘导出数据,导出过程中数据将继续写入缓存区。 如果导出
数据比计算数据慢, 则当缓存用满时, Map进程将被阻塞。

Yarn的出现

随着Hadoop使用的规模和负荷逐渐增长, 旧有的MapReduce架构弊端逐渐显现: JobTracker单点故障、 JobTracker资源占用、 任务分配逻辑过于简单、 源码class功能复杂、 升级维护麻烦等, Hadoop推出了新的分布式计算框架MapReduceV2, 又名Yarn。

Yarn的理念:

将资源管理(ResourceManager) 和任务调度监控(NodeManager) 分开。 每个任务都有各自的ApplicationMaster负责资源调度和协调。ResourceManager负责基于应用对资源池进行总体调度, 会监控ApplicationMaster的存活状态并重启失败进程, 但不对任务进程进行监控和跟踪, 也不负责重启失败的任务进程。

NodeManager是每一台机器框架的代理, 是执行应用程序的容器, 监控应用程序的资源使用情况并且向调度器汇报。ApplicationMaster负责向调度器索要适当的资源容器, 运行任务, 跟踪应用程序的状态和监控它们的进程, 处理任务的失败原因。

Hadoop 配置

** Hadoop的配置文件在Hadoop安装目录的etc/hadoop下,
核心是core-site、 hdfs-site、 mapredsite、 yarn-site四个xml文件。

core-site.xml包含Hadoop的全局配置。
hdfs-site.xml包含HDFS部分的具体配置。
mapred-site.xml包含MapReduce部分的具体配置。
yarn-site.xml包含Yarn部分的具体配置。

Hadoop 监控

Hadoop启动后会在各节点启动WEB-UI, 管理员可以通过浏览器访问指定端口来查看集群或各节点的基本信息。
NameNode的默认监听端口是50070, DataNode的默认监听端口是50075,Yarn资源管理器的默认监听端口是8088。