大數據處理框架,Apache Spark 1.5.2 發布

jopen 9年前發布 | 21K 次閱讀 Apache Spark

Apache Spark 1.5.2 發布,此版本是個維護版本,包括 Spark 一些領域的穩定性修復,主要是:DataFrame API, Spark Streaming, PySpark, R, Spark SQL 和 MLlib。詳細改進內容請看更新日志

Spark 1.5.2 現已提供下載

Apache Spark是一個圍繞速度、易用性和復雜分析構建的大數據處理框架。最初在2009年由加州大學伯克利分校的AMPLab開發,并于2010年成為Apache的開源項目之一。

與Hadoop和Storm等其他大數據和MapReduce技術相比,Spark有如下優勢。

首先,Spark為我們提供了一個全面、統一的框架用于管理各種有著不同性質(文本數據、圖表數據等)的數據集和數據源(批量數據或實時的流數據)的大數據處理的需求。

Spark可以將Hadoop集群中的應用在內存中的運行速度提升100倍,甚至能夠將應用在磁盤上的運行速度提升10倍。

Spark讓開發者可以快速的用Java、Scala或Python編寫程序。它本身自帶了一個超過80個高階操作符集合。而且還可以用它在shell中以交互式地查詢數據。

除了Map和Reduce操作之外,它還支持SQL查詢,流數據,機器學習和圖表數據處理。開發者可以在一個數據管道用例中單獨使用某一能力或者將這些能力結合在一起使用。

在這個Apache Spark文章系列的第一部分中,我們將了解到什么是Spark,它與典型的MapReduce解決方案的比較以及它如何為大數據處理提供了一套完整的工具。

Hadoop和Spark

Hadoop這項大數據處理技術大概已有十年歷史,而且被看做是首選的大數據集合處理的解決方案。MapReduce是一路計算的優秀解決方案,不過對于需要多路計算和算法的用例來說,并非十分高效。數據處理流程中的每一步都需要一個Map階段和一個Reduce階段,而且如果要利用這一解決方案,需要將所有用例都轉換成MapReduce模式。

在下一步開始之前,上一步的作業輸出數據必須要存儲到分布式文件系統中。因此,復制和磁盤存儲會導致這種方式速度變慢。另外Hadoop解決方案中通常會包含難以安裝和管理的集群。而且為了處理不同的大數據用例,還需要集成多種不同的工具(如用于機器學習的Mahout和流數據處理的Storm)。

如果想要完成比較復雜的工作,就必須將一系列的MapReduce作業串聯起來然后順序執行這些作業。每一個作業都是高時延的,而且只有在前一個作業完成之后下一個作業才能開始啟動。

而Spark則允許程序開發者使用有向無環圖(DAG)開發復雜的多步數據管道。而且還支持跨有向無環圖的內存數據共享,以便不同的作業可以共同處理同一個數據。

Spark運行在現有的Hadoop分布式文件系統基礎之上(HDFS)提供額外的增強功能。它支持將Spark應用部署到現存的Hadoop v1集群(with SIMR – Spark-Inside-MapReduce)或Hadoop v2 YARN集群甚至是Apache Mesos之中。

我們應該將Spark看作是Hadoop MapReduce的一個替代品而不是Hadoop的替代品。其意圖并非是替代Hadoop,而是為了提供一個管理不同的大數據用例和需求的全面且統一的解決方案。

Spark特性

Spark通過在數據處理過程中成本更低的洗牌(Shuffle)方式,將MapReduce提升到一個更高的層次。利用內存數據存儲和接近實時的處理能力,Spark比其他的大數據處理技術的性能要快很多倍。

Spark還支持大數據查詢的延遲計算,這可以幫助優化大數據處理流程中的處理步驟。Spark還提供高級的API以提升開發者的生產力,除此之外還為大數據解決方案提供一致的體系架構模型。

Spark將中間結果保存在內存中而不是將其寫入磁盤,當需要多次處理同一數據集時,這一點特別實用。Spark的設計初衷就是既可以在內存中又可以在磁盤上工作的執行引擎。當內存中的數據不適用時,Spark操作符就會執行外部操作。Spark可以用于處理大于集群內存容量總和的數據集。

Spark會嘗試在內存中存儲盡可能多的數據然后將其寫入磁盤。它可以將某個數據集的一部分存入內存而剩余部分存入磁盤。開發者需要根據數據和用例評估對內存的需求。Spark的性能優勢得益于這種內存中的數據存儲。

Spark的其他特性包括:

  • 支持比Map和Reduce更多的函數。
  • 優化任意操作算子圖(operator graphs)。
  • 可以幫助優化整體數據處理流程的大數據查詢的延遲計算。
  • 提供簡明、一致的Scala,Java和Python API。
  • 提供交互式Scala和Python Shell。目前暫不支持Java。

Spark是用Scala程序設計語言編寫而成,運行于Java虛擬機(JVM)環境之上。目前支持如下程序設計語言編寫Spark應用:

  • Scala
  • Java
  • Python
  • Clojure
  • R
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!