我觉得,要想正确理解一门技术,一定要理解它产生的背景,解决的问题。
背景一:世界需要更多的计算能力
信息技术时代的基石是建立在“计算”之上的。以搜索引擎为例,早期的搜索引擎是人工分类索引的,类似黄页,但是随着网站数量的增多,人工索引的工作量变得巨大,而且更新时效低得难以忍受了。后来的一波搜索引擎都采用了由计算机算法自动索引,查找相关文档,并排序展示的方式。这种方式就导致了对计算能力的巨大需求,类似的趋势出现在多种技术领域,即世界需要更多的计算能力。
背景二:单挑不如群殴,好汉敌不过人多
Intel其实已经很努力了,从19xx年人家就按摩尔定律狂奔,CPU的计算能力每一年半翻一倍,但是相比于业界的计算需求,不够快!但没关系,一个CPU不够快,那我搞10000个,甚至100万个,反正CPU是钱能买到的东西,钱能解决的问题,就不是问题。大概从90年代之后,超级计算机就是拿CPU搭积木玩儿了。
背景三:钱不是问题,问题是没钱
但互联网公司并不太用超算的体系结构(基于MPI的传统HPC架构),主要原因有三:一是系统投入大,超算架构面向的应用多是计算密集,文件IO少的情况,但互联网公司文件IO多,这样会导致在存储系统和网络上要投入高成本才能有好性能;二是超算一般都是灰常牛逼的服务器加盘阵,硬件稳定性本来就好,所以容错机制上不太重视,基本上是用checkpoint技术来搞错误恢复。牛逼服务器和盘阵,都是白花花的银子呀。三是编程模型难用。我写过MPI的程序,基本上脑子里要设想成千上万个进程的运行状态以及它们之间的通信过程,还经常有全局的同步,想写好也不容易。所以这个坑Google是不会跳,too smart to jump in.
正题一:一个好汉三个帮,一个Hadoop三个桩
Hadoop就是poor man's 天河二号。不要把Hadoop看成一个整体,拆开里边看看就清楚地知道它干了什么了。Hadoop包括以下三个核心组件:
- HDFS,这东西替换了盘阵,使得你有地方存数据了。相当于你的电脑有了C盘,D盘等。
- YARN,这东西是一个集群管理和调度软件。相当于你的电脑装上了Windows,现在可以跑各种应用程序了。YARN负责让你的程序跑起来,万一挂了还能自动帮你重启进程。
- MapReduce,定义了集群上数据处理的基本操作。相当于你的电脑上装了Visual Studio,现在可以开发自己的软件了。
明白了么,你自己买一坨烂电脑,把Hadoop往上一装,相当于去电脑城给你的新电脑装了个正版Windows + Visual Studio,回来就可以开心地撸代码了,代码自动就能安全高效地跑在那一坨烂电脑之上,跑得还挺快,是不是很棒?
正题二:光能用是不够的,好用才是我所需
客户是不会满足的,Hadoop很牛逼了,但是程序员的恶梦是不会离开的:“什么?需求又改了?!!” 如果说MPI是分布式计算的汇编语言,那么Hadoop的MapReduce相当于C,把所有计算都拆成Map和Reduce两个过程真是:too young, too simple, sometimes naive。Spark相当于分布式计算里的Java,万物都是RDD,在RDD之上你可以方便地进行更高层的操作。所以Spark和Hadoop不是一个层次的东西,大家一看去年的新闻说Spark排序速度是Hadoop的100倍,所以Hadoop要死,Spark要火,我只能说“呵呵”。但我个人觉得Spark还是蛮有前途的,易用性是大家所爱呀……Spark和Hadoop虽有重合,但Spark是不可能也没打算替换整个Hadoop的。