【面试妥了】史上最全Spark面试题
生活随笔
收集整理的這篇文章主要介紹了
【面试妥了】史上最全Spark面试题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
戳藍字“CSDN云計算”關注我們哦!作者 |?游騎小兵責編 | 阿禿Spark問題精華
Q:什么是Spark?A:簡單理解,Spark是在Hadoop基礎上的改進,是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的并行計算框架,Spark基于map reduce算法實現的分布式計算,擁有Hadoop MapReduce所具有的優點;但不同于MapReduce的是Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的map reduce的算法。Q:為什么要學Spark?A:基于MapReduce的計算引擎通常會將中間結果輸出到磁盤上,進行存儲和容錯。出于任務管道承接的考慮,當一些查詢翻譯到MapReduce任務時,往往會產生多個Stage,而這些串聯的Stage又依賴于底層文件系統(如HDFS)來存儲每一個Stage的輸出結果。Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生態系統,以彌補MapReduce的不足。Q:Spark有什么特性?A:1、高效性運行速度提高100倍。Apache Spark使用最先進的DAG調度程序,查詢優化程序和物理執行引擎,實現批量和流式數據的高性能。2、易用性Spark支持Java、Python和Scala的API,還支持超過80種高級算法,使用戶可以快速構建不同的應用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在這些shell中使用Spark集群來驗證解決問題的方法。3、通用性Spark提供了統一的解決方案。Spark可以用于批處理、交互式查詢(Spark SQL)、實時流處理(Spark Streaming)、機器學習(Spark MLlib)和圖計算(GraphX)。這些不同類型的處理都可以在同一個應用中無縫使用。Spark統一的解決方案非常具有吸引力,畢竟任何公司都想用統一的平臺去處理遇到的問題,減少開發和維護的人力成本和部署平臺的物力成本。4、兼容性Spark可以非常方便地與其他的開源產品進行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作為它的資源管理和調度器,器,并且可以處理所有Hadoop支持的數據,包括HDFS、HBase和Cassandra等。這對于已經部署Hadoop集群的用戶特別重要,因為不需要做任何數據遷移就可以使用Spark的強大處理能力。Spark也可以不依賴于第三方的資源管理和調度器,它實現了Standalone作為其內置的資源管理和調度框架,這樣進一步降低了Spark的使用門檻,使得所有人都可以非常容易地部署和使用Spark。此外,Spark還提供了在EC2上部署Standalone的Spark集群的工具。
Q:Spark生態圈介紹A:Spark力圖整合機器學習(MLib)、圖算法(GraphX)、流式計算(Spark Streaming)和數據倉庫(Spark SQL)等領域,通過計算引擎Spark,彈性分布式數據集(RDD),架構出一個新的大數據應用平臺。Spark生態圈以HDFS、S3、Techyon為底層存儲引擎,以Yarn、Mesos和Standlone作為資源調度引擎;使用Spark,可以實現MapReduce應用;基于Spark,Spark SQL可以實現即席查詢,Spark Streaming可以處理實時應用,MLib可以實現機器學習算法,GraphX可以實現圖計算,SparkR可以實現復雜數學計算。Q:Spark與Hadoop的對比A:Spark的中間數據放到內存中,對于迭代運算效率更高。Spark更適合于迭代運算比較多的ML和DM運算。因為在Spark里面,有RDD的抽象概念。所以,Spark比Hadoop更通用。Q:spark的組成有哪些?A:Spark組成(BDAS):全稱伯克利數據分析棧,通過大規模集成算法、機器、人之間展現大數據應用的一個平臺。也是處理大數據、云計算、通信的技術解決方案。
它的主要組件有:SparkCore:將分布式數據抽象為彈性分布式數據集(RDD),實現了應用任務調度、RPC、序列化和壓縮,并為運行在其上的上層組件提供API。SparkSQL:Spark Sql 是Spark來操作結構化數據的程序包,可以讓我使用SQL語句的方式來查詢數據,Spark支持 多種數據源,包含Hive表,parquest以及JSON等內容。SparkStreaming:是Spark提供的實時數據進行流式計算的組件。MLlib:提供常用機器學習算法的實現庫。GraphX:提供一個分布式圖計算框架,能高效進行圖計算。BlinkDB:用于在海量數據上進行交互式SQL的近似查詢引擎。Tachyon:以內存為中心高容錯的的分布式文件系統。Q:Spark的工作流程是什么樣的呢?A:通俗的解釋就是:Spark是為了處理數據而生的平臺,用一個比喻來形容它是餐館。餐館搭建好了后,就會有顧客,顧客的各種需求都得有人去處理,那么這時的Master就像是服務員,負責了解顧客的要求并把需求按照一定規律分配給廚師(Worker),這個顧客的需求就是一個APP,但這個APP不止包括了一個菜(job),整個訂單里有很多個job,每個job都得由這些廚師處理,廚師的手就像是具體處理的Executor,負責所有的包括shuffle啊,filter啊,map啊,reduce等等具體的對原材料(RDD)的處理。driver就像是懶惰的廚師長,worker向它申請資源,同時它負責接收下面的人處理好的半成品材料或者完成品的菜品,但它自己并不干具體的活,如果是別人處理好的半成品,driver就將它分配給它認為有空的人接著處理(可能是map后要reduce的東西),直到目前的stage結束得到具體想要的結果,如果是直接就是想要的數據形式(一個job的完成),那么driver就通知master收貨并反饋給顧客(可能是python程序,scala程序等等)。Q:Apache Spark和Apache Storm之間有什么差異,用戶應該根據什么來加以選擇?
A:Apache Spark是一個內存中的分布式數據分析平臺- 主要針對加快批量分析工作,反復機器學習的工作,交互式查詢和圖形處理。一個最主要區別是Spark使用彈性分布式數據集(RDD)。RDD是通過并行運算符來進行計算,并根據定義它是一成不變的。RDD允許Spark基于譜系信息容錯的獨特的形式。如果你對執行Hadoop MapReduce作業更快,那么Spark是一個很好的選擇(即使在這里需要考慮內存的因素)。Apache Storm是專注于流處理或者一些所謂復雜事件的處理。Storm實現容錯的方法進行計算或者以流水線的方式多次計算一個事件,由于Storm進入一個需要特定格式的系統,那么可能導致它轉換為一個非結構化的數據。Storm和Spark存在相當不同的使用情況。Storm和Spark流更多是類似“蘋果和蘋果”比較。由于Spark的SSD本身是不可變的,Spark流實現在用戶定義的時間間隔“定量”來實現更新,得到改造成自己的RDD的方法,從而Spark的并行操作人員可以對這些RDD進行計算。這是與Storm處理每個事的不同之處。這兩種技術之間的一個主要區別是,Spark進行數據的并行計算,而Storm則是任務的并行計算。無論是那種方法,都有它表現價值的一方面。Q:RDD的核心概念是什么?A: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。Q:RDD有哪些常見術語?A: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被提交時才會被觸發。
Q:RDD提供了哪些操作?A:RDD提供了兩種類型的操作:transformation和action1. transformation是得到一個新的RDD,方式很多,比如從數據源生成一個新的RDD,從RDD生成一個新的RDD2. action是得到一個值,或者一個結果(直接將RDD cache到內存中)3. 所有的transformation都是采用的懶策略,就是如果只是將transformation提交是不會執行計算的,計算只有在action被提交的時候才被觸發。DataFrame:帶有Schema信息的RDD,主要是對結構化數據的高度抽象。DataSet:結合了DataFrame和RDD兩者的優勢,既允許用戶很方便的操作領域對象,又具有SQL執行引擎的高效表現。Q:RDD中關于轉換(transformation)與動作(action)有什么區別?A:transformation會生成新的RDD,而后者只是將RDD上某項操作的結果返回給程序,而不會生成新的RDD;無論執行了多少次transformation操作,RDD都不會真正執行運算(記錄lineage),只有當action操作被執行時,運算才會觸發。
Q:RDD 與 DSM的最大不同是什么?A:RDD只能通過粗粒度轉換來創建,而DSM則允許對每個內存位置上數據的讀和寫。在這種定義下,DSM不僅包括了傳統的共享內存系統,也包括了像提供了共享 DHT(distributed hash table) 的 Piccolo 以及分布式數據庫等。
福利掃描添加小編微信,備注“姓名+公司職位”,入駐【CSDN博客】,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
推薦閱讀:
Q:什么是Spark?A:簡單理解,Spark是在Hadoop基礎上的改進,是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的并行計算框架,Spark基于map reduce算法實現的分布式計算,擁有Hadoop MapReduce所具有的優點;但不同于MapReduce的是Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的map reduce的算法。Q:為什么要學Spark?A:基于MapReduce的計算引擎通常會將中間結果輸出到磁盤上,進行存儲和容錯。出于任務管道承接的考慮,當一些查詢翻譯到MapReduce任務時,往往會產生多個Stage,而這些串聯的Stage又依賴于底層文件系統(如HDFS)來存儲每一個Stage的輸出結果。Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生態系統,以彌補MapReduce的不足。Q:Spark有什么特性?A:1、高效性運行速度提高100倍。Apache Spark使用最先進的DAG調度程序,查詢優化程序和物理執行引擎,實現批量和流式數據的高性能。2、易用性Spark支持Java、Python和Scala的API,還支持超過80種高級算法,使用戶可以快速構建不同的應用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在這些shell中使用Spark集群來驗證解決問題的方法。3、通用性Spark提供了統一的解決方案。Spark可以用于批處理、交互式查詢(Spark SQL)、實時流處理(Spark Streaming)、機器學習(Spark MLlib)和圖計算(GraphX)。這些不同類型的處理都可以在同一個應用中無縫使用。Spark統一的解決方案非常具有吸引力,畢竟任何公司都想用統一的平臺去處理遇到的問題,減少開發和維護的人力成本和部署平臺的物力成本。4、兼容性Spark可以非常方便地與其他的開源產品進行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作為它的資源管理和調度器,器,并且可以處理所有Hadoop支持的數據,包括HDFS、HBase和Cassandra等。這對于已經部署Hadoop集群的用戶特別重要,因為不需要做任何數據遷移就可以使用Spark的強大處理能力。Spark也可以不依賴于第三方的資源管理和調度器,它實現了Standalone作為其內置的資源管理和調度框架,這樣進一步降低了Spark的使用門檻,使得所有人都可以非常容易地部署和使用Spark。此外,Spark還提供了在EC2上部署Standalone的Spark集群的工具。
Q:Spark生態圈介紹A:Spark力圖整合機器學習(MLib)、圖算法(GraphX)、流式計算(Spark Streaming)和數據倉庫(Spark SQL)等領域,通過計算引擎Spark,彈性分布式數據集(RDD),架構出一個新的大數據應用平臺。Spark生態圈以HDFS、S3、Techyon為底層存儲引擎,以Yarn、Mesos和Standlone作為資源調度引擎;使用Spark,可以實現MapReduce應用;基于Spark,Spark SQL可以實現即席查詢,Spark Streaming可以處理實時應用,MLib可以實現機器學習算法,GraphX可以實現圖計算,SparkR可以實現復雜數學計算。Q:Spark與Hadoop的對比A:Spark的中間數據放到內存中,對于迭代運算效率更高。Spark更適合于迭代運算比較多的ML和DM運算。因為在Spark里面,有RDD的抽象概念。所以,Spark比Hadoop更通用。Q:spark的組成有哪些?A:Spark組成(BDAS):全稱伯克利數據分析棧,通過大規模集成算法、機器、人之間展現大數據應用的一個平臺。也是處理大數據、云計算、通信的技術解決方案。
它的主要組件有:SparkCore:將分布式數據抽象為彈性分布式數據集(RDD),實現了應用任務調度、RPC、序列化和壓縮,并為運行在其上的上層組件提供API。SparkSQL:Spark Sql 是Spark來操作結構化數據的程序包,可以讓我使用SQL語句的方式來查詢數據,Spark支持 多種數據源,包含Hive表,parquest以及JSON等內容。SparkStreaming:是Spark提供的實時數據進行流式計算的組件。MLlib:提供常用機器學習算法的實現庫。GraphX:提供一個分布式圖計算框架,能高效進行圖計算。BlinkDB:用于在海量數據上進行交互式SQL的近似查詢引擎。Tachyon:以內存為中心高容錯的的分布式文件系統。Q:Spark的工作流程是什么樣的呢?A:通俗的解釋就是:Spark是為了處理數據而生的平臺,用一個比喻來形容它是餐館。餐館搭建好了后,就會有顧客,顧客的各種需求都得有人去處理,那么這時的Master就像是服務員,負責了解顧客的要求并把需求按照一定規律分配給廚師(Worker),這個顧客的需求就是一個APP,但這個APP不止包括了一個菜(job),整個訂單里有很多個job,每個job都得由這些廚師處理,廚師的手就像是具體處理的Executor,負責所有的包括shuffle啊,filter啊,map啊,reduce等等具體的對原材料(RDD)的處理。driver就像是懶惰的廚師長,worker向它申請資源,同時它負責接收下面的人處理好的半成品材料或者完成品的菜品,但它自己并不干具體的活,如果是別人處理好的半成品,driver就將它分配給它認為有空的人接著處理(可能是map后要reduce的東西),直到目前的stage結束得到具體想要的結果,如果是直接就是想要的數據形式(一個job的完成),那么driver就通知master收貨并反饋給顧客(可能是python程序,scala程序等等)。Q:Apache Spark和Apache Storm之間有什么差異,用戶應該根據什么來加以選擇?
A:Apache Spark是一個內存中的分布式數據分析平臺- 主要針對加快批量分析工作,反復機器學習的工作,交互式查詢和圖形處理。一個最主要區別是Spark使用彈性分布式數據集(RDD)。RDD是通過并行運算符來進行計算,并根據定義它是一成不變的。RDD允許Spark基于譜系信息容錯的獨特的形式。如果你對執行Hadoop MapReduce作業更快,那么Spark是一個很好的選擇(即使在這里需要考慮內存的因素)。Apache Storm是專注于流處理或者一些所謂復雜事件的處理。Storm實現容錯的方法進行計算或者以流水線的方式多次計算一個事件,由于Storm進入一個需要特定格式的系統,那么可能導致它轉換為一個非結構化的數據。Storm和Spark存在相當不同的使用情況。Storm和Spark流更多是類似“蘋果和蘋果”比較。由于Spark的SSD本身是不可變的,Spark流實現在用戶定義的時間間隔“定量”來實現更新,得到改造成自己的RDD的方法,從而Spark的并行操作人員可以對這些RDD進行計算。這是與Storm處理每個事的不同之處。這兩種技術之間的一個主要區別是,Spark進行數據的并行計算,而Storm則是任務的并行計算。無論是那種方法,都有它表現價值的一方面。Q:RDD的核心概念是什么?A: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。Q:RDD有哪些常見術語?A: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被提交時才會被觸發。
Q:RDD提供了哪些操作?A:RDD提供了兩種類型的操作:transformation和action1. transformation是得到一個新的RDD,方式很多,比如從數據源生成一個新的RDD,從RDD生成一個新的RDD2. action是得到一個值,或者一個結果(直接將RDD cache到內存中)3. 所有的transformation都是采用的懶策略,就是如果只是將transformation提交是不會執行計算的,計算只有在action被提交的時候才被觸發。DataFrame:帶有Schema信息的RDD,主要是對結構化數據的高度抽象。DataSet:結合了DataFrame和RDD兩者的優勢,既允許用戶很方便的操作領域對象,又具有SQL執行引擎的高效表現。Q:RDD中關于轉換(transformation)與動作(action)有什么區別?A:transformation會生成新的RDD,而后者只是將RDD上某項操作的結果返回給程序,而不會生成新的RDD;無論執行了多少次transformation操作,RDD都不會真正執行運算(記錄lineage),只有當action操作被執行時,運算才會觸發。
Q:RDD 與 DSM的最大不同是什么?A:RDD只能通過粗粒度轉換來創建,而DSM則允許對每個內存位置上數據的讀和寫。在這種定義下,DSM不僅包括了傳統的共享內存系統,也包括了像提供了共享 DHT(distributed hash table) 的 Piccolo 以及分布式數據庫等。
福利掃描添加小編微信,備注“姓名+公司職位”,入駐【CSDN博客】,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
推薦閱讀:
- 漫畫:什么是希爾排序?
- 一次失敗的面試,復習一次一致性哈希算法
Pandas中第二好用的函數 | 優雅的Apply
- 程序員因接外包坐牢 456 天!兩萬字揭露心酸經歷
限時早鳥票 | 2019 中國大數據技術大會(BDTC)超豪華盛宴搶先看
阿里開源物聯網操作系統 AliOS Things 3.0 發布,集成平頭哥 AI 芯片架構!
- 雷聲大雨點小:Bakkt「見光死」了嗎?
總結
以上是生活随笔為你收集整理的【面试妥了】史上最全Spark面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 临时军人保障卡怎么办理
- 下一篇: Boost:演示了black-schol