說明:本文是我從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)。