最开始关注Spark,是在csdn首页上看到一篇文件《Spark核心开发者:性能超Hadoop百倍,算法实现仅有其1/10或1/100》的,看着标题确实感觉比较年逼的。后来稍微研究了一下,其实发现,这个描述有点问题。Spark是一个基于内存的纯计算框架,而hadoop是包括计算框架的mapreduce和分布式存储hdfs,所以应该描述为Spark性能超Hadoop的mapreduce计算性能百倍。当然,这有点扣字眼了。

    Spark只是一个计算框架,它本身并不包括对数据的存储,就像跟实时分布式系统Storm是一样的。它是一个可以基于hadoop的hdfs,也可以基于hbase之上的处理框架,来看看它的框架就明白了:

Spark适用场景

目前大数据处理场景有以下几个类型:

  1. 复杂的批量处理(batch data processing),偏重点在于处理海量数据的能力,至于处理速度,不太关注,通常的时间可能是在数十分钟到数小时等
  2. 基于历史数据的交互式查询(interactive query),通常的时间在数十秒到数十分钟之间
  3. 基于实时数据流的数据处理(Streaming data processing),通常在数百毫秒到数秒之间

目前对以上三种场景需求,都有比较成熟的处理框架,第一种可以用hadoop的mapreduce来进行批量海量数据处理,而impala可以进行交互式查询,对于实时流式数据处理,有比较成熟的Storm分布式处理框架。但三者都是比较独立,各自维护一套成本比较高,而Spark的出现,就想统一解决以上三种需求的

简单总结一下,Spark场景有以下几个:

  1. Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小
  2. 由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。
  3. 数据量不是特别大,但又有统计分析的需求,又有实时需求。
  4. 总的来说Spark的适用面比较广泛且比较通用。

Spark生态系统

Spark Streaming

Spark流式处理框架,跟twitter的Storm系统类似。

Shark(Hive on Spark)


Spark核心概念

Rdd(Resilient Distributed Dataset,弹性分布数据集)

rdd是Spark对操作对象分布式内存数据的抽象,是计算的基本单元,这个先简单说一下,以后找个时间再好好说说。

Lineage(血统依赖算法)

加速内存数据加载的一种算法。