Spark面試高頻考點,必知必會!

2021-02-20 Python數據科學

一、你是怎麼理解Spark,它的特點是什麼?

        Spark是一個基於內存的,用於大規模數據處理(離線計算、實時計算、快速查詢(交互式查詢))的統一分析引擎。

        它內部的組成模塊,包含SparkCore,SparkSQL,SparkStreaming,SparkMLlib,SparkGraghx等...

        它的特點:

        Spark計算速度是MapReduce計算速度的10-100倍

        MR支持1種計算模型,Spsark支持更多的計算模型(算法多)

        Spark 能夠進行離線計算、交互式查詢(快速查詢)、實時計算、機器學習、圖計算

        Spark支持大數據中的Yarn調度,支持mesos。可以處理hadoop計算的數據。

        

二、Spark有幾種部署方式,請分別簡要論述

        1) Local:運行在一臺機器上,通常是練手或者測試環境。

        2)Standalone:構建一個基於Mster+Slaves的資源調度集群,Spark任務提交給Master運行。是Spark自身的一個調度系統。

        3)Yarn: Spark客戶端直接連接Yarn,不需要額外構建Spark集群。有yarn-client和yarn-cluster兩種模式,主要區別在於:Driver程序的運行節點。

        4)Mesos:國內大環境比較少用。

        

三、Spark提交作業的參數

        因為我們Spark任務是採用的Shell腳本進行提交,所以一定會涉及到幾個重要的參數,而這個也是在面試的時候容易被考察到的「細節」。

executor-cores —— 每個executor使用的內核數,默認為1,官方建議2-5個,我們企業是4個
num-executors —— 啟動executors的數量,默認為2
executor-memory —— executor內存大小,默認1G
driver-cores —— driver使用內核數,默認為1
driver-memory —— driver內存大小,默認512M

        

四、簡述Spark的作業提交流程

        Spark的任務提交方式實際上有兩種,分別是YarnClient模式和YarnCluster模式。大家在回答這個問題的時候,也需要分類去介紹。千萬不要被冗長的步驟嚇到,一定要學會總結差異,發現規律,通過圖形去增強記憶。

        在YARN Client模式下,Driver在任務提交的本地機器上運行,Driver啟動後會和ResourceManager通訊申請啟動ApplicationMaster,隨後ResourceManager分配container,在合適的NodeManager上啟動ApplicationMaster,此時的ApplicationMaster的功能相當於一個ExecutorLaucher,只負責向ResourceManager申請Executor內存。

        ResourceManager接到ApplicationMaster的資源申請後會分配container,然後ApplicationMaster在資源分配指定的NodeManager上啟動Executor進程,Executor進程啟動後會向Driver反向註冊,Executor全部註冊完成後Driver開始執行main函數,之後執行到Action算子時,觸發一個job,並根據寬依賴開始劃分stage,每個stage生成對應的taskSet,之後將task分發到各個Executor上執行。        

         在YARN Cluster模式下,任務提交後會和ResourceManager通訊申請啟動ApplicationMaster,隨後ResourceManager分配container,在合適的NodeManager上啟動ApplicationMaster,此時的ApplicationMaster就是Driver。

        Driver啟動後向ResourceManager申請Executor內存,ResourceManager接到ApplicationMaster的資源申請後會分配container,然後在合適的NodeManager上啟動Executor進程,Executor進程啟動後會向Driver反向註冊,Executor全部註冊完成後Driver開始執行main函數,之後執行到Action算子時,觸發一個job,並根據寬依賴開始劃分stage,每個stage生成對應的taskSet,之後將task分發到各個Executor上執行。

        

五、你是如何理解Spark中血統(RDD)的概念?它的作用是什麼?

        RDD 可是Spark中最基本的數據抽象,我想就算面試不被問到,那自己是不是也應該非常清楚呢!

        下面提供菌哥的回答,供大家參考:

        RDD是彈性分布式數據集,是Spark中最基本的數據抽象,代表一個不可變、可分區、裡面的元素可並行計算 的集合。

        提供了一個抽象的數據模型,將具體的應用邏輯表達為一系列轉換操作(函數)。另外不同RDD之間的轉換操作之間還可以形成依賴關係,進而實現管道化,從而避免了中間結果的存儲,大大降低了數據複製、磁碟IO和序列化開銷,並且還提供了更多的API(map/reduec/filter/groupBy...)

        如果還想錦上添花,可以添上這一句:

RDD在Lineage依賴方面分為兩種Narrow Dependencies與Wide Dependencies,用來解決數據容錯時的高效性以及劃分任務時候起到重要作用

」六、簡述Spark的寬窄依賴,以及Spark如何劃分stage,每個stage又根據什麼決定task個數?

        Spark的寬窄依賴問題是SparkCore部分的重點考察內容,多數出現在筆試中,大家需要注意。

        窄依賴:父RDD的一個分區只會被子RDD的一個分區依賴

        寬依賴:父RDD的一個分區會被子RDD的多個分區依賴(涉及到shuffle)

        那Stage是如何劃分的呢?

        根據RDD之間的依賴關係的不同將Job劃分成不同的Stage,遇到一個寬依賴則劃分一個Stage。

        每個stage又根據什麼決定task個數?

        Stage是一個TaskSet,將Stage根據分區數劃分成一個個的Task。

        這裡為了方便大家理解,貼上一張過程圖

七、列舉Spark常用的transformation和action算子,有哪些算子會導致Shuffle?

        我們在Spark開發過程中,避不開與各種算子打交道,其中Spark 算子分為transformation 和 action 算子,下面列出一些常用的算子,具體的功能還需要小夥伴們自行去了解。

transformation

action

        如果面試官問你,那小夥幾,有哪些會引起Shuffle過程的Spark算子呢?

        你只管自信的回答:

八、reduceByKey與groupByKey的區別,哪一種更具優勢?

        既然你上面都提到 reduceByKey 和groupByKey  ,那哪一種更具優勢,你能簡單分析一下嗎?

        能問這樣的問題,已經暗示面試官的水平不低了,那麼我們該如何回答呢:

        reduceByKey:按照key進行聚合,在shuffle之前有combine(預聚合)操作,返回結果是RDD[k,v]。

        groupByKey:按照key進行分組,直接進行shuffle

        所以,在實際開發過程中,reduceByKey比groupByKey,更建議使用。但是需要注意是否會影響業務邏輯。

        

九、Repartition和Coalesce 的關係與區別,能簡單說說嗎?

        這道題就已經開始摻和有「源碼」的味道了,為什麼呢?

        1)關係:

        兩者都是用來改變RDD的partition數量的,repartition底層調用的就是coalesce方法:coalesce(numPartitions, shuffle = true)

        2)區別:

        repartition一定會發生shuffle,coalesce 根據傳入的參數來判斷是否發生shuffle。

        一般情況下增大rdd的partition數量使用repartition,減少partition數量時使用coalesce。

        

十、簡述下Spark中的緩存(cache和persist)與checkpoint機制,並指出兩者的區別和聯繫

        關於Spark緩存和檢查點的區別,大致可以從這3個角度去回答:

        Persist 和 Cache將數據保存在內存,Checkpoint將數據保存在HDFS

        Persist 和 Cache  程序結束後會被清除或手動調用unpersist方法,Checkpoint永久存儲不會被刪除。

        Persist 和 Cache,不會丟掉RDD間的依賴鏈/依賴關係,CheckPoint會斬斷依賴鏈。

        

十一、簡述Spark中共享變量(廣播變量和累加器)的基本原理與用途

        關於Spark中的廣播變量和累加器的基本原理和用途,答案較為固定,大家無需刻意去記憶。

        累加器(accumulator)是Spark中提供的一種分布式的變量機制,其原理類似於mapreduce,即分布式的改變,然後聚合這些改變。累加器的一個常見用途是在調試時對作業執行過程中的事件進行計數。

        廣播變量是在每個機器上緩存一份,不可變,只讀的,相同的變量,該節點每個任務都能訪問,起到節省資源和優化的作用。它通常用來高效分發較大的對象。

十二、當Spark涉及到資料庫的操作時,如何減少Spark運行中的資料庫連接數?

        嗯,有點「調優」的味道,感覺真正的「風暴」即將到來,這道題還是很好回答的,我們只需要減少連接資料庫的次數即可。

        使用foreachPartition代替foreach,在foreachPartition內獲取資料庫的連接。        

十三、能介紹下你所知道和使用過的Spark調優嗎?

        恐怖如斯,該來的還是會來的,慶幸自己看了菌哥的面試殺招,絲毫不慌:        

資源參數調優num-executors:設置Spark作業總共要用多少個Executor進程來執行executor-memory:設置每個Executor進程的內存executor-cores:設置每個Executor進程的CPU core數量driver-memory:設置Driver進程的內存spark.default.parallelism:設置每個stage的默認task數量開發調優「

①使用reduceByKey/aggregateByKey替代groupByKey

②使用mapPartitions替代普通map 

③使用foreachPartitions替代foreach 

④使用filter之後進行coalesce操作

⑤使用repartitionAndSortWithinPartitions替代repartition與sort類操作

」「

在算子函數中使用到外部變量時,默認情況下,Spark會將該變量複製多個副本,通過網絡傳輸到task中,此時每個task都有一個變量副本。如果變量本身比較大的話(比如100M,甚至1G),那麼大量的變量副本在網絡中傳輸的性能開銷,以及在各個節點的Executor中佔用過多內存導致的頻繁GC(垃圾回收),都會極大地影響性能。

」「

在可能以及合適的情況下,使用佔用內存較少的數據結構,但是前提是要保證代碼的可維護性。

        如果能夠儘可能的把這些要點說出來,我想面試官可能就一個想法:

十四、如何使用Spark實現TopN的獲取(描述思路或使用偽代碼)?

        能讓你使用偽代碼來描述這已經非常「苛刻」了,但是不慌,這裡提供3種思路供大家參考:

        (1)按照key對數據進行聚合(groupByKey)

        (2)將value轉換為數組,利用scala的sortBy或者sortWith進行排序(mapValues)

        注意:當數據量太大時,會導致OOM

        (1)取出所有的key

        (2)對key進行迭代,每次取出一個key利用spark的排序算子進行排序

        (1)自定義分區器,按照key進行分區,使不同的key進到不同的分區

        (2)對每個分區運用spark的排序算子進行排序


相關焦點

  • 高考提能丨高考歷史考前必背必知的42個高頻考點、重點筆記
    其實不管高考題怎麼變,高考的高頻考點也就那麼幾個,如果面對大量需要背誦的內容不知道該如何去做,那麼這42個高頻考點一定要掌握好。今天大家整理了一份近幾年高考必背必知的42個高頻考點、重點筆記!
  • 【國考高頻考點】2020國家公務員考試圖形推理高頻考點2
    【國考高頻考點】2020國家公務員考試圖形推理高頻考點2由國家公務員考試網行測欄目由提供,更多關於國考高頻考點,2020國家公務員考試圖形推理高頻考點,國家公務員考試行測的內容,請關注國家公務員考試網/廣東公務員考試網!
  • 面試必知的 Spark SQL 幾種 Join 實現
    Join基本實現流程總體上來說,Join的基本實現流程如下圖所示,Spark將參與Join的兩張表抽象為流式遍歷表(streamIter)和查找表(buildIter),通常streamIter為大表,buildIter為小表,我們不用擔心哪個表為streamIter,哪個表為buildIter,這個spark會根據join語句自動幫我們完成。
  • Spark【面試】
    Spark【面試】 hadoop的job只有map和reduce操作,表達能力比較欠缺而且在mr過程中會重複的讀寫hdfs,造成大量的io操作,多個job需要自己管理關係。 spark的迭代計算都是在內存中進行的,API中提供了大量的RDD操作如join,groupby等,而且通過DAG圖可以實現良好的容錯。
  • 【國考高頻考點】國家公務員考試圖形推理高頻考點1(附解題技巧)
    【國考高頻考點】國家公務員考試圖形推理高頻考點1(附解題技巧)由國家公務員考試網行測欄目由提供,更多關於國考圖形推理高頻考點,2020國考圖形推理解題技巧,國家公務員考試行測的內容,請關注國家公務員考試網/廣東公務員考試網!
  • 一網打盡Spark高頻面試題
    5個,我們企業是4個num-executors —— 啟動executors的數量,默認為2executor-memory ——executor內存大小,默認1Gdriver-cores ——driver使用內核數,默認為1driver-memory —— driver內存大小,默認512M2)給一個提交任務的樣式spark-submit
  • 面試必知必會|理解C++虛函數
    0.前言在後端面試中語言特性的掌握直接決定面試成敗,因此本公眾號在在後續會持續輸出程式語言的必知必會知識點系列。只要出發總會達到,只有出發才會到達,焦慮沒用,學就完了,今天一起來學習C++的虛函數考點吧。
  • 考生必背!初級會計基礎備考階段高頻考點!
    考生必背!初級會計基礎備考階段高頻考點!《初級會計實務》基礎階段必背考點,以下僅展示部分內容:《經濟法基礎》基礎階段必背考點,以下僅展示部分內容:自己可以結合備考科目的數量、各科目的難度以及自己自由時間的分配情況來制定每天的學習計劃,並將其可視化,當你惰性復發時,看看計劃表,它會時刻督促著你的。如果你沒有完成今天的計劃,睡覺會踏實嗎?
  • 大數據分析工程師面試集錦3-SQL/SparkSql/HiveQL
    面試題庫01SQL基礎知識考察對於面試初級數據分析師來說,SQL的面試重點會放在基礎知識的考察,如果最基本的基礎概念和語法都不能熟練回答出來的話,通過面試的機率就會很低。答:ALTER TABLE Products DROP COLUMN vend_phone;PS:諸如以上題4題5題6,面試官要麼會直接問你怎麼新加一個欄位,怎麼刪除一個欄位,這種只需你口頭回答的題型,要麼就會給個示例,讓你實際書寫一下。
  • 數據分析工程師面試集錦5——Spark面試指南
    導語本篇文章為大家帶來spark面試指南,文內會有兩種題型,問答題和代碼題,題目大部分來自於網絡上,有小部分是來自於工作中的總結,每個題目會給出一個參考答案。為什麼考察Spark?Spark作為大數據組件中的執行引擎,具備以下優勢特性。
  • 高考歷史必背知識點42個高頻考點,考試用得到,掌握後歷史90+
    以下是學姐為大家整理的高考歷史必背知識點高頻考點歸納,希望大家喜歡!由於篇幅有限,需要電子版的童鞋戳我頭像點擊私信發送【歷史高頻考點】哦。
  • 高中化學,14頁必背高頻考點歸納與總結
    學姐這裡已經解決好你們的問題啦,學姐熬夜吐血整理,高中化學,14頁必背高頻考點歸納與總結,看一眼就是分,7天背完,80分輕鬆拿下!必須背誦熟練,這些知識點每年都會考,超級重要,建議小可愛們列印出來背誦。
  • 中考物理聲音特性(必會,理解掌握,高頻考點)
    考點解析本小節以選擇題和填空題考核為主,需要重點掌握的知識點。屬於高頻考點。
  • 2010年河南中高考「必考點」
    抓住「必考點」就能衝刺高分  當筆者提起《高頻考點透析》時,金水區畢業班教數學的劉老師說:「知道,知道,我們平時也都是按知識點、考點來指導學生複習的,可每個學科考點太多了,比如高考數學,一共160多個考點,我們總結的有80多個重點,這套資料裡專家卻總結出了41個必考點。能總結這麼精闢只能是這些專家級的名師了。」
  • 面試真題、高頻考點等乾貨讓你贏在起跑線
    >護理、臨床、藥學、公共基礎、醫學基礎專業知識,面試熱點在手醫療事業編結構化面試指導課程部分展示 最重要的是200份的高頻考點、專業知識小結、思維導圖,還有一份求職面試大禮包,有了這些,讓你贏在起跑線
  • CPA財管高頻考點知識,2020財管通關必看
    下面考呀呀會計網校小編為大家整理財管通關必背知識點,同學們可以用此表來查帳,看看自己的備考有沒有遺漏!財管備考天王《財管》知識點數量比較多,而以下的知識點可以說是重中之重,極有可能出現在你的試卷上,如果你的備考進度比較緊張,這些高頻考點知識你一定要優先掌握透徹
  • 2020國家公務員考試解題技巧:圖形推理高頻考點之黑白塊
    2020國家公務員考試解題技巧:圖形推理高頻考點之黑白塊由國家公務員考試網行測欄目由提供,更多關於2020國考行測解題技巧,圖形推理高頻考點之黑白塊,國家公務員考試行測的內容,請關注國家公務員考試網/廣東公務員考試網!
  • 必知必會! MySql 高頻企業面試題
    MySQL中的binlog日誌記錄了數據中的數據變動,便於對數據的基於時間點和基於位置的恢復,但日誌文件的大小會越來越大,點用大量的磁碟空間,因此需要定時清理一部分日誌信息手工刪除:首先查看主從庫正在使用的binlog文件名稱
  • 2018《初級會計實務》高頻考點
    【高頻考點】會計要素及其確認與計量1.會計要素按照其性質分為資產、負債、所有者權益、收入、費用和利潤。其中,資產、負債和所有者權益要素側重於反映企業的財務狀況,收入、費用和利潤要素側重於反映企業的經營成果。(1)資產是指企業過去的交易或者事項形成的、由企業擁有或者控制的、預期會給企業帶來經濟利益的資源。
  • 教資考試高中數學高頻考點梳理-特徵值與特徵向量
    教師資格考試資料:北京人事考試網提供北京教師考試資料,包括中小學教師資格複習資料、高校教師招聘筆試面試技巧輔導資料下載。本文為廣大考生整理高中數學高頻考點梳理-特徵值與特徵向量。更多北京教師資格證考試信息,請點擊北京教師資格網。