spark(1) spark是什么、spark四大特性、spark集群架構


spark是什么

"Apache Spark" is a unified analytics engine for large-scale data processing.

spark是針對於大規模數據處理的統一分析引擎

spark是在Hadoop基礎上的改進,是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的並行計算框架,Spark基於map reduce算法實現的分布式計算,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的map reduce的算法。

spark是基於內存計算框架,計算速度非常之快,但是它僅僅只是涉及到計算,並沒有涉及到數據的存儲,后期需要使用spark對接外部的數據源,比如hdfs。

注意:spark只做計算不做存儲

spark的四大特性

查看官網可以了解spark的四大特性,spark官網地址:http://spark.apache.org/

速度快

spark運行速度相對於hadoop提高100倍,見下圖:

Apache Spark使用最先進的DAG調度程序,查詢優化程序和物理執行引擎,實現批量和流式數據的高性能。

image-20200414153227594

spark比MR快的2個主要原因(面試題)

1、基於內存

mapreduce任務后期再計算的時候,每一個job的輸出結果會落地到磁盤,后續有其他的job需要依賴於前面job的輸出結果,這個時候就需要進行大量的磁盤io操作。性能就比較低。

spark任務后期再計算的時候,job的輸出結果可以保存在內存中,后續有其他的job需要依賴於前面job的輸出結果,這個時候就直接從內存中獲取得到,避免了磁盤io操作,性能比較高

對於spark程序和mapreduce程序都會產生shuffle階段,在shuffle階段中它們產生的數據都會落地到磁盤。

2、進程與線程

mapreduce任務以進程的方式運行在yarn集群中,比如程序中有100個MapTask,一個task就需要一個進程,這些task要運行就需要開啟100個進程。

spark任務以線程的方式運行在進程中,比如程序中有100個MapTask,后期一個task就對應一個線程,這里就不再是進程,這些task需要運行,這里可以極端一點:只需要開啟1個進程,在這個進程中啟動100個線程就可以了。

進程中可以啟動很多個線程,而開啟一個進程與開啟一個線程需要的時間和調度代價是不一樣。 開啟一個進程需要的時間遠遠大於開啟一個線程。

易用性

可以通過 java/scala/python/R/SQL等不同語言快速去編寫spark程序

image-20200414153247802

通用性

spark框架不在是一個簡單的框架,可以把spark理解成一個spark生態系統,它內部是包含了很多模塊,基於不同的應用場景可以選擇對應的模塊去使用,見下圖:

  1. sparksql:通過sql去開發spark程序做一些離線分析
  2. sparkStreaming:主要是用來解決公司有實時計算的這種場景
  3. Mlib:它封裝了一些機器學習的算法庫
  4. Graphx:圖計算

image-20200414153311063

兼容性

spark程序就是一個計算邏輯程序,這個任務要運行就需要計算資源(內存、cpu、磁盤),哪里可以給當前這個任務提供計算資源,就可以把spark程序提交到哪里去運行。

目前主要的運行方式是下面的standAlone和yarn

standAlone:它是spark自帶的獨立運行模式,整個任務的資源分配由spark集群的老大Master負責

yarn:可以把spark程序提交到yarn中運行,整個任務的資源分配由yarn中的老大ResourceManager負責

mesos:它也是apache開源的一個類似於yarn的資源調度平台

image-20200414153331693

spark集群架構(重要)

spark

  • Driver:執行客戶端寫好的main方法,它會構建一個名叫SparkContext對象,該對象是所有spark程序的執行入口
  • Application:就是一個spark的應用程序,它是包含了客戶端的代碼和任務運行的資源信息
  • ClusterManager:給程序提供計算資源的外部服務,在不同的運行平台,ClusterManager也不同,主要有以下3種:
    • standAlone:它是spark自帶的集群模式,整個任務的資源分配由spark集群的老大Master負責
    • yarn:可以把spark程序提交到yarn中運行,整個任務的資源分配由yarn中的老大ResourceManager負責
    • mesos:它也是apache開源的一個類似於yarn的資源調度平台。
  • Master:它是整個spark集群的主節點,負責任務資源的分配
  • Worker:它是整個spark集群的從節點,負責任務計算的節點
  • Executor:它是一個進程,它會在worker節點啟動該進程(計算資源),一個worker節點可以有多個Executor進程
  • Task:spark任務是以task線程的方式運行在worker節點對應的executor進程中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM