spark3


Q:Spark和Hadoop的架構區別

A:Hadoop:MapRedcue由Map和Reduce兩個階段,並通過shuffle將兩個階段連接起來的。但是套用MapReduce模型解決問題,不得不將問題分解為若干個有依賴關系的子問題,每個子問題對應一個MapReduce作業,最終所有這些作業形成一個DAG。

Spark:是通用的DAG框架,可以將多個有依賴關系的作業轉換為一個大的DAG。核心思想是將Map和Reduce兩個操作進一步拆分為多個元操作,這些元操作可以靈活組合,產生新的操作,並經過一些控制程序組裝后形成一個大的DAG作業。

Q:Spark和Hadoop的中間計算結果處理區別

A:Hadoop:在DAG中,由於有多個MapReduce作業組成,每個作業都會從HDFS上讀取一次數據和寫一次數據(默認寫三份),即使這些MapReduce作業產生的數據是中間數據也需要寫HDFS。這種表達作業依賴關系的方式比較低效,會浪費大量不必要的磁盤和網絡IO,根本原因是作業之間產生的數據不是直接流動的,而是借助HDFS作為共享數據存儲系統。

Spark:在Spark中,使用內存(內存不夠使用本地磁盤)替代了使用HDFS存儲中間結果。對於迭代運算效率更高。

Q:Spark和Hadoop的操作模型區別

A:

Hadoop:只提供了Map和Reduce兩種操作所有的作業都得轉換成Map和Reduce的操作。

Spark:提供很多種的數據集操作類型比如Transformations包括map,filter,flatMap,sample,groupByKey,reduceByKey,union,join,cogroup,mapValues,sort,partionBy等多種操作類型,還提供actions操作包括Count,collect,reduce,lookup,save等多種。這些多種多樣的數據集操作類型,給開發上層應用的用戶提供了方便。

Q:spark中的RDD是什么,有哪些特性?

A:

Alistofpartitions:一個分區列表,RDD中的數據都存儲在一個分區列表中

Afunctionforcomputingeachsplit:作用在每一個分區中的函數

AlistofdependenciesonotherRDDs:一個RDD依賴於其他多個RDD,這個點很重要,RDD的容錯機制就是依據這個特性而來的

Optionally,aPartitionerforkey-valueRDDs(eg:tosaythattheRDDishash-partitioned):可選的,針對於kv類型的RDD才有這個特性,作用是決定了數據的來源以及數據處理后的去向

可選項,數據本地性,數據位置***

Q:概述一下spark中的常用算子區別(map,mapPartitions,foreach,foreachPatition)

A:map:用於遍歷RDD,將函數應用於每一個元素,返回新的RDD(transformation算子)

foreach:用於遍歷RDD,將函數應用於每一個元素,無返回值(action算子)

mapPatitions:用於遍歷操作RDD中的每一個分區,返回生成一個新的RDD(transformation算子)

foreachPatition:用於遍歷操作RDD中的每一個分區,無返回值(action算子)

總結:一般使用mapPatitions和foreachPatition算子比map和foreach更加高效,推薦使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM