1、簡介
RDD(Resilient Distributed Dataset)叫做彈性分布式數(shù)據(jù)集,是Spark中最基本的數(shù)據(jù)抽象,它代表一個不可變、可分區(qū)、里面的元素可并行計算的集合。RDD具有數(shù)據(jù)流模型的特點:自動容錯、位置感知性調(diào)度和可伸縮性。
2、特性
只讀:
RDD在創(chuàng)建之后只允許讀操作,不允許寫操作,每個計算操作都是產(chǎn)生新的RDD
分區(qū):
RDD會把其中的元素進行partition分區(qū),計算是以分區(qū)為單位進行
容錯:
相比其他系統(tǒng)的細顆粒度的內(nèi)存數(shù)據(jù)更新級別的備份或者LOG機制,RDD的血緣關(guān)系記錄的是粗顆粒度的特定數(shù)據(jù)Transformation操作(如filter、map、join等)行為。當這個RDD的部分分區(qū)數(shù)據(jù)丟失時,它可以通過Lineage獲取足夠的信息來重新運算和恢復(fù)丟失的數(shù)據(jù)分區(qū)。因為這種粗顆粒的數(shù)據(jù)模型,限制了Spark的運用場合,所以Spark并不適用于所有高性能要求的場景,但同時相比細顆粒度的數(shù)據(jù)模型,也帶來了性能的提升。
RDD依賴:
RDD一般由讀取文件或者并行化數(shù)組產(chǎn)生,通過每次的transformation操作都會產(chǎn)生新的一個RDD,然后RDD之間的依賴關(guān)系稱為血緣,子RDD通過父RDD和算子就能夠得到。
緩存:
RDD可以通過persist方法進行緩存操作,把RDD放到每個worker上的executor上,這樣該RDD就可以不用傳給每個task,增加計算速度明顯
3、spark代碼運行(推薦)
?1)idea等工具運行spark代碼,通過maven構(gòu)建項目引入對應(yīng)gav
?2)spark-shell交互工具,spark的bin目錄:./bin/spark-shell --master local[4]
可以通過ui進行監(jiān)控,啟動日志可以看到監(jiān)聽端口
?3)spark-submit提交,把本地開發(fā)好的項目打成jar包,然后通過spark-submit命令運行
4、創(chuàng)建RDD
其中sc為SparkContext對象