说到Spark,我一定要先说说Hadoop及Java.
现在我是一个Java开发者,几年前就开始接触和使用Hadoop. 最初的一个项目其实是一个后台并行计算的项目,那时经过选型后,最后决定使用Hadoop,当时是基于几个原因:
1. Apache下的项目质量都是很高的,很多项目都广为Java开发者使用,到今天来看,这个结论也不为过,如(Ant, ActiveMQ, Axis2,CXF,Cassandra, Apache commons, HTTP Server,JMeter,Lucene,log4j,Maven, ...)
2. 有成熟的产品应用(Yahoo 3000台的集群)
3. M/R的概念,简化了编程模型
一路用下来,感觉Hadoop的设计思想还是不错的,但是它对于批处理作业延迟完全是可以接受的,但是对于有一定实时要求的项目,它的性能就很不理想了。最主要的原因有几个:
1.它是以job形式进行提交的
2.它的Job相对来说比较重,包括步骤jar到各个节点, Job进行数据的迭代等,一个最简单的Job都要秒计
由于那时对Hadoop的设计不太了解,所以也想象着有什么办法能够执行轻量级的M/R,比如有些东西一直在内存中运行,不用spill到磁盘等,但最终也无技可施,后面就一直放置了。
转回来说Spark, 我想Hadoop存在的问题也困扰着其它的使用者,所以才会有Spark的出现吧!
最开始接触Spark时,一看到它的开发语言是Scala,心里就有点儿想法:为什么没用Java开发呢,功能强大,运行速度已有了飞速的提高,已经可以和C/C++的速度抗衡(开发效率那肯定比C++快不知道多少呢
, 看到C++的同事大谈良好的设计,但还只能支持Windows平台时,我只能苦笑:无知者无畏啊). 再看看Scala写的代码,那都是些什么啊,语法稀奇古怪的,从来没见过这些奇怪的语法(回忆一下我学过的语言, 汇编, Basic, DBase/Foxbase/FoxPro, C/C++, Delphi, VB, PB, Java, Javascript, Linux shell, ...,哪个也不象啊).
我都有几次要放弃了,最终还是说再看看吧,先找本Scala的书读读。我看的是"快读Scala",慢慢的,我理解了,为什么要用Scala, 就看起来就象是Java的升级版嘛。
快来看Scala的几个特性,让你有兴趣去学这门新语言:
1. 它最终也会编译成Java VM代码,看起来象不象Java的壳程序?-至少做为一个Java开发人员,你会松一口气
2. 它可以使用Java包和类 - 又放心了一点儿,这样不用担心你写的包又得用另外一种语言重写一遍
3. 更简洁的语法和更快的开发效率(这意味着你的手指少受一点儿键盘的折磨,
, 对于我这个希望进行快速开发的人来说,是利好吧。
这相信这让Java开发者心情很舒畅,如果你曾经用过VB,然后再用VB.net的话,你就知道什么样的感觉了:沮丧,被骗, ...
好吧,如果是真正的程序猿的话,那现在开始学Scala吧!