⑴ Spark最基本的單位 RDD
最近在負責Spark Streaming 結合 Spark sql的相關項目,語言是Java,留下一些筆記,也供大家參考,如有錯誤,請指教!
1.RDD(Resilient Distributed Dataset):彈性分布式數據集。
2.RDD是只讀的,由多個partition組成
3.Partition分區,和Block數據塊是一一對應的
1.Driver:保存block數據,並且管理RDD和Block的關系
2.Executor 會啟動一個BlockManagerSlave,管理Block數據並向BlockManagerMaster注冊該Block
3.當RDD不再需要存儲的時候,BlockManagerMaster將向BlockManagerSlave發送指令刪除相應的Block。
Transformation:轉換運算元,這類轉換並不觸發提交作業,完成作業中間過程處理。
Action:行動運算元,這類運算元會觸發SparkContext提交Job作業。
RDD的依搜答賴關系有兩種:窄依賴(narrow dependency)和寬依賴(wide dependency)。
窄依碼跡賴: 每一個parent RDD的Partition最多被世模慧子RDD的一個Partition使用
寬依賴: 多個子RDD的Partition會依賴同一個parent RDD的Partition
⑵ spark2.0將sql轉換成rdd怎麼轉
直胡敏肆接看代碼
[java] view plain
import org.apache.spark.sql.{DataFrame, SQLContext}
import org.apache.spark.{SparkConf, SparkContext}
/**
* wo xi huan xie dai ma
* Created by wangtuntun on 16-5-7.
*/
object clean {
def main(args: Array[String]) {
//設拿鋒置環境褲轎
val conf=new SparkConf().setAppName("tianchi").setMaster("local")
val sc=new SparkContext(conf)
val sqc=new SQLContext(sc)
⑶ Spark核心-RDD
RDD是Spark中的數據抽象,全稱 彈性分布式數據集(Resilient Distributed Datasets) 。RDD可以理解為將一個大的數據集合以分布式的形式保存在集群伺服器的內存中。RDD是一個容錯的、並行的數據結構,可以讓用戶顯式地將數據存儲到磁碟和內存中,並能控制數據的分區。
RDD是Spark的核心,也是整個Spark的架構基礎。
RDD的特點:
RDD的5個主要屬性:
可以通過兩種方式創建RDD:
轉換操作指的是在原RDD實例上進行計算,然後創建一個新的RDD實例。
RDD中的所有的轉換操作都是 惰性 的,在執行RDD的轉換操作的時候,並不會直接計算結果,而是記住這些應用到基礎數據集上的轉換動作,只有行動操作時,這些轉換才會真正的去執行。這樣設計的好處是更加有效率的運行。
行動操作指的是向驅動器程序返回結果或把結果寫入外部系統的操作。
Spark在調用RDD的行動操作的時候,會觸發Spark中的連鎖反應。當調用的行動操作的時候,Spark會虧州薯嘗試創建作為調用者的RDD。如果這個RDD是從文件中創建的,那麼Spark會在worker節點上讀取文件至內存中。如果這個RDD是通過其他RDD的轉換得到的,Spark會嘗試創建其父RDD。這個過程會一直持續下去,直到Spark找到根RDD。然後Spark就會真正執行這些生成RDD所必須的轉換計算。最後完成行動操作,將結果返回給驅動程序或者寫入外部存儲。
Spark速度非常快的原因之一,就是在不同操作中在內存中持久化一個數據集。當持久化一個RDD後,每一個節點都將把計算的分片結果保存在內存中,並在銷者對此數據集進行的其他動作中重用。這使得後續的動作變得更加迅速。緩存是Spark構建迭代演算法和快速互動式查詢的關鍵。所以我們在開發過程中,對經常使用的RDD要進行緩存操作,以提升程序運行效率。
RDD緩存的方法
RDD類提供了兩種緩存方法:
cache方法其實是將RDD存儲在集群中Worker的內存中。
persist是一個通用的cache方法。它可以將RDD存儲在內存中或硬碟上或者二者皆有。
緩存的容錯
緩存是有可能丟失(如機器宕機),或者存儲於內存的數據由於內存不足而被刪除。RDD的緩存的容錯機制保證了即使緩存丟失也能保證計算的正確執行。通過基於RDD的一系列的轉換,丟失的數據會被重新計算。因為RDD的各個Partition是相對獨立的,所以在重新計算的時候只需要計算丟失部分Partition即可,不需要重新計算全部的Partition。因此,在一個緩存RDD的節點出現故障的時候,Spark會在另外的節點上自動重新創建出現故障的節點中存儲的分區。
RDD的緩存能夠在第一次計算完成後,將計算結果保存到內存、本地文件系統或者Tachyon中。通過緩存,Spark避免了RDD上的重復計算,能夠極大地提升計算速度。但是,如果緩存丟失了,則需要重新計算。如果計算特別復雜或者計算特別耗時,那麼緩存丟失對於整個Job的影響是不容忽視的。為了避免緩存丟失重新計算帶來的開銷,所以Spark引入了檢查點(checkpoint)機制。跡攔
緩存是在計算結束後,直接將計算結果通過用戶定義的存儲級別寫入不同的介質。而檢查點不同,它是在計算完成後,重新建立一個Job來計算。所以為了避免重復計算,推薦先將RDD緩存,這樣在進行檢查點操作時就可以快速完成。
Spark會根據用戶提交的計算邏輯中的RDD的轉換和動作來生動RDD之間的依賴關系,同時這個計算鏈也就生成了邏輯上的DAG。
RDD之間的依賴關系包括:
Spark中的依賴關系主要體現為兩種形式: