大数据生态
我们最后介绍整个大数据处理平台的生态。自从 Hadoop 诞生以来,大数据的生态已经发展了 20 年了,已经形成了一个成熟的生态。
首先,Hadoop 是由很多开源的系统组成的。这些开源的系统,大家可以免费使用,还可以修改它的源代码,然后提交上去,作出自己的贡献。
其次,Hadoop 的基本思想来自谷歌公司 2003 年发表的两篇论文。这两篇论文介绍了谷歌公司内部是怎么实现它的大数据系统的。一篇是 Map Reduce,讲它用的分布式计算框架,还有一篇是 GFS,就是 Google File System,讲它用的分布式存储。这两篇论文发表了以后,全世界就知道谷歌是怎么做的了,但没有系统可以用。雅虎公司的工程师 Doug Cutting 就说我来写一个。所以,和这两篇论文对应的,Hadoop 包括两部分:一部分是 HDFS 分布式存储,一部分是 Map Reduce 分布式处理。基于 Hadoop,我们就可以建立大数据集群,可以存储和处理很大的数据。
雅虎的工程师写完软件之后,想起个名字。正好他的孩子有一个玩具大象,名字就叫 Hadoop,所以他就用这个名字给这个软件命名了。现在 Hadoop 的图标,还是这只大象。这就是 Hadoop 名字的来历。
他然后把 Hadoop 的源代码放到网上,让全世界的人用。这之后就开始滚雪球了:大家都用,然后在用的过程中,发现功能不太够,就对它进行改进,往里面加功能。因此 Hadoop 就迅速发展起来了。这就是它的历史。
最后,经过了 20 年的发展,Hadoop 的生态现在包括很多东西。
首先,最底层的是存储:Hadoop 的 Distributed File System,即 HDFS。大家看,HDFS 文件系统是在最下面的,所以它是基础,是支持上面所有的大数据系统的一个存储的基础。比如 Spark,它就会到 HDFS 里去取数据。
然后,是 Hadoop 里的 MapReduce。基于 MapReduce,只要你写出 Map 和 Reduce 函数,就可以干无数多的事。比如很多机器学习的算法都可以用 MapReduce 实现。
然后,为了使用的方便,人们基于 Hadoop 的 HDFS 和 Map Reduce,开发了各种各样的工具。其中,因为大家用 SQL 语言用得很熟,就开发了 Hive。使用 Hive 时,我们可以用 SQL 语言写我们想要的数据处理脚本,然后 Hive 自动将其转成MapReduce 操作,进行分布式执行。
此后,人们发现 Hadoop 计算的时候,读硬盘还是太慢了,就提出换做读内存,并由此开发了 Spak。Spark 的数据处理速度是 Hadoop 的 Map Reduce 的一千倍。这就是说,一个任务在 Hadoop 上用 Map Reduce 算,要一千个小时(即 40 天)的,如果用 Spark,只需要一个小时就够了。这速度的提升确实是太快了。
然后,在 Hadoop 里为 Map Reduce 任务分配CPU、内存等资源的资源管理器是 Yarn。此后,为了支持更多计算框架,比如 Spark,人们又开发了 Mesos。 YARN 是负责集群资源管理的。它会规划 Map Reduce 的任务,尽量在数据所在的机器上进行 Map,或者尽量“近”,以减少网络开销。
除了这些,人们还开发了其它各种系统,这包括:
-
HBase:它是一种分布式的 NoSQL 数据库。所谓 NoSQL 数据库,就是说它不是一种利用 SQL 进行操作的关系型数据库。HBase 是一种“列数据库”,这就是说它的数据不是像 SQL 数据库那样,按“行”进行存储的。相反,它是按“列”进行存储的,这样特别方便大数据处理时的按“键”进行数据的检索。
-
Storm 和 Flink:它们是能够进行“流式处理”的数据处理系统。所谓流式处理,就是数据源源不断地进入系统,系统能够根据这些新来的数据,及时进行处理。这对于那些需要实时处理的大数据科学应用,比如推荐,非常有用。
-
Kafka:它是一种基于“出版-订阅”(Publish-Subscription)的消息分发系统,负责把系统中产生的各种海量信息,传送到需要它们的各种系统中去。
-
Flume:它能够缓冲系统中不断产生的海量日志数据,把它们存入 HDFS,减少这些数据对 HDFS 对冲击。
-
ZooKeeper:它能够实现集群管理中最需要的“主节点”(Master)选举、节点状态监视等功能,是维护系统稳定、正常运行必不可少的。它专门存一些关键的数据。这些关键配置数据是大家都要用的。比如说 Master 是谁?系统里到底有几个节点?哪台节点还工作,哪台节点坏了?这些数据需要系统中的各个节点通过分布式协议达成共识。没有这个共识的话,系统就会出现严重的问题。所以 ZooKeeper 就用一个特别神奇的 Paxos 协议,来达到分布式的共识。
所以这是一个完整的生态。这就是为什么前面的那些岗位要求大家掌握这么多东西。大家要能够对一整个集群进行管理,并在它的上面进行二次开发。这个集群里啥都有。我们后面会简单介绍这些系统的基本功能和使用方法。
Index |