什么是Spark
Spark 是一种计算框架,是与mapreduce 不一样的计算框架。他与Hadoop mapreduce相比具有以下优势:
1) Spark 通过将中间结果缓存在内存,而不是磁盘,因此很适合于多阶段的作业,如需多次迭代的机器学习。而 mapreduce 则将中间结果每次都存到磁盘,速度下降很多。
2) Spark 在通信方面采用
Akaa 框架的(角色) Actor 模型,并通过线程池复用线程来避免进程或线程启动和切换开销。而Hadoop mapreduce 最初的设计是为了离线批量计算大文件,运行都是好几个小时,所以作业调度中秒级的开销根本没考虑和优化。
3) Spark 任务在 Shuffle 中不是所有情景都需要排序。而MapReduce在数据 Shuffle之前花费了大量的时间来排序。
总之, Spark在速度上要比 mapreduce快很多。在流式计算方面, Spark流计算与 Storm相比,速度不及 Storm。Storm可以达到毫秒级响应,而 Spark只能达到秒级。但是Spark流计算更适合于计算较复杂的应用,特别是需要流数据与历史数据结合的计算。而Storm只能完成简单的计算,如广告点击率等。
此外, Spark的吞吐量要远高于 Storm
大数据
大数据很难有一个明确定义。但是他这样几个特点,即大容量、繁杂、高价值、快速,也就是 4 个 V。它与海量数据相比,我认为很难有一个界定,更多的是一种商业性的口号、名称, 它与海量数据有很多交叉的地方,只是为了适应新的网络化世界,而提出这种大数据概念。
RDD基本概念
(1)RDD的两种创建方式
1)外部文件创建,如HDFS、本地文件。
2)RDD 转换得到新的 RDD。
(2)RDD的两种操作算子
对于 RDD可以有两种计算操作算子:Transformation (变换)与 Action(行动)。只有行动( Action )算子才会触发作业(Job)提交。
(3)RDD的重要内部属性
1)分区列表。
2)计算每个分片的函数。
3)对父 RDD的依赖列表。
4)对 Key-Value对数据类型 RDD的分区器,控制分区策略和分区数。
5)每个数据分区的地址列表(如HDFS上的数据块的地址) 。
(4)窄依赖和宽依赖
窄依赖指,子 RDD分区只由一个或多个父RDD中的一个分区转换而来。map 操作就是一个父 RDD的一个分区, union 操作就是两个父RDD 的一个分区。
宽依赖指,子 RDD 的分区由父 RDD 的所有分区转换而来,即经过过shuffle 操作。,如如 reduceByKey,groupByKey 等