Spark 編程指南簡(jiǎn)體中文版
Spark是UC Berkeley AMP lab (加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室)所開(kāi)源的類Hadoop MapReduce的通用并行框架,Spark,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫(xiě)HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的MapReduce的算法。
Spark 是一種與 Hadoop 相似的開(kāi)源集群計(jì)算環(huán)境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越,換句話說(shuō),Spark 啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載。
Spark 是在 Scala 語(yǔ)言中實(shí)現(xiàn)的,它將 Scala 用作其應(yīng)用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對(duì)象一樣輕松地操作分布式數(shù)據(jù)集。
盡管創(chuàng)建 Spark 是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實(shí)際上它是對(duì) Hadoop 的補(bǔ)充,可以在 Hadoop 文件系統(tǒng)中并行運(yùn)行。通過(guò)名為 Mesos 的第三方集群框架可以支持此行為。Spark 由加州大學(xué)伯克利分校 AMP 實(shí)驗(yàn)室 (Algorithms, Machines, and People Lab) 開(kāi)發(fā),可用來(lái)構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。
Hadoop是對(duì)大數(shù)據(jù)集進(jìn)行分布式計(jì)算的標(biāo)準(zhǔn)工具,這也是為什么當(dāng)你穿過(guò)機(jī)場(chǎng)時(shí)能看到”大數(shù)據(jù)(Big Data)”廣告的原因。它已經(jīng)成為大數(shù)據(jù)的操作系統(tǒng),提供了包括工具和技巧在內(nèi)的豐富生態(tài)系統(tǒng),允許使用相對(duì)便宜的商業(yè)硬件集群進(jìn)行超級(jí)計(jì)算機(jī)級(jí)別的計(jì)算。2003和2004年,兩個(gè)來(lái)自Google的觀點(diǎn)使Hadoop成為可能:一個(gè)分布式存儲(chǔ)框架(Google文件系統(tǒng)),在Hadoop中被實(shí)現(xiàn)為HDFS;一個(gè)分布式計(jì)算框架(MapReduce)。
這兩個(gè)觀點(diǎn)成為過(guò)去十年規(guī)模分析(scaling analytics)、大規(guī)模機(jī)器學(xué)習(xí)(machine learning),以及其他大數(shù)據(jù)應(yīng)用出現(xiàn)的主要推動(dòng)力!但是,從技術(shù)角度上講,十年是一段非常長(zhǎng)的時(shí)間,而且Hadoop還存在很多已知限制,尤其是MapReduce。對(duì)MapReduce編程明顯是困難的。對(duì)大多數(shù)分析,你都必須用很多步驟將Map和Reduce任務(wù)串接起來(lái)。這造成類SQL的計(jì)算或機(jī)器學(xué)習(xí)需要專門(mén)的系統(tǒng)來(lái)進(jìn)行。更糟的是,MapReduce要求每個(gè)步驟間的數(shù)據(jù)要序列化到磁盤(pán),這意味著MapReduce作業(yè)的I/O成本很高,導(dǎo)致交互分析和迭代算法(iterative algorithms)開(kāi)銷很大;而事實(shí)是,幾乎所有的最優(yōu)化和機(jī)器學(xué)習(xí)都是迭代的。
為了解決這些問(wèn)題,Hadoop一直在向一種更為通用的資源管理框架轉(zhuǎn)變,即YARN(Yet Another Resource Negotiator, 又一個(gè)資源協(xié)調(diào)者)。YARN實(shí)現(xiàn)了下一代的MapReduce,但同時(shí)也允許應(yīng)用利用分布式資源而不必采用MapReduce進(jìn)行計(jì)算。通過(guò)將集群管理一般化,研究轉(zhuǎn)到分布式計(jì)算的一般化上,來(lái)擴(kuò)展了MapReduce的初衷。
Spark是第一個(gè)脫胎于該轉(zhuǎn)變的快速、通用分布式計(jì)算范式,并且很快流行起來(lái)。Spark使用函數(shù)式編程范式擴(kuò)展了MapReduce模型以支持更多計(jì)算類型,可以涵蓋廣泛的工作流,這些工作流之前被實(shí)現(xiàn)為Hadoop之上的特殊系統(tǒng)。Spark使用內(nèi)存緩存來(lái)提升性能,因此進(jìn)行交互式分析也足夠快速(就如同使用Python解釋器,與集群進(jìn)行交互一樣)。緩存同時(shí)提升了迭代算法的性能,這使得Spark非常適合數(shù)據(jù)理論任務(wù),特別是機(jī)器學(xué)習(xí)。
本文中,我們將首先討論如何在本地機(jī)器上或者EC2的集群上設(shè)置Spark進(jìn)行簡(jiǎn)單分析。然后,我們?cè)谌腴T(mén)級(jí)水平探索Spark,了解Spark是什么以及它如何工作(希望可以激發(fā)更多探索)。最后兩節(jié)我們開(kāi)始通過(guò)命令行與Spark進(jìn)行交互,然后演示如何用Python寫(xiě)Spark應(yīng)用,并作為Spark作業(yè)提交到集群上。
拓展資料
Spark官網(wǎng):http://spark.apache.org/
Spark下載鏈接:http://spark.apache.org/downloads.html