Spark是一個(gè)基于內(nèi)存計(jì)算的開(kāi)源集群計(jì)算系統(tǒng),目的是更快速的進(jìn)行數(shù)據(jù)分析。Spark由加州伯克利大學(xué)AMP實(shí)驗(yàn)室Matei為主的小團(tuán)隊(duì)使用Scala開(kāi)發(fā)開(kāi)發(fā),其核心部分的代碼只有63個(gè)Scala文件,非常輕量級(jí)。 Spark 提供了與 Hadoop 相似的開(kāi)源集群計(jì)算環(huán)境,但基于內(nèi)存和迭代優(yōu)化的設(shè)計(jì),Spark 在某些工作負(fù)載表現(xiàn)更優(yōu)秀。
在2014上半年,Spark開(kāi)源生態(tài)系統(tǒng)得到了大幅增長(zhǎng),已成為大數(shù)據(jù)領(lǐng)域最活躍的開(kāi)源項(xiàng)目之一,當(dāng)下已活躍在Hortonworks、IBM、Cloudera、MapR和Pivotal等眾多知名大數(shù)據(jù)公司。那么Spark究竟以什么吸引了如此多的關(guān)注,這里我們看向Dzone上的6個(gè)總結(jié)。
1. 輕量級(jí)快速處理。著眼大數(shù)據(jù)處理,速度往往被置于第一位,我們經(jīng)常尋找能盡快處理我們數(shù)據(jù)的工具。Spark允許Hadoop集群中的應(yīng)用程序在內(nèi)存中以100倍的速度運(yùn)行,即使在磁盤上運(yùn)行也能快10倍。Spark通過(guò)減少磁盤IO來(lái)達(dá)到性能提升,它們將中間處理數(shù)據(jù)全部放到了內(nèi)存中。
Spark使用了RDD(Resilient Distributed Dataset)的理念,這允許它可以透明的內(nèi)存中存儲(chǔ)數(shù)據(jù),只在需要時(shí)才持久化到磁盤。這種做法大大的減少了數(shù)據(jù)處理過(guò)程中磁盤的讀寫,大幅度的降低了所需時(shí)間。
2. 易于使用,Spark支持多語(yǔ)言。Spark允許Java、Scala及Python,這允許開(kāi)發(fā)者在自己熟悉的語(yǔ)言環(huán)境下進(jìn)行工作。它自帶了80多個(gè)高等級(jí)操作符,允許在shell中進(jìn)行交互式查詢。
3. 支持復(fù)雜查詢。在簡(jiǎn)單的“map”及“reduce”操作之外,Spark還支持SQL查詢、流式查詢及復(fù)雜查詢,比如開(kāi)箱即用的機(jī)器學(xué)習(xí)機(jī)圖算法。同時(shí),用戶可以在同一個(gè)工作流中無(wú)縫的搭配這些能力。
4. 實(shí)時(shí)的流處理。對(duì)比MapReduce只能處理離線數(shù)據(jù),Spark支持實(shí)時(shí)的流計(jì)算。Spark依賴Spark Streaming對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)的處理,當(dāng)然在YARN之后Hadoop也可以借助其他的工具進(jìn)行流式計(jì)算。對(duì)于Spark Streaming,Cloudera的評(píng)價(jià)是:
簡(jiǎn)單:輕量級(jí)且具備功能強(qiáng)大的API,Sparks Streaming允許你快速開(kāi)發(fā)流應(yīng)用程序。
容錯(cuò):不像其他的流解決方案,比如Storm,無(wú)需額外的代碼和配置,Spark Streaming就可以做大量的恢復(fù)和交付工作。
集成:為流處理和批處理重用了同樣的代碼,甚至可以將流數(shù)據(jù)保存到歷史數(shù)據(jù)中。
5. 可以與Hadoop和已存Hadoop數(shù)據(jù)整合。Spark可以獨(dú)立的運(yùn)行,除了可以運(yùn)行在當(dāng)下的YARN集群管理之外,它還可以讀取已有的任何Hadoop數(shù)據(jù)。這是個(gè)非常大的優(yōu)勢(shì),它可以運(yùn)行在任何Hadoop數(shù)據(jù)源上,比如HBase、HDFS等。這個(gè)特性讓用戶可以輕易遷移已有Hadoop應(yīng)用,如果合適的話。
6. 活躍和無(wú)限壯大的社區(qū)。Spark起源于2009年,當(dāng)下已有超過(guò)50個(gè)機(jī)構(gòu)250個(gè)工程師貢獻(xiàn)過(guò)代碼,和去年六月相比,代碼行數(shù)幾乎擴(kuò)大三倍,這是個(gè)令人艷羨的增長(zhǎng)。