1. 程式人生 > >Spark記錄-spark介紹

Spark記錄-spark介紹

特定 預安裝 單機版 api hdfs 改版 apache軟件 新的 發的

Apache Spark是一個集群計算設計的快速計算。它是建立在Hadoop MapReduce之上,它擴展了 MapReduce 模式,有效地使用更多類型的計算,其中包括交互式查詢和流處理。這是一個簡單的Spark教程,介紹了Spark核心編程的基礎知識。

工業公司廣泛的使用 Hadoop 來分析他們的數據集。其原因是,Hadoop框架是基於簡單的編程模型(MapReduce),並且它使用的計算解決方案,是可擴展的,柔性的,容錯和低成本。 在這裏,主要關心的是在查詢之間等待時間和等待時間來運行程序處理大型數據集的速度。

Spark由Apache軟件基金會對於加快Hadoop計算軟件的過程。

作為對一個共同的信念,Spark不是 Hadoop 的修改版本,不依賴於Hadoop,因為它有自己的集群管理。Hadoop僅僅是實現Spark的方式之一。

Spark使用Hadoop的方式有兩種- 一種是存儲和第二個是處理。由於Spark有自己的集群管理計算,所以一般它使用Hadoop只有存儲的目的。

Apache Spark

Apache Spark是一個快速的集群計算技術,設計用於快速計算。它是基於Hadoop MapReduce和它擴展了MapReduce模型,以有效地將其用於多種類型的計算,其中包括交互式查詢和流處理。Spark的主要特征是其內存集群計算,增加的應用程序的處理速度。

Spark旨在涵蓋廣泛的工作負載,如批量應用,叠代算法,交互式查詢和分流。除了支持所有這些工作負載在各自的系統中,它減少了維護單獨工具的管理負擔。

Apache Spark的演變

Spark是在加州大學伯克利分校的AMPLab由馬太·紮哈裏亞在2009年開發的Hadoop子項目之一。它在2010年開源,在BSD許可下。它在2013年捐贈給Apache Software 基金,現在的Apache Spark已經在2014年2月成為Apache的頂級項目。

Apache Spark特色

Apache Spark有以下特點。

  • 速度 ? Spark有助於運行Hadoop集群應用,在存儲器高達100倍更快的速度,以及10倍的速度在磁盤上運行時。這可以通過減少讀/寫操作數到磁盤。它存儲在內存中的中間處理數據。

  • 支持多語言 ? Spark 提供了Java, Scala, Python的內置API。因此,可以使用不同語言來寫應用程序。Spark 配備了80個高層次的操作符進行互動查詢。

  • 高級分析 ? Spark不只支持“Map”和“reduce”。它還支持SQL查詢,流數據,機器學習(ML),和圖形的算法。

Spark在Hadoop上建立

下圖顯示了Spark 如何使用Hadoop組件的三種方式來構建。

技術分享

有三種方法部署Spark ,如下面所解釋。

  • 單機版 ? Spark獨立部署是指Spark占據在HDFS之上(Hadoop分布式文件系統)並將空間分配給HDFS。在這裏,Spark和MapReduce將並列覆蓋所有Spark的作業集群。

  • Hadoop Yarn ? Hadoop Yarn部署方式,簡單地說,spark運行在Yarn沒有任何必要預安裝或使用root訪問權限。它有助於Spark融入Hadoop生態系統和Hadoop堆棧。它允許在其它部件疊上層的頂部上運行。

  • Spark 在 MapReduce (SIMR) ? Spark在MapReduce的用於啟動spark作業,除了獨立部署。通過SIMR,用戶可以啟動Spark和使用Shell,而不需要任何管理權限。

Spark組件

下圖說明了Spark的不同組成部分。

技術分享

Apache Spark 核心

Spark核心是底層一般執行引擎,所有其他的功能都是建立在Spark的平臺之上。 它提供了內存計算和引用數據集在外部存儲系統。

Spark SQL

星火SQL是引入了一種名為SchemaRDD一個新的數據抽象,它提供了結構化和半結構化數據的支持,它是Spark核心的組成部分。

Spark 數據流

Spark數據流充分利用Spark核心快速調度能力進行流分析。它攝取的數據在小型分批進行RDD(彈性分布式數據集),對這些小批量的數據轉換。

MLlib (機器學習庫)

MLlib是一個分布式的機器學習框架的分布式存儲器為基礎的Spark架構。它根據基準,由MLlib開發商對交替最小二乘(ALS)實現完成。Spark MLlib 9倍快於Hadoop基於磁盤的版本(前Mahout中獲得了星火接口)Apache Mahout 。

GraphX

GraphX是Spark頂部上的分布式圖形處理框架。它提供了用於表達圖表計算,並可以通過使用預凝膠抽象API來建模用戶定義的圖形的API。它還提供了這種抽象的優化運行。

Apache Spark RDD

彈性分布式數據集

彈性分布式數據集(RDD)是Spark的基本數據結構。它是對象的不可變的分布式集合。在RDD中每個數據集被劃分成邏輯分區,這可能是在群集中的不同節點上計算的。RDDS可以包含任何類型,如:Python,Java,或者Scala的對象,包括用戶定義的類。

形式上,一個RDD是只讀的,分割的記錄集。RDDs 可以數據創建通過確定運算在穩定的存儲或其他RDDs 。RDD是可以並行進行操作元素的容錯集合。

有兩種方法來創建RDDs ? 並行現有集合中的驅動器程序,或在外部存儲系統引用的數據集,如共享文件系統,HDFS,HBase,或任何數據源提供Hadoop的輸入格式。

Spark利用RDD概念,以實現更快,更高效的MapReduce作業。讓我們先討論MapReduce如何操作,為什麽不那麽有效。

數據共享是緩慢的MapReduce

MapReduce被廣泛用於處理和生成大型數據集並行,分布在集群上的算法。它允許用戶編寫並行計算,使用一組高層次的操作符,而不必擔心工作分配和容錯能力。

遺憾的是,目前大多數的框架,只有這樣,才能重新使用計算(前 - 兩個MapReduce工作之間)之間的數據是將其寫入到一個穩定的外部存儲系統(前- HDFS)。雖然這個框架提供了大量的抽象訪問群集的計算資源,但用戶還是想要更多。

這兩個叠代和互動應用需要跨並行作業更快速的數據共享。數據共享MapReduce是緩慢的,因為復制,序列化和磁盤IO。在存儲系統中,大多數的 Hadoop 應用,它們花費的時間的90%以上是用於做HDFS讀 - 寫操作。

MapReduce的叠代操作

重復使用多個計算中間結果在多級的應用程序。下圖說明了如何在當前的框架工作,同時做叠代操作上的MapReduce。這會帶來大量的開銷,由於數據復制,磁盤I / O,和系列化,使系統變慢。

技術分享

MapReduce的交互式操作

用戶運行即席查詢,數據的相同子集。每個查詢會做穩定存儲,它可以主宰應用程序執行的磁盤I/O時間。

下圖說明了如何在當前的框架工作同時做交互查詢在MapReduce上。

技術分享

使用Spark RDD數據共享

數據共享MapReduce是緩慢的,因為復制,序列化和磁盤IO。大多數的Hadoop應用,他們花費的時間的90%以上是做HDFS讀 - 寫操作。

認識到這個問題,研究人員專門開發了一種稱為Apache Spark框架。spark的核心思想是彈性分布式數據集(RDD); 它支持在內存中處理運算。這意味著,它存儲存儲器的狀態作為兩端作業的對象以及對象在那些作業之間是可共享的。在存儲器數據共享比網絡和磁盤快10到100倍。

現在讓我們理解叠代和交互式操作是如何發生在Spark RDD中。

Spark RDD叠代操作

下面給出的圖顯示Spark RDD叠代操作。它將存儲中間結果放在分布式存儲器,而不是穩定的存儲(磁盤)和使系統更快。

註 ? 如果分布式存儲器(RAM)足以存儲中間結果(該作業狀態),那麽它將存儲這些結果的磁盤上。

技術分享

Spark RDD交互式操作

該圖顯示Spark RDD的交互式操作。如果不同查詢在同一組數據的反復運行,該特定數據可被保存在內存中以獲得更好的執行時間。

技術分享

默認情況下,每個變換RDD可以在每次運行在其上的動作時間重新計算。但是,也可能會持續一個RDD在內存中,在這種情況下,Spark將保持周圍群集上以獲得非常快速訪問,在你查詢它的下一次用上。另外也用於在磁盤上持續RDDS支持,或在多個節點間復制。

Spark記錄-spark介紹