【51CTO.com快譯】Spark正在數(shù)據(jù)處理領(lǐng)域卷起一場(chǎng)風(fēng)暴。讓我們通過(guò)本篇文章,看看為Spark的大數(shù)據(jù)平臺(tái)起到推波助瀾的幾個(gè)重要工具。
Spark生態(tài)系統(tǒng)眾生相
Apache Spark不僅僅讓大數(shù)據(jù)處理起來(lái)更快,還讓大數(shù)據(jù)處理起來(lái)更簡(jiǎn)單、功能更強(qiáng)大、更方便。Spark并非只是一項(xiàng)技術(shù),它結(jié)合了諸多部分,新的功能和性能改進(jìn)不斷添加進(jìn)來(lái),每個(gè)部分都在不斷完善之中。
本文介紹了Spark生態(tài)系統(tǒng)的每個(gè)主要部分:每個(gè)部分的功能,為什么很重要,是如何發(fā)展的,在哪方面不盡如人意,以及可能會(huì)往哪個(gè)方向發(fā)展。
Spark Core
Spark的核心是恰如其名的Spark Core。除了協(xié)調(diào)和調(diào)度作業(yè)外,Spark Core還為Spark中的數(shù)據(jù)處理提供了基本的抽象機(jī)制,名為彈性分布式數(shù)據(jù)集(RDD)。
RDD對(duì)數(shù)據(jù)執(zhí)行兩個(gè)動(dòng)作:轉(zhuǎn)換和操作。前者轉(zhuǎn)換數(shù)據(jù),并將它們作為剛創(chuàng)新的RDD來(lái)提供;后者根據(jù)現(xiàn)有的RDD(比如對(duì)象數(shù)量)來(lái)計(jì)算結(jié)果。
Spark的速度很快,原因是轉(zhuǎn)換和操作都保存在內(nèi)存中。操作慢騰騰地評(píng)估,這意味著只有需要相關(guān)的數(shù)據(jù)時(shí),才執(zhí)行操作;然而,很難搞清楚什么在緩慢運(yùn)行。
Spark的速度在不斷提高。Java的內(nèi)存管理往往給Spark帶來(lái)問(wèn)題,于是Project Tungsten計(jì)劃避開(kāi)JVM的內(nèi)存和垃圾收集子系統(tǒng),以此提高內(nèi)存效率。
Spark API
Spark主要是用Scala編寫(xiě)的,所以Spark的主要API長(zhǎng)期以來(lái)也支持Scala。不過(guò)另外三種使用廣泛得多的語(yǔ)言同樣得到支持:Java(Spark也依賴(lài)它)、Python和R.
總的來(lái)說(shuō),你最好選擇自己最擅長(zhǎng)的那種語(yǔ)言,因?yàn)槟阈枰墓δ芴匦院芸赡茉谠撜Z(yǔ)言中直接得到支持。只有一個(gè)例外:相比之下,SparkR中對(duì)機(jī)器學(xué)習(xí)的支持不大給力,目前只有一小批算法可供使用。不過(guò)將來(lái)這種情況勢(shì)必會(huì)發(fā)生變化。
Spark SQL
千萬(wàn)不要低估了能夠?qū)ε繑?shù)據(jù)執(zhí)行SQL查詢(xún)的能力或便利。Spark SQL提供了對(duì)Spark提供的數(shù)據(jù)執(zhí)行SQL查詢(xún)(并且請(qǐng)求列式DataFrame)的一種通用機(jī)制,包括通過(guò)ODBC/JDBC連接件進(jìn)行管道處理的查詢(xún)。你甚至不需要正規(guī)的數(shù)據(jù)源。Spark 1.6中添加了這一功能:支持以一種得到支持的格式查詢(xún)扁平文件,就像Apache Drill那樣。
Spark SQL其實(shí)并不用于更新數(shù)據(jù),因?yàn)槟桥cSpark的整個(gè)意義相悖??梢詫⒁蚨傻臄?shù)據(jù)寫(xiě)回成新的Spark數(shù)據(jù)源(比如新的Parquet表),但是UPDATE查詢(xún)并不得到支持。別指望諸如此類(lèi)的功能特性很快就會(huì)推出;著眼于Spark SQL的改進(jìn)大多數(shù)用于提升其性能,因?yàn)樗渤闪薙park Streaming的基礎(chǔ)。
Spark Streaming
Spark的設(shè)計(jì)讓它得以支持許多處理方法,包括流處理――Spark Streaming因此得名。關(guān)于Spark Steaming的傳統(tǒng)觀點(diǎn)是,它還半生不熟,這意味著只有你不需要瞬間延遲,或者如果你還沒(méi)有投入到另一種流數(shù)據(jù)處理解決方案(比如說(shuō)Apache Storm),你才會(huì)使用它。
但是Storm在逐漸失去人氣;長(zhǎng)期使用Storm的推特此后已改用了自己的項(xiàng)目Heron。此外,Spark 2.0承諾會(huì)推出一種新的“結(jié)構(gòu)化數(shù)據(jù)流”模式,以便對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行交互式Spark SQL查詢(xún),包括使用Spark?的機(jī)器學(xué)習(xí)庫(kù)。至于其性能是否高得足以擊敗競(jìng)爭(zhēng)對(duì)手仍需拭目以待,不過(guò)它值得認(rèn)真考慮。
MLlib(機(jī)器學(xué)習(xí))
機(jī)器學(xué)習(xí)技術(shù)素有既神奇,又困難之稱(chēng)。Spark讓你可以對(duì)Spark中的數(shù)據(jù)運(yùn)行許多常見(jiàn)的機(jī)器學(xué)習(xí)算法,從而使這些類(lèi)型的分析容易得多,也更容易被Spark用戶(hù)所使用。
MLlib中的可用算法數(shù)量眾多,該框架每推出一個(gè)修訂版,就會(huì)隨之增多。話雖如此,一些類(lèi)型的算法還是沒(méi)有――比如說(shuō),涉及深度學(xué)習(xí)的任何算法。第三方正在利用Spark的人氣來(lái)填補(bǔ)這一空白;比如說(shuō),雅虎可以借助CaffeOnSpark執(zhí)行深度學(xué)習(xí),它通過(guò)Spark充分利用了Caffe深度學(xué)習(xí)系統(tǒng)。
GraphX??(圖形計(jì)算)
描繪數(shù)百萬(wàn)實(shí)體之間的關(guān)系通常需要圖形,這種數(shù)據(jù)構(gòu)件描述了那些實(shí)體之間的相互關(guān)系。Spark的GraphX?? API讓你可以使用Spark的一套方法,對(duì)數(shù)據(jù)執(zhí)行圖形操作,于是構(gòu)建和轉(zhuǎn)換這類(lèi)圖形的繁重任務(wù)卸載到了Spark。GraphX??還包括用于處理數(shù)據(jù)的幾種常見(jiàn)算法,比如PageRank或標(biāo)簽傳播(label propagation)。
從目前來(lái)看,GraphX的??一個(gè)主要限制是,它最適合靜態(tài)圖形。處理添加了新頂點(diǎn)的圖形會(huì)嚴(yán)重影響性能。此外,如果你已經(jīng)在使用一種成熟的圖形數(shù)據(jù)庫(kù)解決方案,GraphX還??不太可能取代它。
SparkR(Spark上的R)
R語(yǔ)言為進(jìn)行統(tǒng)計(jì)數(shù)值分析和機(jī)器學(xué)習(xí)工作提供了一種環(huán)境。Spark在2015年6月添加了支持R的功能,以匹配其支持Python和Scala的功能。
除了為潛在的Spark開(kāi)發(fā)人員多提供一種語(yǔ)言外,SparkR還讓R程序員們可以做之前做不了的許多事情,比如訪問(wèn)超過(guò)單一機(jī)器的內(nèi)存容量的數(shù)據(jù)集,或者同時(shí)輕松地使用多個(gè)進(jìn)程或在多個(gè)機(jī)器上運(yùn)行分析。
SparkR還讓R程序員可以充分利用Spark中的MLlib機(jī)器學(xué)習(xí)模塊,創(chuàng)建一般的線性模型。遺憾的是,并非所有的MLlib功能在SparkR中得到支持,不過(guò)Spark每推出一個(gè)后續(xù)的修訂版,都在填補(bǔ)R支持方面的差距。
原文標(biāo)題:7 tools to fire up Spark's big data engine
【編輯推薦】
聯(lián)系客服