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