1.Spark是什麼?
UCBerkeley AMPlab所開源的類HadoopMapReduce的通用的並行計算框架
dfsSpark基於mapreduce算法實現的分佈式計算,擁有HadoopMapReduce所具有的優點;但不同於MapReduce的是Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的map reduce的算法。
2.Spark與Hadoop的對比(Spark的優勢)
1、Spark的中間數據放到內存中,對於迭代運算效率更高
2、Spark比Hadoop更通用
3、Spark提供了統一的編程接口
4、容錯性– 在分佈式數據集計算時通過checkpoint來實現容錯
5、可用性– Spark通過提供豐富的Scala, Java,Python API及交互式Shell來提高可用性
3.Spark有那些組件
1、Spark Streaming:支持高吞吐量、支持容錯的實時流數據處理
2、Spark SQL, Data frames: 結構化數據查詢
3、MLLib:Spark 生態系統裡用來解決大數據機器學習問題的模塊
4、GraphX是構建於Spark上的圖計算模型
5、SparkR是一個R語言包,它提供了輕量級的方式使得可以在R語言中使用 Spark
4.DataFrame是什麼?
DataFrame是一種以RDD為基礎的分佈式數據集,類似於傳統數據庫中的二維表格。
5.DataFrame與RDD的主要區別在於?
DataFrame帶有schema元信息,即DataFrame所表示的二維表數據集的每一列都帶有名稱和類型。這使得SparkSQL得以洞察更多的結構信息,從而對藏於DataFrame背後的數據源以及作用於DataFrame之上的變換進行了針對性的優化,最終達到大幅提升運行時效率的目標。反觀RDD,由於無從得知所存數據元素的具體內部結構,Spark Core只能在stage層面進行簡單、通用的流水線優化。
6.DataFrame 特性
1、支持從KB到PB級的數據量
2、支持多種數據格式和多種存儲系統
3、通過Catalyst優化器進行先進的優化生成代碼
4、通過Spark無縫集成主流大數據工具與基礎設施
5、API支持Python、Java、Scala和R語言
7.RDD
Resilient Distributed Datasets,意為容錯的、並行的數據結構,可以讓用戶顯式地將數據存儲到磁盤和內存中,並能控制數據的分區。同時,RDD還提供了一組豐富的操作來操作這些數據。
8.RDD的特點
它是在集群節點上的不可變的、已分區的集合對象。
通過並行轉換的方式來創建如(map, filter, join, etc)。
失敗自動重建。
可以控制存儲級別(內存、磁盤等)來進行重用。
必須是可序列化的。
是靜態類型的。
9.RDD核心概念
Client:客戶端進程,負責提交作業到Master。
Master:Standalone模式中主控節點,負責接收Client提交的作業,管理Worker,並命令Worker啟動分配Driver的資源和啟動Executor的資源。
Worker:Standalone模式中slave節點上的守護進程,負責管理本節點的資源,定期向Master彙報心跳,接收Master的命令,啟動Driver和Executor。
Driver: 一個Spark作業運行時包括一個Driver進程,也是作業的主進程,負責作業的解析、生成Stage並調度Task到Executor上。包括DAGScheduler,TaskScheduler。
Executor:即真正執行作業的地方,一個集群一般包含多個Executor,每個Executor接收Driver的命令Launch Task,一個Executor可以執行一到多個Task。
10.RDD常見術語
DAGScheduler: 實現將Spark作業分解成一到多個Stage,每個Stage根據RDD的Partition個數決定Task的個數,然後生成相應的Task set放到TaskScheduler中。
TaskScheduler:實現Task分配到Executor上執行。
Task:運行在Executor上的工作單元
Job:SparkContext提交的具體Action操作,常和Action對應
Stage:每個Job會被拆分很多組任務(task),每組任務被稱為Stage,也稱TaskSet
RDD:Resilient Distributed Datasets的簡稱,彈性分佈式數據集,是Spark最核心的模塊和類
Transformation/Action:SparkAPI的兩種類型;Transformation返回值還是一個RDD,Action返回值不少一個RDD,而是一個Scala的集合;所有的Transformation都是採用的懶策略,如果只是將Transformation提交是不會執行計算的,計算只有在Action被提交時才會被觸發。
DataFrame: 帶有Schema信息的RDD,主要是對結構化數據的高度抽象。
DataSet:結合了DataFrame和RDD兩者的優勢,既允許用戶很方便的操作領域對象,又具有SQL執行引擎的高效表現。