如何掌握Spark和Hadoop的架構

chhch86發表於2019-07-17

Spark和Hadoop的架構區別是什麼,什麼是spark,什麼是Hadoop,怎麼樣學習這些知識點?

總的來說,Spark採用更先進的架構,使得靈活性、易用性、效能等方面都比Hadoop更有優勢,有取代Hadoop的趨勢,但其穩定性有待進一步提高。我總結,具體表現在如下幾個方面。

Spark和Hadoop的架構區別解讀

Spark和Hadoop的架構有什麼不同之處

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:

A list of partitions:一個分割槽列表,RDD中的資料都儲存在一個分割槽列表中

A function for computing each split:作用在每一個分割槽中的函式

A list of dependencies on other RDDs:一個RDD依賴於其他多個RDD,這個點很重要,RDD的容錯機制就是依據這個特性而來的

Optionally,a Partitioner for key-value RDDs(eg:to say that the RDD is hash-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更加高效,推薦使用。如果你想要學好程式設計技能,請留意內蒙達內官網,學習技能快,我們只選對的機構!



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940009/viewspace-2650824/,如需轉載,請註明出處,否則將追究法律責任。

相關文章