小編說:一提到大數(shù)據(jù)處理,相信很多人第一時(shí)間想到的是 Hadoop MapReduce。沒錯(cuò),Hadoop MapReduce 為大數(shù)據(jù)處理技術(shù)奠定了基礎(chǔ)。近年來,隨著 Spark 的發(fā)展,越來越多的聲音提到了 Spark。而Spark相比Hadoop MapReduce有哪些優(yōu)勢?
本文選自《大數(shù)據(jù)處理之道》

Spark與Hadoop MapReduce在業(yè)界有兩種說法 :一是 Spark 將代替 Hadoop MapReduce,成為未來大數(shù)據(jù)處理發(fā)展的方向 ;二是 Spark 將會(huì)和 Hadoop 結(jié)合,形成更大的生態(tài)圈。其實(shí) Spark 和 Hadoop MapReduce 的重點(diǎn)應(yīng)用場合有所不同。相對(duì)于 Hadoop MapReduce 來說,Spark 有點(diǎn)“青出于藍(lán)”的感覺,Spark 是在Hadoop MapReduce 模型上發(fā)展起來的,在它的身上我們能明顯看到 MapReduce的影子,所有的 Spark 并非從頭創(chuàng)新,而是站在了巨人“MapReduce”的肩膀上。千秋功罪,留于日后評(píng)說,我們暫且擱下爭議,來看看相比 Hadoop MapReduce,Spark 都有哪些優(yōu)勢。
1計(jì)算速度快
大數(shù)據(jù)處理首先追求的是速度。Spark 到底有多快?用官方的話說,“Spark 允許 Hadoop 集群中的應(yīng)用程序在內(nèi)存中以 100 倍的速度運(yùn)行,即使在磁盤上運(yùn)行也能快 10 倍”??赡苡械淖x者看到這里會(huì)大為感嘆,的確如此,在有迭代計(jì)算的領(lǐng)域,Spark 的計(jì)算速度遠(yuǎn)遠(yuǎn)超過 MapReduce,并且迭代次數(shù)越多,Spark 的優(yōu)勢越明顯。這是因?yàn)?Spark 很好地利用了目前服務(wù)器內(nèi)存越來越大這一優(yōu)點(diǎn),通過減少磁盤 I/O 來達(dá)到性能提升。它們將中間處理數(shù)據(jù)全部放到了內(nèi)存中,僅在必要時(shí)才批量存入硬盤中?;蛟S讀者會(huì)問 :如果應(yīng)用程序特別大,內(nèi)存能放下多少 GB ?答曰 :什么? GB ?目前 IBM 服務(wù)器內(nèi)存已經(jīng)擴(kuò)展至幾 TB 了。
2應(yīng)用靈活,上手容易
知道 AMPLab 的 Lester 為什么放棄 MapReduce 嗎?因?yàn)樗枰押芏嗑Ψ诺組ap和Reduce的編程模型上,極為不便。 Spark在簡單的Map及Reduce操作之外,還支持 SQL 查詢、流式查詢及復(fù)雜查詢,比如開箱即用的機(jī)器學(xué)習(xí)算法。同時(shí),用戶可以在同一個(gè)工作流中無縫地搭配這些能力,應(yīng)用十分靈活。
Spark 核心部分的代碼為 63 個(gè) Scala 文件,非常的輕量級(jí)。并且允許 Java、Scala、Python 開發(fā)者在自己熟悉的語言環(huán)境下進(jìn)行工作,通過建立在 Java、Scala、Python、SQL(應(yīng)對(duì)交互式查詢)的標(biāo)準(zhǔn) API 以方便各行各業(yè)使用,同時(shí)還包括大量開箱即用的機(jī)器學(xué)習(xí)庫。它自帶 80 多個(gè)高等級(jí)操作符,允許在 Shell中進(jìn)行交互式查詢。即使是新手,也能輕松上手應(yīng)用。
3兼容競爭對(duì)手
Spark 可以獨(dú)立運(yùn)行,除了可以運(yùn)行在當(dāng)下的 YARN 集群管理外,還可以讀取已有的任何 Hadoop 數(shù)據(jù)。它可以運(yùn)行在任何 Hadoop 數(shù)據(jù)源上,比如 HBase、HDFS 等。有了這個(gè)特性,讓那些想從 Hadoop 應(yīng)用遷移到 Spark 上的用戶方便了很多。Spark 有兼容競爭對(duì)手的胸襟,何愁大事不成?
4實(shí)時(shí)處理性能非凡
MapReduce 更 加 適 合 處 理 離 線 數(shù) 據(jù)( 當(dāng) 然, 在 YARN 之 后,Hadoop 也可以借助其他工具進(jìn)行流式計(jì)算)。Spark 很好地支持實(shí)時(shí)的流計(jì)算,依賴Spark Streaming 對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)處理。Spark Streaming 具備功能強(qiáng)大的 API,允許用戶快速開發(fā)流應(yīng)用程序。而且不像其他的流解決方案,比如 Storm,Spark Streaming 無須額外的代碼和配置,就可以做大量的恢復(fù)和交付工作。
5社區(qū)貢獻(xiàn)力量巨大
從 Spark 的版本演化來看,足以說明這個(gè)平臺(tái)旺盛的生命力及社區(qū)的活躍度。尤其自 2013 年以來,Spark 一度進(jìn)入高速發(fā)展期,代碼庫提交與社區(qū)活躍度都有顯著增長。以活躍度論,Spark 在所有的 Apache 基金會(huì)開源項(xiàng)目中位列前三,相較于其他大數(shù)據(jù)平臺(tái)或框架而言,Spark 的代碼庫最為活躍。
Spark 非常重視社區(qū)活動(dòng),組織也極為規(guī)范,會(huì)定期或不定期地舉行與 Spark相關(guān)的會(huì)議。會(huì)議分為兩種 :一種是 Spark Summit,影響力極大,可謂全球 Spark頂尖技術(shù)人員的峰會(huì),目前已于 2013—2015 年在 San Francisco 連續(xù)召開了三屆Summit 大會(huì) ;另一種是 Spark 社區(qū)不定期地在全球各地召開的小型 Meetup 活動(dòng)。Spark Meetup 也會(huì)在我國的一些大城市定期召開,比如北京、深圳、西安等地,讀者可以關(guān)注當(dāng)?shù)氐奈⑿殴娞?hào)進(jìn)行參與。
Spark 的適用場景
從大數(shù)據(jù)處理需求來看,大數(shù)據(jù)的業(yè)務(wù)大概可以分為以下三類 :