spark是一个快速且通用的集群计算平台。
spark特点
- spark是通用的,设计容纳了其它分布式系统拥有的功能,批处理,迭代式计算,交互查询和流处理等。
- spark是内存性的,扩充了mapReduce的计算模型
spark组件
- sparkCore
- 包含spark的基本功能,包含任务调度,内存管理,容错机制等,内部定义了RDDs(弹性分布式数据集)
- 提供了很多API来创建和操作RDDs。为其它组件提供底层的服务。
- spark sql
- 是spark处理结构化数据的库,就像HIVE SQL一样,可以用来做报表统计
- spark streaming
- 实时数据流处理组件,类似storm。用来从kafka接受数据做实时统计
- Mlib
- 包含通用机器学习功能的包,包含分类,聚类,回归等,还包括模型评估和数据导入支持集群的拓展
- Graphx
- 处理图的库,并进行图的并行计算继承了RDD API
- cluster managers
- 集群管理
spark的安裝
spark使用Scala编写的运行在jvm上。
RDDs介绍
Resilient distributed datasets(弹性分布式数据集),并行的分布在整个集群中,RDDs是spark分发数据和计算的基础抽象类。
一个RDD是一个不可改变的分布式集合对象。spark中所有的对象都是通过RDDs的创建,转换,操作完成的。
一个RDD内部由许多partitions分片组成。每个分片包含一部分数据,partitions可在集群不同节点上计算。分片是spark并行处理的单元,spark顺序的,并行的处理分片
RDD的转换操作
map()接受函数,把函数应用到RDD的每一个元素。返回新RDD
filter()
flatMap()
RDD的Action操作
在Rdd上计算出来一个结果。把结果返回给driver program或保存在文件系统,count,save
reduce() 接受一个函数,作用在Rdd两个类型形同的元素上,返回新元素。可以实现累加,计数和其它聚集操作。
collect() 遍历整个rdd,向driver program返回rdd内容,需要单机内存能够容纳下
take(n) 返回rdd的n个元素(同时尝试访问最少的partitions)返回结果是无序的
top() 排序(根据rdd中数据的比较器)
foreach 计算rdd中的每个元素,但不返回到本地
combineByKey(): 最常用的基于key的聚合函数,返回的类型可以与输入的类型不一致
(createCombiner,mergeValue,mergeCombiners,partitioner)
遍历partition中的元素,元素的key要么之前见过要么不是。如果是新元素,使用我们提供的createCombiner函数,如果partition中存在key,就会使用mergeValue函数。合计每个partition的结果的时候使用mergeCombiners函数