来自Google的三篇论文分别介绍了MapReduce,BigTable,GFS。由此衍生出了对应的开源的系统[Java实现]:Hadoop对应MapReduce,Hadoop Distributed File System [HDFS]对应GFS,Hbase对应BigTable。其实这种对应关系还有Google的Chubby和ZooKeeper。他们之间的性能区别我们不得而知,但是开源系统创造了更多的可能性,也催生出后面的Spark,Storm,Hive,ZooKeeper。

Hadoop

目前Hadoop的版本已经到3.X.X。但是目前主流使用的还是2.X.X。Hadoop主要分为三个主要模块,HDFS,Yarn,MapReduce。HDFS就是一个分布式存储[简单理解在线大硬盘]。Yarn[Yet Another Resource Negotiator]主要负责资源管理和任务调度。MapReduce是计算模块只进行Map和Reduce的计算。这三个模块之间是松耦合的关系,比如Yarn把资源和任务进行抽象,并可以支持不同的计算框架。

Hive

Hive是依赖Hadoop的,从两个项目的logo就能看出他们的关系匪浅。本质上说Hive的作用是允许用户通过类似SQL语言的方式来进行MapReduce的运算。所以启动Hive之前要现启动HDFS和Yarn,通过对应的HiveSQL可以自动进行MapReduce任务或者HDFS存储。相当于对Hadoop再进行了一次类SQL语言支持的封装。这样做的好处是以前需要很多行代码的任务现在只要一行HiveSQL语句就可以完成,在生产环境下非常有用。

Spark

Spark是一个分布式内存计算框架,它和Hadoop最大的区别之一在于,Hadoop的计算结果存在硬盘,Spark的计算结果存在内存,所以Spark的速度会非常快。RDD是另一个重要的概念,其实可以简单的理解成函数的叠加或者集合。

ZooKeeper

ZooKeeper是一个分布式数据服务框架。外国人喜欢给用一个动物作为吉祥物,在IT界也不例外。比如,负责大数据工作的Hadoop是一个黄色的大象;负责数据仓库的Hive是一个虚拟蜂巢;负责数据分析的Apache Pig是一头猪。所以负责分布式协调工作的角色就叫ZooKeeper。什么是分布式数据服务,其实提供强一致性的分布式数据树,有着非常多的使用场景,比如在大规模服务器集群中,统一配置文件。或者提供高可用性服务,比如主备服务器动态切换使整个服务器机群随时可用。所以ZooKeeper可以说是分布式系统的基础层次服务,也是这样才可以对于各个计算存储系统进行管理。