Spark是一種基本的開源大數據技術

火花前的時間(http://www.3if0.com)
要了解Spark的潛力,它有助於在十年前回顧大數據的形狀。在2008 - 2009年,大數據即業務概念經常與Hadoop技術混爲一談。Hadoop是一個開源框架,用於管理在MapReduce編程任務上運行的集羣(多臺計算機的網絡)。MapReduce是Google於2004年推廣的一種編程模型,用於構建大型數據集的收集和分析。十年前,範式大數據項目被編碼爲應用於特定域數據的MapReduce批處理,然後在Hadoop管理的集羣上執行。大數據和Hadoop如此密切地確定了幾年之後,那些不熟悉大數據的部門(例如風險資本家,公關公司,人力資源部門)在他們的廣告和其他寫作中衆所周知地混淆了兩者。

Hadoop強調批處理對於迭代和交互式作業來說是笨拙的。更重要的是,Hadoop的MapReduce解釋假設數據集駐留在Hadoop分佈式文件系統(HDFS)中。許多(可能是大多數)數據集令人不舒服地適合這個模型。例如,高性能機器學習強調內存處理,而不常使用文件系統大容量存儲。

Spark,“用於大規模數據處理的統一分析引擎”,始於2009年的Berkeley類項目,強調:

通過重用HDFS作爲存儲層與Hadoop兼容。

交互式查詢。

支持機器學習。

流水線操作(即易於連接不同的執行單元,以便可以實現複雜的計算,作爲通過連續計算階段傳遞數據的“桶式旅”)。

Spark還在幾個方面具有靈活性,包括它所服務的不同編程語言,可以租用的雲以及它集成的大數據庫。

Spark vs. Hadoop
Spark通常比Hadoop更快,因此可以更好地安裝Spark的內存模型,最多可以有100多個作業。Spark針對典型的ML任務進行了調整,如NaiveBayes和K-Means計算,還可以幫助節省時間並減輕硬件限制。然而,早期的Spark項目以泄露記憶而聞名,至少在新手的手中。此外,長期運行的批處理MapReduce作業似乎更容易使用Hadoop。

Spark也是一個更通用的編程框架,如上所述,下面的例子更詳細地說明。Hadoop將大數據設想爲Java編碼的MapReduce操作,而且非常不靈活; 相比之下,Spark的學習曲線遠不那麼陡峭。Python,Java,Scala,R甚至SQL中的傳統程序幾乎可以立即開始在傳統桌面上編寫熟悉的程序,同時利用Spark的強大功能。Spark的官方網站有幾個令人回味的例子。在Python中考慮這個單詞計數器:

進口 pyspark
source = “file:// ...”
result = “file:// ...”
與 pyspark。SparkContext(“local”,“WordCount”)爲 sc:
text_file = sc。textFile(來源)
counts = text_file。flatMap(拉姆達 線:線。分裂(“
“))
。map(lambda word:(word,1))
。reduceByKey(lambda a,b:a + b)
很重要。saveAsTextFile(result)
任何Python程序員都可以讀到這個。雖然它在低功耗的開發主機上運行,但它在Docker-ized Spark,Sparkon工業級雲集羣,實驗性超級計算機,高運行時間大型機等方面也保持不變。此外,使用傳統的Python編程很容易改進這樣的例子; 後續示例可能是:

進口 重新
進口 pyspark
source = “file:// ...”
result = “file:// ...”
def better_word_splitter(line):
“””
使用負面的後視來分割所有
空白,但每個空格只有一次
序列。
“””
返回 重。分裂(“(?<!\ S) S” ,線。條())
與 pyspark。SparkContext(“local”,“WordCount2”)爲 sc:
text_file = sc。textFile(來源)
counts = text_file。flatMap(better_word_splitter)\
。地圖(拉姆達 字:(字,1))\
。reduceByKey(lambda a,b:a + b)
很重要。saveAsTextFile(結果
Spark肯定比Hadoop更新,並且聲譽不太廣泛。同時,Spark補充並概括了Hadoop,因此現有的ETL轉換,ML,圖形分析,OLAP,數據集流,時間序列分析或交互式和實驗查詢等編程領域的專家可以逐步採用Spark。此外,Spark將這些不同的域結合起來,簡化了架構設計; 特定結果所需的所有內容都可以在單個管道中編寫,並在標準Spark集羣上計算。

來自官方(http://www.3if0.com)Spark Apache網站的另一個例子 - 這次是在Scala中 - 展示了Spark集成的一些功能。不久前,預測分析是研究生院的一項工作; 現在,Spark的力量使它成爲一個單線:

//此DataFrame的每條記錄都包含標籤和
//由向量表示的要素。
val df = sqlContext。createDataFrame(data)。
toDF(“標籤”,“功能”)
//設置算法的參數。
//在這裏,我們將迭代次數限制爲10。
val lr = new LogisticRegression()。setMaxIter(10)
//使模型適合數據。
val model = lr。適合(df)
//檢查模型:獲取要素權重。
val weights = model。權重
//給定數據集,預測每個點的標籤,以及
顯示 的 結果。
模特。變換(df)。show()
Spark在通用編程語言(如Scala)中的曝光意味着可以輕鬆擴展,調整和集成這些強大的結果與其他組織資產。在過去,大數據往往是一個孤立的專業化。Spark的優勢爲更廣泛的程序員和項目帶來了大量數據。

請記住Spark帶來的操作:一旦程序正確,它將會很快,並且能夠通過Spark管理一系列集羣的能力進行英雄縮放。

準備好出發
所有這些功能聽起來不錯。但對於依賴百萬美元硬件的項目,Spark是否真的安全,更不用說專有數據的價值和安全性了?是! 包括GoDaddy,阿里巴巴和Shopify 在內的數十億美元的公司依靠Spark提供關鍵服務和結果。

作爲一個知識產權,Hadoop在2011年與Apache軟件基金會建立了一個創新的所有權安排。Spark後來跟着同樣的道路。有趣的是,在過去四年中,Spark存儲庫中的活動超過了較舊且通常更爲突出的Hadoop存儲庫的活動。雖然這種比較意味着很少孤立,但它至少暗示了大量將Spark視爲基礎開源技術的組織

如果有的話,Spark的靈活性和集成使其成爲比Hadoop或其他替代品更安全的選擇。雖然Hadoop本身表現得很可靠,但是有太多基於Hadoop的項目在與MapReduce聚焦的內核接口方面遇到了麻煩; MapReduce部分是正確的,但它周圍的包裝器連接到其他組織資產最終是新穎的,相應地搖搖欲墜。相比之下,Spark更通用的框架邀請了一種方便,值得信賴的界面,這些界面有助於整個項目的成功。

結論
三年前,Derrick Harris在爲業務受衆總結Spark時說得對:“(http://www.3if0.com)Spark比Hadoop MapReduce更快,更靈活,更易於使用。” Spark的複雜內存處理使其更快 - 有時達到數量級。Spark爲圖形,流媒體,ML等提供了豐富的API,甚至可以管理Spark自己的內存加速。Spark構建在管道中並支持多個集羣設施。程序員可以使用五種語言中的任何一種,而不僅僅是Hadoop的Java基礎。

由於所有這些原因,Spark的增長只會在未來幾年內增加。Spark是大數據從業者最需要了解的技術之一。

更多:(http://www.3if0.com)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章