標籤:

什麼是 Spark?

雲計算。這種問題可以直接去官網看。


關於Spark:

Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的並行計算框架,Spark基於map reduce演算法實現的分散式計算,

擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,

因此Spark能更
好地適用於數據挖掘與機器學習等需要迭代的map reduce的演算法

SparkHadoop的對比

Spark的中間數據放到內存中,對於迭代運算效率更高。

Spark更適合於迭代運算比較多的ML和DM運算。因為在Spark裡面,有RDD的抽象概念。

Spark比Hadoop更通用。

Spark提供的數據集操作類型有很多種,不像Hadoop只提供了Map和Reduce兩種操作。比如map, filter, flatMap, sample, groupByKey, reduceByKey, union,
join, cogroup, mapValues, sort,partionBy等多種操作類型,Spark把這些操作稱為Transformations。同時還提供Count, collect, reduce, lookup, save等多種actions操作。

這些多種多樣的數據集操作類型,給給開發上層應用的用戶提供了方便。各個處理節點之間的通信模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式。用戶可以命名,物化,控制中間結果的存儲、分區等。可以說編程模型比Hadoop更靈活。

不過由於RDD的特性,Spark不適用那種非同步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合。

容錯性。

在分散式數據集計算時通過checkpoint來實現容錯,而checkpoint有兩種方式,一個是checkpoint data,一個是logging
the updates。用戶可以控制採用哪種方式來實現容錯。

可用性。

Spark通過提供豐富的Scala, Java,Python
API及互動式Shell來提高可用性。

SparkHadoop的結合

Spark可以直接對HDFS進行數據的讀寫,同樣支持Spark on YARN。Spark可以與MapReduce運行於同集群中,共享存儲資源與計算,數據倉庫Shark實現上借用Hive,幾乎與Hive完全兼容。

Spark的適用場景

Spark是基於內存的迭代計算框架,適用於需要多次操作特定數據集的應用場合。需要反覆操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小

由於RDD的特性,Spark不適用那種非同步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合。

總的來說Spark的適用面比較廣泛且比較通用。


Spark是一個基於內存計算的開源的集群計算系統,目的是讓數據分析更加快速。Spark非常小巧玲瓏,由加州伯克利大學AMP實驗室的Matei為主的小團隊所開發。使用的語言是Scala,項目的core部分的代碼只有63個Scala文件,非常短小精悍。

Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。

Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕鬆地操作分散式數據集。

儘管創建 Spark 是為了支持分散式數據集上的迭代作業,但是實際上它是對 Hadoop 的補充,可以在 Hadoop 文件系統中並行運行。通過名為Mesos的第三方集群框架可以支持此行為。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發,可用來構建大型的、低延遲的數據分析應用程序。

Spark 集群計算架構

雖然 Spark 與 Hadoop 有相似之處,但它提供了具有有用差異的一個新的集群計算框架。首先,Spark 是為集群計算中的特定類型的工作負載而設計,即那些在並行操作之間重用工作數據集(比如機器學習演算法)的工作負載。為了優化這些類型的工作負載,Spark 引進了內存集群計算的概念,可在內存集群計算中將數據集緩存在內存中,以縮短訪問延遲。

Spark 還引進了名為彈性分散式數據集(RDD) 的抽象。RDD 是分布在一組節點中的只讀對象集合。這些集合是彈性的,如果數據集一部分丟失,則可以對它們進行重建。重建部分數據集的過程依賴於容錯機制,該機制可以維護 "血統"(即允許基於數據衍生過程重建部分數據集的信息)。RDD 被表示為一個 Scala 對象,並且可以從文件中創建它;一個並行化的切片(遍佈於節點之間);另一個 RDD 的轉換形式;並且最終會徹底改變現有 RDD 的持久性,比如請求緩存在內存中。

Spark 中的應用程序稱為驅動程序,這些驅動程序可實現在單一節點上執行的操作或在一組節點上並行執行的操作。與 Hadoop 類似,Spark 支持單節點集群或多節點集群。對於多節點操作,Spark 依賴於 Mesos 集群管理器。Mesos 為分散式應用程序的資源共享和隔離提供了一個有效平台。該設置充許 Spark 與 Hadoop 共存於節點的一個共享池中。

更多關於spark的知識和視頻可以加微信18610086859 和微信公眾賬號DT_Spark了解。


有關spark的基礎學習,給你推薦個微信公眾號 【優雅程序員】YoyaProgrammer

剛開始講spark的具體應用,很詳細的文章。


推薦閱讀:

TensorFlow遇上Spark
有人玩過sparkR嗎?sparkR能直接調用cran上的包嗎?
Spark中,Dataset和DataFrame的性能比較?
一般而言常見的Spark的性能瓶頸有哪些?
Spark Streaming消費kafka使用及原理

TAG:Spark |