【大数据】Spark面试100问 | CSDN博文精选
戳藍(lán)字“CSDN云計(jì)算”關(guān)注我們哦!
作者 |??游騎小兵責(zé)編 | 阿禿
Q:什么是Spark?
A:簡單理解,Spark是在Hadoop基礎(chǔ)上的改進(jìn),是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的并行計(jì)算框架,Spark基于map reduce算法實(shí)現(xiàn)的分布式計(jì)算,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出和結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的map reduce的算法。
Q:為什么要學(xué)Spark?
A:基于MapReduce的計(jì)算引擎通常會(huì)將中間結(jié)果輸出到磁盤上,進(jìn)行存儲(chǔ)和容錯(cuò)。出于任務(wù)管道承接的考慮,當(dāng)一些查詢翻譯到MapReduce任務(wù)時(shí),往往會(huì)產(chǎn)生多個(gè)Stage,而這些串聯(lián)的Stage又依賴于底層文件系統(tǒng)(如HDFS)來存儲(chǔ)每一個(gè)Stage的輸出結(jié)果。
Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生態(tài)系統(tǒng),以彌補(bǔ)MapReduce的不足。
Q:Spark有什么特性?
A:1、高效性
運(yùn)行速度提高100倍。Apache Spark使用最先進(jìn)的DAG調(diào)度程序,查詢優(yōu)化程序和物理執(zhí)行引擎,實(shí)現(xiàn)批量和流式數(shù)據(jù)的高性能。
2、易用性
Spark支持Java、Python和Scala的API,還支持超過80種高級(jí)算法,使用戶可以快速構(gòu)建不同的應(yīng)用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在這些shell中使用Spark集群來驗(yàn)證解決問題的方法。
3、通用性
Spark提供了統(tǒng)一的解決方案。Spark可以用于批處理、交互式查詢(Spark SQL)、實(shí)時(shí)流處理(Spark Streaming)、機(jī)器學(xué)習(xí)(Spark MLlib)和圖計(jì)算(GraphX)。這些不同類型的處理都可以在同一個(gè)應(yīng)用中無縫使用。Spark統(tǒng)一的解決方案非常具有吸引力,畢竟任何公司都想用統(tǒng)一的平臺(tái)去處理遇到的問題,減少開發(fā)和維護(hù)的人力成本和部署平臺(tái)的物力成本。
4、兼容性
Spark可以非常方便地與其他的開源產(chǎn)品進(jìn)行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作為它的資源管理和調(diào)度器,器,并且可以處理所有Hadoop支持的數(shù)據(jù),包括HDFS、HBase和Cassandra等。這對(duì)于已經(jīng)部署Hadoop集群的用戶特別重要,因?yàn)椴恍枰鋈魏螖?shù)據(jù)遷移就可以使用Spark的強(qiáng)大處理能力。Spark也可以不依賴于第三方的資源管理和調(diào)度器,它實(shí)現(xiàn)了Standalone作為其內(nèi)置的資源管理和調(diào)度框架,這樣進(jìn)一步降低了Spark的使用門檻,使得所有人都可以非常容易地部署和使用Spark。此外,Spark還提供了在EC2上部署Standalone的Spark集群的工具。
Q:Spark生態(tài)圈介紹
A:Spark力圖整合機(jī)器學(xué)習(xí)(MLib)、圖算法(GraphX)、流式計(jì)算(Spark Streaming)和數(shù)據(jù)倉庫(Spark SQL)等領(lǐng)域,通過計(jì)算引擎Spark,彈性分布式數(shù)據(jù)集(RDD),架構(gòu)出一個(gè)新的大數(shù)據(jù)應(yīng)用平臺(tái)。
Spark生態(tài)圈以HDFS、S3、Techyon為底層存儲(chǔ)引擎,以Yarn、Mesos和Standlone作為資源調(diào)度引擎;使用Spark,可以實(shí)現(xiàn)MapReduce應(yīng)用;基于Spark,Spark SQL可以實(shí)現(xiàn)即席查詢,Spark Streaming可以處理實(shí)時(shí)應(yīng)用,MLib可以實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法,GraphX可以實(shí)現(xiàn)圖計(jì)算,SparkR可以實(shí)現(xiàn)復(fù)雜數(shù)學(xué)計(jì)算。
Q:Spark與Hadoop的對(duì)比
A:Spark的中間數(shù)據(jù)放到內(nèi)存中,對(duì)于迭代運(yùn)算效率更高。Spark更適合于迭代運(yùn)算比較多的ML和DM運(yùn)算。因?yàn)樵赟park里面,有RDD的抽象概念。所以,Spark比Hadoop更通用。
Q:spark的組成有哪些?
A:Spark組成(BDAS):全稱伯克利數(shù)據(jù)分析棧,通過大規(guī)模集成算法、機(jī)器、人之間展現(xiàn)大數(shù)據(jù)應(yīng)用的一個(gè)平臺(tái)。也是處理大數(shù)據(jù)、云計(jì)算、通信的技術(shù)解決方案。
它的主要組件有:
SparkCore:將分布式數(shù)據(jù)抽象為彈性分布式數(shù)據(jù)集(RDD),實(shí)現(xiàn)了應(yīng)用任務(wù)調(diào)度、RPC、序列化和壓縮,并為運(yùn)行在其上的上層組件提供API。
SparkSQL:Spark Sql 是Spark來操作結(jié)構(gòu)化數(shù)據(jù)的程序包,可以讓我使用SQL語句的方式來查詢數(shù)據(jù),Spark支持 多種數(shù)據(jù)源,包含Hive表,parquest以及JSON等內(nèi)容。
SparkStreaming:是Spark提供的實(shí)時(shí)數(shù)據(jù)進(jìn)行流式計(jì)算的組件。
MLlib:提供常用機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn)庫。
GraphX:提供一個(gè)分布式圖計(jì)算框架,能高效進(jìn)行圖計(jì)算。
BlinkDB:用于在海量數(shù)據(jù)上進(jìn)行交互式SQL的近似查詢引擎。
Tachyon:以內(nèi)存為中心高容錯(cuò)的的分布式文件系統(tǒng)。
Q:Spark的工作流程是什么樣的呢?
A:通俗的解釋就是:Spark是為了處理數(shù)據(jù)而生的平臺(tái),用一個(gè)比喻來形容它是餐館。餐館搭建好了后,就會(huì)有顧客,顧客的各種需求都得有人去處理,那么這時(shí)的Master就像是服務(wù)員,負(fù)責(zé)了解顧客的要求并把需求按照一定規(guī)律分配給廚師(Worker),這個(gè)顧客的需求就是一個(gè)APP,但這個(gè)APP不止包括了一個(gè)菜(job),整個(gè)訂單里有很多個(gè)job,每個(gè)job都得由這些廚師處理,廚師的手就像是具體處理的Executor,負(fù)責(zé)所有的包括shuffle啊,filter啊,map啊,reduce等等具體的對(duì)原材料(RDD)的處理。driver就像是懶惰的廚師長,worker向它申請(qǐng)資源,同時(shí)它負(fù)責(zé)接收下面的人處理好的半成品材料或者完成品的菜品,但它自己并不干具體的活,如果是別人處理好的半成品,driver就將它分配給它認(rèn)為有空的人接著處理(可能是map后要reduce的東西),直到目前的stage結(jié)束得到具體想要的結(jié)果,如果是直接就是想要的數(shù)據(jù)形式(一個(gè)job的完成),那么driver就通知master收貨并反饋給顧客(可能是python程序,scala程序等等)。
Q:Apache Spark和Apache Storm之間有什么差異,用戶應(yīng)該根據(jù)什么來加以選擇?
A:Apache Spark是一個(gè)內(nèi)存中的分布式數(shù)據(jù)分析平臺(tái)- 主要針對(duì)加快批量分析工作,反復(fù)機(jī)器學(xué)習(xí)的工作,交互式查詢和圖形處理。一個(gè)最主要區(qū)別是Spark使用彈性分布式數(shù)據(jù)集(RDD)。RDD是通過并行運(yùn)算符來進(jìn)行計(jì)算,并根據(jù)定義它是一成不變的。RDD允許Spark基于譜系信息容錯(cuò)的獨(dú)特的形式。如果你對(duì)執(zhí)行Hadoop MapReduce作業(yè)更快,那么Spark是一個(gè)很好的選擇(即使在這里需要考慮內(nèi)存的因素)。
Apache Storm是專注于流處理或者一些所謂復(fù)雜事件的處理。Storm實(shí)現(xiàn)容錯(cuò)的方法進(jìn)行計(jì)算或者以流水線的方式多次計(jì)算一個(gè)事件,由于Storm進(jìn)入一個(gè)需要特定格式的系統(tǒng),那么可能導(dǎo)致它轉(zhuǎn)換為一個(gè)非結(jié)構(gòu)化的數(shù)據(jù)。
Storm和Spark存在相當(dāng)不同的使用情況。Storm和Spark流更多是類似“蘋果和蘋果”比較。由于Spark的SSD本身是不可變的,Spark流實(shí)現(xiàn)在用戶定義的時(shí)間間隔“定量”來實(shí)現(xiàn)更新,得到改造成自己的RDD的方法,從而Spark的并行操作人員可以對(duì)這些RDD進(jìn)行計(jì)算。這是與Storm處理每個(gè)事的不同之處。
這兩種技術(shù)之間的一個(gè)主要區(qū)別是,Spark進(jìn)行數(shù)據(jù)的并行計(jì)算,而Storm則是任務(wù)的并行計(jì)算。無論是那種方法,都有它表現(xiàn)價(jià)值的一方面。
Q:RDD的核心概念是什么?
A:Client:客戶端進(jìn)程,負(fù)責(zé)提交作業(yè)到Master。
Master:Standalone模式中主控節(jié)點(diǎn),負(fù)責(zé)接收Client提交的作業(yè),管理Worker,并命令Worker啟動(dòng)分配Driver的資源和啟動(dòng)Executor的資源。
Worker:Standalone模式中slave節(jié)點(diǎn)上的守護(hù)進(jìn)程,負(fù)責(zé)管理本節(jié)點(diǎn)的資源,定期向Master匯報(bào)心跳,接收Master的命令,啟動(dòng)Driver和Executor。
Driver:一個(gè)Spark作業(yè)運(yùn)行時(shí)包括一個(gè)Driver進(jìn)程,也是作業(yè)的主進(jìn)程,負(fù)責(zé)作業(yè)的解析、生成Stage并調(diào)度Task到Executor上。包括DAGScheduler,TaskScheduler。
Executor:即真正執(zhí)行作業(yè)的地方,一個(gè)集群一般包含多個(gè)Executor,每個(gè)Executor接收Driver的命令Launch Task,一個(gè)Executor可以執(zhí)行一到多個(gè)Task。
Q:RDD有哪些常見術(shù)語?
A:DAGScheduler:實(shí)現(xiàn)將Spark作業(yè)分解成一到多個(gè)Stage,每個(gè)Stage根據(jù)RDD的Partition個(gè)數(shù)決定Task的個(gè)數(shù),然后生成相應(yīng)的Task set放到TaskScheduler中。
TaskScheduler:實(shí)現(xiàn)Task分配到Executor上執(zhí)行。
Task:運(yùn)行在Executor上的工作單元
Job:SparkContext提交的具體Action操作,常和Action對(duì)應(yīng)
Stage:每個(gè)Job會(huì)被拆分很多組任務(wù)(task),每組任務(wù)被稱為Stage,也稱TaskSet
RDD:Resilient Distributed Datasets的簡稱,彈性分布式數(shù)據(jù)集,是Spark最核心的模塊和類
Transformation/Action:SparkAPI的兩種類型;Transformation返回值還是一個(gè)RDD,Action返回值不少一個(gè)RDD,而是一個(gè)Scala的集合;所有的Transformation都是采用的懶策略,如果只是將Transformation提交是不會(huì)執(zhí)行計(jì)算的,計(jì)算只有在Action被提交時(shí)才會(huì)被觸發(fā)。
Q:RDD提供了哪些操作?
A:RDD提供了兩種類型的操作:
transformation和action
1、transformation是得到一個(gè)新的RDD,方式很多,比如從數(shù)據(jù)源生成一個(gè)新的RDD,從RDD生成一個(gè)新的RDD
2、action是得到一個(gè)值,或者一個(gè)結(jié)果(直接將RDD cache到內(nèi)存中)
3、所有的transformation都是采用的懶策略,就是如果只是將transformation提交是不會(huì)執(zhí)行計(jì)算的,計(jì)算只有在action被提交的時(shí)候才被觸發(fā)。
DataFrame:帶有Schema信息的RDD,主要是對(duì)結(jié)構(gòu)化數(shù)據(jù)的高度抽象。
DataSet:結(jié)合了DataFrame和RDD兩者的優(yōu)勢(shì),既允許用戶很方便的操作領(lǐng)域?qū)ο?#xff0c;又具有SQL執(zhí)行引擎的高效表現(xiàn)。
Q:RDD中關(guān)于轉(zhuǎn)換(transformation)與動(dòng)作(action)有什么區(qū)別?
A:transformation會(huì)生成新的RDD,而后者只是將RDD上某項(xiàng)操作的結(jié)果返回給程序,而不會(huì)生成新的RDD;無論執(zhí)行了多少次transformation操作,RDD都不會(huì)真正執(zhí)行運(yùn)算(記錄lineage),只有當(dāng)action操作被執(zhí)行時(shí),運(yùn)算才會(huì)觸發(fā)。
Q:RDD 與 DSM的最大不同是什么?
A:RDD只能通過粗粒度轉(zhuǎn)換來創(chuàng)建,而DSM則允許對(duì)每個(gè)內(nèi)存位置上數(shù)據(jù)的讀和寫。在這種定義下,DSM不僅包括了傳統(tǒng)的共享內(nèi)存系統(tǒng),也包括了像提供了共享 DHT(distributed hash table) 的 Piccolo 以及分布式數(shù)據(jù)庫等。
掃描下方二維碼,查看原博主精彩分享???
福利掃描添加小編微信,備注“姓名+公司職位”,入駐【CSDN博客】,加入【云計(jì)算學(xué)習(xí)交流群】,和志同道合的朋友們共同打卡學(xué)習(xí)!
推薦閱讀:
- 計(jì)算機(jī)專業(yè)的學(xué)生也太太太太太慘了吧?
- 任正非采訪的數(shù)據(jù)分析解讀
只因?qū)懥艘欢闻老x,公司 200 多人被抓!
- 確認(rèn)!語音識(shí)別大牛Daniel Povey將入職小米,曾遭霍普金斯大學(xué)解雇,怒拒Facebook
三年一跳槽、拒絕“唯學(xué)歷”,火速 Get 這份程序員求生指南!
最新報(bào)告:區(qū)塊鏈應(yīng)用程序交易量下降近40%,博彩類仍為最受歡迎項(xiàng)目……
總結(jié)
以上是生活随笔為你收集整理的【大数据】Spark面试100问 | CSDN博文精选的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.54kg酱油等于多少升?
- 下一篇: Storm精华问答 | Kafka在St