Spark(一)Spark簡介


一、官網介紹

1 什么是Spark

官網地址:http://spark.apache.org/

Apache Spark 是專為大規模數據處理而設計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行計算框架,Spark擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapReduce的算法。

問題
工具只在解決了一些問題時才有用,對吧!那么讓我們來討論一下 Spark 能解決的問題。


我們需要(快速獲取)答案
在批處理過程中,長時間等待運行作業的結果是意料中的事,在如今的企業中,需要快速(“近實時”)獲取答案。大數據的屬性(速度、數據量和種類)使得業務問題越來越難獲得答案,但快速獲取這些答案非常重要。


數據如此之多
數據源數不勝數且仍在增加。從 IoT 設備、實時交易、單擊流、應用到社交媒體等,數據源在不斷增加。所有數據都需要經過一定的處理,這樣分析師才能理解並從中獲取業務價值。現在您需要能處理所有這些數據,以便將它們轉化為某種能使用的信息。能夠以越來越快的速度處理從越來越多來源傳入的海量數據,這一點很重要!


A 與 B(以及 C、D 等等)有何關聯?
您擁有所有這些有用的數據,從客戶交易、社交媒體交互到地理空間數據等等。現在您需要了解所有這些維度如何相互關聯。重要的是能看到對這個數據圖的全面分析結果,從而確定哪些數據維至關重要,哪些毫無價值。


我們需要知道(何時)將會發生什么
您擁有所有這些寶貴的歷史數據。太棒了!現在您需要分析它們,了解發生了什么和發生的原因,以便能預測接下來會發生什么。重要的是能夠分析所有這些數據,以便預測將會發生的業務事件。


Apache Spark 不是什么
我們常常(且很容易)合並解決一組類似問題的兩種或更多相關技術,而且在不能互換使用它們時互換使用了它們。為了避免在 Spark 上犯這種錯誤,讓我們討論一下它不是什么。


Hadoop
Hadoop 是一種大數據文件存儲和數據處理框架,它使用一種稱為 MapReduce 的技術從一個龐大的磁盤集群讀取數據,轉換數據,並將數據寫回磁盤。另一方面,Spark 使用有向非循環圖 (DAG) 通過一系列步驟處理內存中的數據,這些步驟之間相互依賴(Gradle 也使用了一種 DAG),而且不會像 Hadoop(通過 Hadoop 分布式文件系統,HDFS)那樣處理文件存儲本身。


MapReduce
人們很容易將 Spark Core 與 MapReduce 混淆,因為它們在大數據領域都很重要。MapReduce 基本來講是一種單通算法:讀入數據,MapReduce 轉換它,然后將數據寫回到磁盤。如果需要另一次轉換,則會重復這些步驟。另一方面,Spark 在內存中執行所有處理工作(如有必要,還會執行多次迭代),並使用 DAG 確定要執行步驟的最佳順序。


與 Hadoop 相互排斥
Spark 被設計為與 Hadoop 兼容,所以 Hadoop 和 Spark 可以緊密協作。事實上,Spark 下載包含用於使用 HDFS(用於存儲管理)和 YARN(用於資源管理和調度)的 Hadoop 客戶端庫。


解決方案
在一開始的時候,我就介紹了 Spark 能解決的一些問題。現在我將展示 Spark 如何解決這些問題。


我們需要(快速獲取)答案
近實時的分析在一段時間內需要高性能。Spark 處理來自內存的數據,所以處理速度很快。Spark 的核心庫支持輕松地編寫優化的代碼來獲得最快的結果。最多比 MapReduce 快 100 倍!


數據如此之多
或許使用 Spark 的最大好處是它能處理實時流數據。來自交易場所、社交媒體單擊流和 IoT 設備的數據必須在傳輸到磁盤之前快速轉換。使用 Hadoop HDFS 時,需要將數據寫入磁盤,然后讀回進行 Map/Reduce 轉換處理,接着再寫回磁盤,然后才能交到分析師手中。
Spark Streaming 允許在內存中處理傳入的數據,然后寫入磁盤供以后擴充(如有必要)和進一步分析。


A 與 B(以及 C、D 等等)有何關聯?
來自多個來源的數據(比如交易數據、社交媒體數據、單擊流等)擁有隱藏的關聯,梳理這些關聯有助於發現數據中的新見解和洞察 - 它們從表面上看似乎處於完全不同的維度,但實際上卻緊密關聯。但要以有意義的方式實現此目的,需要靈活地轉換數據(速度快沒有壞處,對吧?),以便找到正確的方向。
Spark GraphX 結合了二者的優勢:多個算法的靈活性,以及以各種不同方式轉換和合並數據的速度。


我們需要知道(何時)將會發生什么
在預測未來時,擁有一批歷史數據是一筆非常寶貴的資產。但預測分析需要嚴謹的軟件(當然還有硬件)。
Spark 的 MLib 具有很高的性能(驚訝吧?)機器學習 (ML) 庫采用了大量經過實踐檢驗的算法(比如分類、回歸和聚類)、特制技術(比如轉換和降維)和實用工具(比如線性代數和統計學)。

2 Spark與MapReduce的區別

都是分布式計算框架,Spark基於內存,MR基於HDFS。Spark處理數據的能力一般是MR的十倍以上,Spark中除了基於內存計算外,還有DAG有向無環圖來切分任務的執行先后順序。

二、Spark的四大特性

1、高效性

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

2、易用性

Spark支持Java、Scala,Python和R的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集群的工具。

 

三、Spark的技術棧

SparkCore:將分布式數據抽象為彈性分布式數據集(RDD),實現了應用任務調度、RPC、序列化和壓縮,並為運行在其上的上層組件提供API。

SparkSQL:Spark Sql 是Spark來操作結構化數據的模塊,可以使用SQL語句的方式來查詢數據,Spark支持多種數據源,如HDFS,FLume,Kafka等。

SparkStreaming: 是Spark提供的實時數據進行流式計算的組件。

MLlib:提供常用機器學習算法的實現庫。

GraphX:提供一個分布式圖計算框架,能高效進行圖計算。

BlinkDB:用於在海量數據上進行交互式SQL的近似查詢引擎。

Tachyon:以內存為中心高容錯的的分布式文件系統。

 

四、Spark的運行模式

運行環境 模式 描述
Local 本地模式 常用於本地開發測試,如在eclipse,idea中寫程序測試等。本地還分為local單線程和local-cluster多線程
Standalone 集群模式 Spark自帶的一個資源調度框架,支持完全分布式。存在的Master單點故障可由ZooKeeper來實現HA
Yarn 集群模式 運行在yarn資源管理器框架之上,由yarn負責資源管理,Spark負責任務調度和計算
Mesos 集群模式 運行在mesos資源管理器框架之上,由mesos負責資源管理,Spark負責任務調度和計算
Kubernetes 集群模式 運行在Kubernetes資源管理的集群上,目前Kubernetes調度程序是實驗性的

 

五、Spark的常用術語

術語 描述
 Application        Spark的應用程序,包含一個Driver program和若干Executor
 SparkContext    Spark應用程序的入口,負責調度各個運算資源,協調各個Worker Node上的Executor
 Driver Program 運行Application的main()函數並且創建SparkContext
 Executor

是為Application運行在Worker node上的一個進程,該進程負責運行Task,並且負責將數據存在內存或者磁盤上。

每個Application都會申請各自的Executor來處理任務

 ClusterManager

在集群上獲取資源的外部服務(例如:Standalone、Mesos、Yarn)
 Worker Node 集群中任何可以運行Application代碼的節點,運行一個或多個Executor進程
 Task 運行在Executor上的工作單元
 Job SparkContext提交的具體Action操作,常和Action對應
 Stage 每個Job會被拆分很多組task,每組任務被稱為Stage,也稱TaskSet
 RDD 是Resilient distributed datasets的簡稱,中文為彈性分布式數據集;是Spark最核心的模塊和類
 DAGScheduler 根據Job構建基於Stage的DAG,並提交Stage給TaskScheduler
 TaskScheduler 將Taskset提交給Worker node集群運行並返回結果
 Transformations

是Spark API的一種類型,Transformation返回值還是一個RDD, 所有的Transformation采用的都是懶策略,

如果只是將Transformation提交是不會執行計算的

 Action 是Spark API的一種類型,Action返回值不是一個RDD,而是一個scala集合;計算只有在Action被提交的時候計算才 被觸發。


免責聲明!

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



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