说明:本文是我从spark官方文档上翻译总结+个人理解的,如有不恰当和理解偏差的地方,请大家指出,一起交流学习!
翻译来源 http://spark.apache.org/docs/latest/programming-guide.html
1.每个spark应用均包含一个drive program作为当前应用的入口,每个spark应用的核心抽象就是RDD(resilient distributed dataset,用于并行操作集群上的节点的被划分的元素集合)。
2.RDD被创建的两种方式:
(1)由drive program内部存在的集合创建
(2)由外部文件系统创建(如:hdfs上的file)
3.Spark中的共享变量
说明:Spark中的共享变量常用于并行操作中,在应用中,一个变量需要在一个任务中或任务与drive program之间被共享。
Spark中提供了两种类型的共享变量:
(1)broadcast variables(在集群的所有节点上缓存到内存中的值)
(2)accumulators(计数操作,如:counters和sums)
4.spark应用程序中的核心对象SparkContext
SparkContext:spark应用程序的上下文环境,用于告诉应用如何去访问集群,如何对集群中的节点进行操作。
创建方法:new SparkContext(new SparkConf().setAppName(appName).setMaster(master))
说明:appName参数是用于显示在webUI上的当前spark应用的名字,master是部署运行当前应用程序的节点url。在创建一个新的SparkContext对象之前一定要将当前active状态的SparkContext对象stop()
5.Spark-shell
Spark-shell是spark包内置的一个交互式shell,当在spark安装目录下执行./spark-shell命令后,SparkContext对象自动创建(创建后对象的引用为sc),即可直接使用。
6.RDD操作
RDD支持两种类型的操作:
(1)transformations:转换操作,用于创建新的数据集。如:map、filter操作
(2)actions:响应操作,计算数据集后向drive program返回值。如:reduce、collect操作
说明:
(1)spark中所有的转换transformations操作均为lazy的(当采取transformations操作时不会立即计算,只是仅仅记住自己需要做的事情,除非当一个action操作发生时。这样的设计对于应用的运行效率会有相当大的提升)
(2)Spark默认的是:当在同一个RDD执行action操作时,每次被transformations的RDD可能会被重计算,因此,为了提升效率,spark中提供了缓存机制(利用cache方法,如:rdd.cache)。