13161216443

您所在位置: 首頁> 學習課程> 大數據培訓入門:什么是Spark?為什么要學Spark?

大數據培訓入門:什么是Spark?為什么要學Spark?

發布百知教育 來源:學習課程 2019-12-05

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和action


1、transformation是得到一個新的RDD,方式很多,比如從數據源生成一個新的RDD,從RDD生成一個新的RDD


2、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 以及分布式數據庫等。


大數據培訓班:http://www.onhairsalon.com/bigdata2019


上一篇:自學Python找不到工作?0基礎小白怎么學Python?

下一篇:應屆生去公司找個Java程序員的職位需要什么技能?

相關推薦

www.onhairsalon.com

有位老師想和您聊一聊

關閉

立即申請