Spark的現狀與未來發(fā)展

責任編輯:editor005

作者:張逸

2014-12-31 22:27:48

摘自:36大數據

下圖為截止 2014 年 Spark 代碼貢獻者每個月的增長曲線:  下圖則顯示了自從 Spark 將其代碼部署到 Github 之后的提交數據,一共有 8471 次提交,11 個分支,25 次發(fā)布,326 位代碼貢獻者。Spark 為大數據提供了通用算法的標準庫,這些算法包括 MapReduce、SQL、Streaming、Machine Learning 與 Graph Processing。

Spark 的發(fā)展

對于一個具有相當技術門檻與復雜度的平臺,Spark 從誕生到正式版本的成熟,經歷的時間如此之短,讓人感到驚詫。2009 年,Spark 誕生于伯克利大學 AMPLab,最開初屬于伯克利大學的研究性項目。它于 2010 年正式開源,并于 2013 年成為了 Apache 基金項目,并于 2014 年成為 Apache 基金的頂級項目,整個過程不到五年時間。

由于 Spark 出自伯克利大學,使其在整個發(fā)展過程中都烙上了學術研究的標記,對于一個在數據科學領域的平臺而言,這也是題中應有之義,它甚至決定了 Spark 的發(fā)展動力。Spark 的核心 RDD(resilient distributed datasets),以及流處理,SQL 智能分析,機器學習等功能,都脫胎于學術研究論文,如下所示:

Discretized Streams: Fault-Tolerant Streaming Computation at Scale. Matei Zaharia, Tathagata Das, Haoyuan Li, Timothy Hunter, Scott Shenker, Ion Stoica. SOSP 2013. November 2013.

Shark: SQL and Rich Analytics at Scale. Reynold Xin, Joshua Rosen, Matei Zaharia, Michael J. Franklin, Scott Shenker, Ion Stoica. SIGMOD 2013. June 2013.

Discretized Streams: An Efficient and Fault-Tolerant Model for Stream Processing on Large Clusters. Matei Zaharia, Tathagata Das, Haoyuan Li, Scott Shenker, Ion Stoica. HotCloud 2012. June 2012.

Shark: Fast Data Analysis Using Coarse-grained Distributed Memory (demo). Cliff Engle, Antonio Lupher, Reynold Xin, Matei Zaharia, Haoyuan Li, Scott Shenker, Ion Stoica. SIGMOD 2012. May 2012. Best Demo Award.

Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing. Matei Zaharia, Mosharaf Chowdhury, Tathagata Das, Ankur Dave, Justin Ma, Murphy McCauley, Michael J. Franklin, Scott Shenker, Ion Stoica. NSDI 2012. April 2012. Best Paper Award and Honorable Mention for Community Award.

Spark: Cluster Computing with Working Sets. Matei Zaharia, Mosharaf Chowdhury, Michael J. Franklin, Scott Shenker, Ion Stoica. HotCloud 2010. June 2010.

在大數據領域,只有深挖數據科學領域,走在學術前沿,才能在底層算法和模型方面走在前面,從而占據領先地位。Spark 的這種學術基因,使得它從一開始就在大數據領域建立了一定優(yōu)勢。無論是性能,還是方案的統(tǒng)一性,對比傳統(tǒng)的 Hadoop,優(yōu)勢都非常明顯。Spark 提供的基于 RDD 的一體化解決方案,將 MapReduce、Streaming、SQL、Machine Learning、Graph Processing 等模型統(tǒng)一到一個平臺下,并以一致的 API 公開,并提供相同的部署方案,使得 Spark 的工程應用領域變得更加廣泛。

Spark 的代碼活躍度

從 Spark 的版本演化看,足以說明這個平臺旺盛的生命力以及社區(qū)的活躍度。尤其在 2013 年來,Spark 進入了一個高速發(fā)展期,代碼庫提交與社區(qū)活躍度都有顯著增長。以活躍度論,Spark 在所有 Apache 基金會開源項目中,位列前三。相較于其他大數據平臺或框架而言,Spark 的代碼庫最為活躍,如下圖所示:

大數據

從 2013 年 6 月到 2014 年 6 月,參與貢獻的開發(fā)人員從原來的 68 位增長到 255 位,參與貢獻的公司也從 17 家上升到 50 家。在這 50 家公司中,有來自中國的阿里、百度、網易、騰訊、搜狐等公司。當然,代碼庫的代碼行也從原來的 63,000 行增加到 175,000 行。下圖為截止 2014 年 Spark 代碼貢獻者每個月的增長曲線:

Spark

下圖則顯示了自從 Spark 將其代碼部署到 Github 之后的提交數據,一共有 8471 次提交,11 個分支,25 次發(fā)布,326 位代碼貢獻者。

Spark

目前的 Spark 版本為 1.1.0。在該版本的代碼貢獻者列表中,出現了數十位國內程序員的身影。這些貢獻者的多數工作主要集中在 Bug Fix 上,甚至包括 Example 的 Bug Fix。由于 1.1.0 版本極大地增強了 Spark SQL 和 MLib 的功能,因此有部分貢獻都集中在 SQL 和 MLib 的特性實現上。下圖是 Spark Master 分支上最近發(fā)生的仍然處于 Open 狀態(tài)的 Pull Request:

Spark

可以看出,由于 Spark 仍然比較年輕,當運用到生產上時,可能發(fā)現一些小缺陷。而在代碼整潔度方面,也隨時在對代碼進行著重構。例如,淘寶技術部在 2013 年就開始嘗試將 Spark on Yarn 應用到生產環(huán)境上。他們在執(zhí)行數據分析作業(yè)過程中,先后發(fā)現了 DAGSchedular 的內存泄露,不匹配的作業(yè)結束狀態(tài)等缺陷,從而為 Spark 庫貢獻了幾個比較重要的 Pull Request。具體內容可以查看淘寶技術部的博客文章:《Spark on Yarn:幾個關鍵 Pull Request》。

Spark 的社區(qū)活動

Spark 非常重視社區(qū)活動,組織也極為規(guī)范,定期或不定期地舉行與 Spark 相關的會議。會議分為兩種,一種為 Spark Summit,影響力巨大,可謂全球 Spark 頂尖技術人員的峰會。目前,已經于 2013 年和 2014 年在 San Francisco 連續(xù)召開了兩屆 Summit 大會。2015 年,Spark Summit 將分別在 New York 與 San Francisco 召開,其官方網站為:http://spark-summit.org/。

在 2014 年的 Spark Summit 大會上,我們看到除了伯克利大學以及 Databricks 公司自身外,演講者都來自最早開始運用和嘗試 Spark 進行大數據分析的公司,包括最近非常火的音樂網站 Spotify,全球最大專注金融交易的 Sharethrough,專業(yè)大數據平臺 MapR、Cloudera,云計算的領先者 Amazon,以及全球超大型企業(yè) IBM、Intel、SAP 等。

除了影響力巨大的 Spark Summit 之外,Spark 社區(qū)還不定期地在全球各地召開小型的 Meetup 活動。Spark Meetup Group 已經遍布北美、歐洲、亞洲和大洋洲。在中國,北京 Spark Meetup 已經召開了兩次,并將于今年 10 月 26 日召開第三次 Meetup。屆時將有來自 Intel 中國研究院、淘寶、TalkingData、微軟亞洲研究院、Databricks 的工程師進行分享。下圖為 Spark Meetup Groups 在全球的分布圖:

Spark

Spark 的現在和未來

Spark 的特色在于它首先為大數據應用提供了一個統(tǒng)一的平臺。從數據處理層面看,模型可以分為批處理、交互式、流處理等多種方式;而從大數據平臺而言,已有成熟的 Hadoop、Cassandra、Mesos 以及其他云的供應商。Spark 整合了主要的數據處理模型,并能夠很好地與現在主流的大數據平臺集成。下圖展現了 Spark 的這一特色:

Spark

這樣的一種統(tǒng)一平臺帶來的優(yōu)勢非常明顯。對于開發(fā)者而言,只需要學習一個平臺,降低了學習曲線。對于用戶而言,可以很方便地將 Spark 應用運行在 Hadoop、Mesos 等平臺上面,滿足了良好的可遷移性。統(tǒng)一的數據處理方式,也可以簡化開發(fā)模型,降低平臺的維護難度。

Spark 為大數據提供了通用算法的標準庫,這些算法包括 MapReduce、SQL、Streaming、Machine Learning 與 Graph Processing。同時,它還提供了對 Scala、Python、Java(支持 Java 8)和R語言的支持:

Spark

在最新發(fā)布的 1.1.0 版本中,對 Spark SQL 和 Machine Learning 庫提供了增強。Spark SQL 能夠更加有效地在 Spark 中加載和查詢結構型數據,同時還支持對 JSON 數據的操作,并提供了更加友好的 Spark API。在 Machine Learning 方面,已經包含了超過 15 種算法,包括決策樹、SVD、PCA,L-BFGS 等。下圖展現了 Spark 當前的技術棧:

Spark

在 2014 年的 Spark Summit 上,來自 Databricks 公司的 Patrick Wendell 展望了 Spark 的未來。他在演講中提到了 Spark 的目標,包括:

Empower data scientists and engineers

Expressive, clean APIs

Unified runtime across many environments

Powerful standard libraries

在演講中,他提到在 Spark 最近的版本中,最重要的核心組件為 Spark SQL。接下來的幾次發(fā)布,除了在性能上更加優(yōu)化(包括代碼生成和快速的 Join 操作)外,還要提供對 SQL 語句的擴展和更好的集成(利用 SchemaRDD 與 Hadoop、NoSQL 以及 RDBMS 的集成)。在將來的版本中,要為 MLLib 增加更多的算法,這些算法除了傳統(tǒng)的統(tǒng)計算法外,還包括學習算法,并提供與R語言更好的集成,從而能夠為數據科學家提供更好的選擇,根據場景來選擇 Spark 和R。

Spark 的發(fā)展會結合硬件的發(fā)展趨勢。首先,內存會變得越來越便宜,256GB 內存以上的機器會變得越來越常見,而對于硬盤,則 SSD 硬盤也將慢慢成為服務器的標配。由于 Spark 是基于內存的大數據處理平臺,因而在處理過程中,會因為數據存儲在硬盤中,而導致性能瓶頸。隨著機器內存容量的逐步增加,類似 HDFS 這種存儲在磁盤中的分布式文件系統(tǒng)將慢慢被共享內存的分布式存儲系統(tǒng)所替代,諸如同樣來自伯克利大學的 AMPLab 實驗室的 Tachyon 就提供了遠超 HDFS 的性能表現。因此,未來的 Spark 會在內部的存儲接口上發(fā)生較大的變化,能夠更好地支持 SSD、以及諸如 Tachyon 之類的共享內存系統(tǒng)。事實上,在 Spark 的最近版本里,已經開始支持 Tachyon 了。

根據 Spark 的路線圖,Databricks 會在近三個月陸續(xù)發(fā)布 1.2.0 和 1.3.0 版本。其中,1.2.0 版本會對存儲方面的 API 進行重構,在 1.3.0 之上的版本,則會推出結合 Spark 和R的 SparkR。除了前面提到的 SQL 與 MLLib 之外,未來的 Spark 對于 Streaming、GraphX 都有不同程度的增強,并能夠更好地支持 YARN。

Spark 的應用

目前,Spark 的正式版本得到了部分 Hadoop 主流廠商的支持,如下企業(yè)或平臺發(fā)布的 Hadoop 版本中,都包含了 Spark:

Spark

這說明業(yè)界已經認可了 Spark,Spark 也被許多企業(yè)尤其是互聯(lián)網企業(yè)廣泛應用到商業(yè)項目中。根據 Spark 的官方統(tǒng)計,目前參與 Spark 的貢獻以及將 Spark 運用在商業(yè)項目的公司大約有 80 余家(https://cwiki.apache.org/confluence/display/SPARK/Powered+By+Spark)。在國內,投身 Spark 陣營的公司包括阿里、百度、騰訊、網易、搜狐等。在 San Francisco 召開的 Spark Summit 2014 大會上,參會的演講嘉賓分享了在音樂推薦(Spotify)、實時審計的數據分析(Sharethrough)、流在高速率分析中的運用(Cassandra)、文本分析(IBM)、客戶智能實時推薦(Graphflow)等諸多在應用層面的話題,這足以說明 Spark 的應用程度。

但是,整體而言,目前開始應用 Spark 的企業(yè)主要集中在互聯(lián)網領域。制約傳統(tǒng)企業(yè)采用 Spark 的因素主要包括三個方面。首先,取決于平臺的成熟度。傳統(tǒng)企業(yè)在技術選型上相對穩(wěn)健,當然也可以說是保守。如果一門技術尤其是牽涉到主要平臺的選擇,會變得格外慎重。如果沒有經過多方面的驗證,并從業(yè)界獲得成功經驗,不會輕易選定。其次是對 SQL 的支持。傳統(tǒng)企業(yè)的數據處理主要集中在關系型數據庫,而且有大量的遺留系統(tǒng)存在。在這些遺留系統(tǒng)中,多數數據處理都是通過 SQL 甚至存儲過程來完成。如果一個大數據平臺不能很好地支持關系型數據庫的 SQL,就會導致遷移數據分析業(yè)務邏輯的成本太大。其三則是團隊與技術的學習曲線。如果沒有熟悉該平臺以及該平臺相關技術的團隊成員,企業(yè)就會擔心開發(fā)進度、成本以及可能的風險。

Spark 在努力解決這三個問題。隨著 1.0.2 版本的發(fā)布,Spark 得到了更多商用案例的驗證。Spark 雖然依舊保持年輕的活力,但已經具備堪稱成熟的平臺功能。至于 SQL 支持,Spark 非常。在 1.0.2 版本發(fā)布之前,就認識到基于 HIVE 的 Shark 存在的不足,從而痛下決心,決定在新版本中拋棄 Shark,而決定引入新的 SQL 模塊。如今,在 Spark 1.1.0 版本中,Spark SQL 的支持已經相對完善,足以支持企業(yè)應用中對 SQL 遷移的需求。關于 Spark 的學習曲線,主要的學習內容還是在于對 RDD 的理解。由于 Spark 為多種算法提供了統(tǒng)一的編程模型、部署模式,搭建了一個大數據的一體化方案,倘若企業(yè)的大數據分析需要應對多種場景,那么,Spark 這樣的架構反而使得它的學習曲線更低,同時還能降低部署成本。Spark 可以很好地與 Hadoop、Cassandra 等平臺集成,同時也能部署到 YARN 上。如果企業(yè)已經具備大數據分析的能力,原有掌握的經驗仍舊可以用到 Spark 上。雖然 Spark 是用 Scala 編寫,官方也更建議用戶調用 Scala 的 API,但它同時也提供了 Java 和 Python 的接口,非常體貼地滿足了 Java 企業(yè)用戶或非 JVM 用戶。如果抱怨 Java 的冗贅,則 Spark 新版本對 Java 8 的支持讓 Java API 變得與 Scala API 同樣的簡潔(因為缺少類型推斷略顯冗余)而強大。

顯然,隨著 Spark 的逐漸成熟,并在活躍社區(qū)的推動下,它所提供的強大功能一定能得到更多技術團隊和企業(yè)的青睞。相信在不遠的將來會有更多傳統(tǒng)企業(yè)開始嘗試使用 Spark。

鏈接已復制,快去分享吧

企業(yè)網版權所有?2010-2024 京ICP備09108050號-6京公網安備 11010502049343號