Spark产生背景
MapReduce的局限性
- 繁杂 ①开发层面:mapreduce只有两个算子(map和reduce),如果想实现什么功能,只能通过这两个算子来实现。如果一个很简单的功能也要有一个map,也要按照它的规范来走一遍。(小知识点:mapjoin只有map,没有reduce。mapjoin的底层实现原理是什么?)②测试层面:如果项目经理的需求不断发生改变,就需要频繁的去修改测试代码。
- 效率低 ①进程级别:在跑job的时候,MapTask ReduceTask都有很多进程;②IO(磁盘和网络):chain。第一个作业的输出是第二个作业的输入,第二个作业的输出是第三个作业的输入…。前面一个作业的输出要都输出到某个地方后,后一个作业才会输入它。而且一般是三个副本。这些场景都会有频繁的磁盘IO和网络IO。③排序:mapreduce在执行的时候,每个阶段都排序的,但是有很多场景它的排序是没有必要的。④mapreduce可以基于内存进行计算,但是是有限的。⑤等等
- 不适合迭代处理
- 只能离线计算,不适合流计算实时处理
Spark概述及特点
官网上有介绍:http://spark.apache.org/
Speed
Ease of Use
Generality
Runs Everywhere
如何学习Spark
官网最重要,什么都有
github上的example(spark源码工业化的,非常好)
apache spark user list
mailing lists
meetup groups and conferences/峰会等
源码