本文主要目的是介绍 Hadoop 的基本架构以及衍生出来的各类工具,以期对 Hadoop 有个总体的认识。html
Hadoop 生态系统是指以 分布式的文件系统 HDFS、分布式的计算框架 MapReduce 以及资源管理器 YARN为基础构成的分布式数据处理系统,其结构图以下图所示:web
下面将对图中各项组件作一个介绍算法
HDFS 是 Google 于 2003 发表的 分布式文件系统 GFS 论文的开源实现版本,主要目的是使用普通商业电脑解决大量数据的存储以及读取速度问题,在 GFS 出现以前通常主要在单台计算机用 RAID 来提升数据存储量和读取速度。可是采用 RAID 一方面成本比较高(需求过高时可能只有超级计算机才能知足),另外一方面数据量过大时可能超级计算机也没法知足需求。因此这个时候就须要采起分布式的方式去知足扩大存储(多台机器多个磁盘)和增长读取速度的需求(多台机器能够同时读)。数据库
MapReduce 是一个分布式的计算框架,在 MapReduce 出现以前就已经有了分布式计算这个概念。可是大多数分布式计算只能专门用于处理一类运算,而 Google 在大量实践中总结出了一个通用的编程模型: map
和 reduce
。其中 map
是指分开计算的过程,而 reduce
是指合并结果的过程。而在这一编程模型添加的一系列机制和操做构成了 MapReduce。MapReduce 大大下降了分布式计算的门槛,对于开发人员而言只须要编写一系列 map
和 reduce
函数便可完成所需的分布式计算过程。编程
YARN 是一个资源管理框架,主要做用是负责集群的资源调度和做业任务管理。YARN 的出现源于 Hadoop 不能知足统一使用集群资源的需求,由于 Hadoop1 中集群的资源调度和任务管理与 MapReduce 的执行过程是耦合在一块儿的,然后续出现的 Spark、Storm 等分布式计算系统其架构和执行过程与 MapReduce 不一样,没法直接向 Hadoop 申请集群资源。因此为了实现集群资源的统一管理,在 Hadoop2 中对 MapReduce 进行了一个解耦,抽离出了 YARN 这个框架。架构
Zookeeper 主要做用是提供一个分布式、高可用的协调服务,解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。框架
虽然 MapReduce 极大的简化了分布式计算编程的门槛,可是 Yahoo 的工程师依然以为 MapReduce 编程太过麻烦,因此他们便开发了 Pig 这个脚本语言用于描述对大数据集的操做。这样就能够经过编译 Pig 脚本生成对应的 MapReduce 程序。机器学习
为了方便使用 SQL 的工程师使用 MapReduce,Facebook 的工程师开发了 Hive,经过 Hive 熟悉数据库的工程师能够无门槛的使用 MapReduce。分布式
Mahout 的主要目标是建立一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地建立智能应用程序。Mahout 如今已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等普遍使用的数据挖掘方法。函数
Tez 是 Apache 最新开源的支持 DAG 做业的计算框架,它直接源于 MapReduce 框架,核心思想是将 Map 和 Reduce 两个操做进一步拆分,即 Map 被拆分红 Input、Processor、Sort、Merge和Output, Reduce 被拆分红 Input、Shuffle、Sort、Merge、Processor 和 Output 等。
HBase 是一个创建在 HDFS 之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
Cloudera 开源的日志收集系统,具备分布式、高可靠、高容错、易于定制和扩展的特色。
Sqoop 是 SQL-to-Hadoop 的缩写,主要用于传统数据库和 Hadoop 以前传输数据。数据的导入和导出本质上是Mapreduce 程序,充分利用了 MR 的并行化和容错性。
Ambari 的做用来讲,就是建立、管理、监视 Hadoop 的集群,是为了让 Hadoop 以及相关的大数据软件更容易使用的一个 web 工具。
总的来讲 HDFS 、MapReduce 以及 YARN 是 Hadoop 的核心组件,而咱们学习 Hadoop 最好从核心组件开始学习其原理机制,再逐渐往上层进行了解。