黑馬程式設計師:技術筆記大數據面試題之spark相關(二)

2020-12-16 黑馬程式設計師

昨天分享了大數據面試題之spark相關一,看到有很大的反響,今天就分享接下來的二,希望能更好的幫助到大家!

11.簡單說一下hadoop和spark的shuffle相同和差異?答:1)從 high-level 的角度來看,兩者並沒有大的差別。 都是將 mapper(Spark 裡是ShuffleMapTask)的輸出進行 partition,不同的 partition 送到不同的 reducer(Spark 裡 reducer 可能是下一個 stage 裡的 ShuffleMapTask,也可能是 ResultTask)。Reducer 以內存作緩衝區,邊 shuffle 邊 aggregate 數據,等到數據 aggregate 好以後進行 reduce() (Spark 裡可能是後續的一系列操作)。2)從 low-level 的角度來看,兩者差別不小。 Hadoop MapReduce 是 sort-based,進入 combine() 和 reduce() 的 records 必須先 sort。這樣的好處在於 combine/reduce() 可以處理大規模的數據,因為其輸入數據可以通過外排得到(mapper 對每段數據先做排序,reducer 的 shuffle 對排好序的每段數據做歸併)。目前的 Spark 默認選擇的是 hash-based,通常使用 HashMap 來對 shuffle 來的數據進行 aggregate,不會對數據進行提前排序。如果用戶需要經過排序的數據,那麼需要自己調用類似 sortByKey() 的操作;如果你是Spark 1.1的用戶,可以將spark.shuffle.manager設置為sort,則會對數據進行排序。在Spark 1.2中,sort將作為默認的Shuffle實現。3)從實現角度來看,兩者也有不少差別。 Hadoop MapReduce 將處理流程劃分出明顯的幾個階段:map(),spill, merge, shuffle, sort, reduce() 等。每個階段各司其職,可以按照過程式的編程思想來逐一實現每個階段的功能。在 Spark 中,沒有這樣功能明確的階段,只有不同的 stage 和一系列的 transformation(),所以 spill, merge, aggregate等操作需要蘊含在 transformation() 中。如果我們將 map 端劃分數據、持久化數據的過程稱為 shuffle write,而將 reducer 讀入數據、aggregate 數據的過程稱為 shuffle read。那麼在 Spark 中,問題就變為怎麼在 job 的邏輯或者物理執行圖中加入 shuffle write 和 shuffle read 的處理邏輯?以及兩個處理邏輯應該怎麼高效實現?Shuffle write由於不要求數據有序,shuffle write 的任務很簡單:將數據 partition 好,並持久化。之所以要持久化,一方面是要減少內存存儲空間壓力,另一方面也是為了 fault-tolerance。12.Mapreduce和Spark的都是並行計算,那麼他們有什麼相同和區別答:兩者都是用mr模型來進行並行計算:1)hadoop的一個作業稱為job,job裡面分為map task和reduce task,每個task都是在自己的進程中運行的,當task結束時,進程也會結束。 2)spark用戶提交的任務成為application,一個application對應一個sparkcontext,app中存在多個job,每觸發一次action操作就會產生一個job。這些job可以並行或串行執行,每個job中有多個stage,stage是shuffle過程中DAGSchaduler通過RDD之間的依賴關係劃分job而來的,每個stage裡面有多個task,組成taskset有TaskSchaduler分發到各個executor中執行,executor的生命周期是和app一樣的,即使沒有job運行也是存在的,所以task可以快速啟動讀取內存進行計算。 3)hadoop的job只有map和reduce操作,表達能力比較欠缺而且在mr過程中會重複的讀寫hdfs,造成大量的io操作,多個job需要自己管理關係。 spark的迭代計算都是在內存中進行的,API中提供了大量的RDD操作如join,groupby等,而且通過DAG圖可以實現良好的容錯。13.RDD機制? 答:rdd分布式彈性數據集,簡單的理解成一種數據結構,是spark框架上的通用貨幣。所有算子都是基於rdd來執行的,不同的場景會有不同的rdd實現類,但是都可以進行互相轉換。 rdd執行過程中會形成dag圖,然後形成lineage保證容錯性等。 從物理的角度來看rdd存儲的是block和node之間的映射。14、spark有哪些組件?答:主要有如下組件:1)master:管理集群和節點,不參與計算。 2)worker:計算節點,進程本身不參與計算,和master匯報。 3)Driver:運行程序的main方法,創建spark context對象。 4)spark context:控制整個application的生命周期,包括dagsheduler和task scheduler等組件。 5)client:用戶提交程序的入口。15、spark工作機制?答:用戶在client端提交作業後,會由Driver運行main方法並創建sparkcontext上下文。 執行add算子,形成dag圖輸入dagscheduler,按照add之間的依賴關係劃分stage輸入taskscheduler。 task scheduler會將stage劃分為task set分發到各個節點的executor中執行。16、spark的優化怎麼做?答: spark調優比較複雜,但是大體可以分為三個方面來進行,1)平臺層面的調優:防止不必要的jar包分發,提高數據的本地性,選擇高效的存儲格式如parquet,2)應用程式層面的調優:過濾操作符的優化降低過多小任務,降低單條記錄的資源開銷,處理數據傾斜,復用RDD進行緩存,作業並行化執行等等,3)JVM層面的調優:設置合適的資源量,設置合理的JVM,啟用高效的序列化方法如kyro,增大off head內存等等17.簡要描述Spark分布式集群搭建的步驟1)準備linux環境,設置集群搭建帳號和用戶組,設置ssh,關閉防火牆,關閉seLinux,配置host,hostname2)配置jdk到環境變量3)搭建hadoop集群,如果要做master ha,需要搭建zookeeper集群修改hdfs-site.xml,hadoop_env.sh,yarn-site.xml,slaves等配置文件4)啟動hadoop集群,啟動前要格式化namenode5)配置spark集群,修改spark-env.xml,slaves等配置文件,拷貝hadoop相關配置到spark conf目錄下6)啟動spark集群。18.什麼是RDD寬依賴和窄依賴?RDD和它依賴的parent RDD(s)的關係有兩種不同的類型,即窄依賴(narrowdependency)和寬依賴(wide dependency)。1)窄依賴指的是每一個parent RDD的Partition最多被子RDD的一個Partition使用2)寬依賴指的是多個子RDD的Partition會依賴同一個parent RDD的Partition19.spark-submit的時候如何引入外部jar包 方法一:spark-submit –jars根據spark官網,在提交任務的時候指定–jars,用逗號分開。這樣做的缺點是每次都要指定jar包,如果jar包少的話可以這麼做,但是如果多的話會很麻煩。命令:spark-submit --masteryarn-client --jars ***.jar,***.jar方法二:extraClassPath提交時在spark-default中設定參數,將所有需要的jar包考到一個文件裡,然後在參數中指定該目錄就可以了,較上一個方便很多:spark.executor.extraClassPath=/home/hadoop/wzq_workspace/lib/*spark.driver.extraClassPath=/home/hadoop/wzq_workspace/lib/*需要注意的是,你要在所有可能運行spark任務的機器上保證該目錄存在,並且將jar包考到所有機器上。這樣做的好處是提交代碼的時候不用再寫一長串jar了,缺點是要把所有的jar包都拷一遍。20.cache和pesist的區別 答:1)cache和persist都是用於將一個RDD進行緩存的,這樣在之後使用的過程中就不需要重新計算了,可以大大節省程序運行時間;2) cache只有一個默認的緩存級別MEMORY_ONLY,cache調用了persist,而persist可以根據情況設置其它的緩存級別;3)executor執行的時候,默認60%做cache,40%做task操作,persist最根本的函數,最底層的函數

相關焦點

  • 程式設計師辭職去面試,反問面試官15個技術題,領導:搞錯了吧
    之前論壇上的一篇文章很特殊,講的是一位程式設計師去面試,面試官問過之後,程式設計師反問了面試官,反問的內容居然是15個技術題,這可真是前所未有的事情,估計這個程式設計師的做法讓面試的領導也會有點發蒙
  • 百度大數據三面題:shuffle過程+HBase+Spark優化+kmeans算法
    hadoop和spark的都是並行計算,那麼他們有什麼相同和區別呢?說一說Spark Streaming和Storm有何區別?kafka的數據存在內存還是磁碟Hive與關係型資料庫的關係?spark集群運算的模式簡單說一下hadoop的shuffle過程三面:(主要是算法原理)自我介紹說說你對大數據行業現狀的看法
  • 大數據分析工程師面試集錦3-SQL/SparkSql/HiveQL
    面試題庫01SQL基礎知識考察對於面試初級數據分析師來說,SQL的面試重點會放在基礎知識的考察,如果最基本的基礎概念和語法都不能熟練回答出來的話,通過面試的機率就會很低。PS:每次回答面試官所提問的概念性問題時,最好在答出概念後,總結性的闡述一下相關注意事項,這樣能夠很快體現出你對這個概念的認知是很清楚的,且給面試官思路清晰,總結和表述能力不錯的印象。
  • 2020Python+人工智慧學習路線圖,內附完整自學路線+視頻+工具經驗+面試篇
    以後想做雲計算和大數據 ,現在學習python是不是對後期有一定的幫助?Python課程為什麼要加入人工智慧?工作時間短還想長經驗的同學推薦看這個~經驗篇--技術問題Python基礎中繼承與派生關注「黑馬程式設計師視頻庫」,後臺回復「Python學習路線」免費獲取。
  • 數據分析工程師面試集錦5——Spark面試指南
    導語本篇文章為大家帶來spark面試指南,文內會有兩種題型,問答題和代碼題,題目大部分來自於網絡上,有小部分是來自於工作中的總結,每個題目會給出一個參考答案。為什麼考察Spark?Spark作為大數據組件中的執行引擎,具備以下優勢特性。
  • 疫情期間Offer不斷,長沙黑馬程式設計師就業不打烊!
    就業指導作為長沙黑馬程式設計師的重要組成部分,在日常工作中,前期是為了學員們的技術提升輔導學員,後期為了學員的就業輔導學員相關就業問題。在當前疫情影響下,面試環節遇到重重困難, 無論求職方還是招聘方其實都更傾向於通過線上面試解決招聘問題,畢竟線下面試對於雙方都存在一定程度上的安全隱患,對於這一狀況,咱們就業指導又有什麼樣的對策呢?
  • 面試大數據分析師,你需要掌握的基礎技術棧.
    讀完本文,你將收穫大數據技術學習的基本方向,以及在面試前需要準備和複習的常見面試題。正文:在數據時代的今天,大數據行業是最熱門的行業之一。在大數據行業中,大數據分析師是需求量最大的崗位,很多高校也都專門開設了大數據專業,培養數據分析方面的人才。
  • 【大數據嗶嗶集20210117】Spark面試題靈魂40問
    ; 5)checkpoint和persist,數據計算之後持久化緩存; 6)數據調度彈性,DAG TASK調度和資源無關; 1)不支持細粒度的寫和更新操作(如網絡爬蟲),spark寫數據是粗粒度的。根據你選擇的不同的持久化策略,如果內存不夠時,可能數據就不會持久化,或者數據會寫入磁碟;2)如果持久化操作比較多,可以提高spark.storage.memoryFraction參數,使得更多的持久化數據保存在內存中,提高數據的讀取性能,如果shuffle的操作比較多,有很多的數據讀寫操作到JVM中,那麼應該調小一點,節約出更多的內存給JVM,避免過多的JVM gc發生。
  • 程式設計師必備的app推薦:提升技術,面試,記錄總結的平臺
    發現有趣app,專注分享高質量、有趣、有用的APP。
  • iOS 面試之道:117 道 iOS 面試題全解析
    因為這一系列的因素,促使我有強烈願望改變技術書出版流程和售賣方式,大致七八個月前道長和巧哥跟我聊到計劃從面試的角度寫一本系統的 iOS 技術書籍時候,我們一拍即合,有了今天的這次合作。好了,接下來該認真聊下今天的主角《iOS 面試之道》了。
  • 2018年新版H5+全棧學習路線圖(內含大綱+視頻+工具+書籍+面試)
    」公眾號回復「H5」免費領取相關資源css3京東第二階段:Web核心編程PHP基礎關注「黑馬程式設計師」公眾號回復「H5」免費領取相關資源MySQL資料庫實戰核心編程Smarty模板引擎MVC第五階段:移動端App開發H5C3移動端項目實戰關注「黑馬程式設計師」公眾號回復「H5」免費領取相關資源Canvas繪圖移動Web開發項目:移動端商城系統實戰第六階段:NodeJS全棧開發前端模塊化待更新...
  • 2018年最新Python學習路線圖(內含大綱+視頻+工具+書籍+面試)
    黑馬程式設計師上海中心-Python 培訓後職業發展路徑黑馬程式設計師上海中心-Python 學習路線圖黑馬程式設計師上海中心-Python 各階段獲得技能說明二、Python學習路線圖—視頻篇:》    該免費視頻對應全部知識點7、第七階段-數據挖掘與數據分析本階段Python課程共計6大知識點,2個免費視頻涵蓋學習目標:能夠熟練使用Python技術完成針對小問題的程序編寫以及小遊戲程序的開發。
  • 《Python程式設計師面試算法寶典》PDF超清版開源了文末附下載方式
    《Python程式設計師面試寶典》是一本介紹Python程式設計師面試的圖書寶典。這裡,不僅介紹了程式設計師算法面試中的「萬能公式」,而且通過具體的實例從多角度剖析各類算法面試題,為讀者建立了一個完整的算法面試的方案資料庫,讓讀者快速理解全書內容、做到胸有成竹應對面試的同時,也為未來的職業發展鋪平道路。
  • 好程式設計師Python教程分享常見的Python面試題
    好程式設計師Python教程分享常見的Python面試題,程式設計師面試難免會需要進行筆試,筆試是考驗程式設計師基礎功底的重要環節,根據很多小夥伴的面試反饋,今天總結分享了一些常見的Python面試題,想要看Python面試是不是可以順利通過,這些常見的Python面試題你應該看看。
  • 面試經驗分享之數據結構、算法題
    刷了好幾遍,不過一些轉發評論者覺得, IT 公司面試中的算法考察沒有價值,一來工作裡用不太上,二來把程式設計師素質考察搞成了應試教育,他們認為更重要的是應聘者的工程能力。若干年前, Google、微軟的面試題讓大家眼前一亮,覺得能選拔出個性十足的聰明人來,不過隨著大家對這類題目的適應,可能選拔出來的人也在趨同,至少很多人都會 在面試前用心準備,據報導 Google 最近也是放棄了這類面試題目。沒有什麼一勞永逸、一成不變的考查方式,畢竟面試是人和人之間的動態「較量」。不要貪戀算法的奇技淫巧,也不要因為題目篩選力度的衰減而否定考察初衷。
  • 來看看一個大二學生的Spark練習題
    今天查資料的時候看到一個朋友的博客寫的很好,加了好友,對方表示大二的學生,寫的Spark的練習題非常接地氣並且很適合練手,大家可以看看。
  • 學了1年java的程式設計師面試,掛在了這道基礎算法題!
    這都是java的算法題,應該來講都是些比較簡單的算法題,但是我敢說很多基礎的學習的,或者想去面試的人都會不能完整的寫出來,現在
  • 長沙黑馬程式設計師的就業輔導老師在疫情期間幹嘛了?
    導師全天線上授課,白天直播間講解,晚上自習室輔導,班主任24小時在線陪伴監督,這是最近半個月黑馬程式設計師所有學員的學習節奏了,也是目前對在校生的一個配置情況,而對於那些已經畢業或是即將畢業的未就業學員,在疫情當前,交通限制,公司延期開工的重重困難下,長沙黑馬又是怎樣安排的呢?
  • 程式設計師面試過關必備的5大網站,你用過幾個?
    在「金三銀四」人才招聘的高峰期,有的程式設計師拿到了心儀的offer。但是,也有部分程式設計師面試掛掉了,暫時還找不到工作。其實,要順利通過面試還是非常有必要去刷一些編程面試題,認識一些面試指南。下面w3cschool給程式設計師小夥伴們推薦5大面試相關的網站,幫助你順利通過各種面試。0、LeetCode有不少的程式設計師都會用LeetCode刷面試題。比如投簡歷期間,為了讓自己編程有狀態,一天有空刷個2-3題。
  • Spark【面試】
    Spark【面試】hadoop和spark的shuffle過程hadoop:map端保存分片數據,通過網絡收集到reduce端 spark:spark的shuffle是在DAGSchedular劃分Stage的時候產生的,TaskSchedule要分發Stage到各個worker的executor減少shuffle