和 Hadoop 一樣,Spark 提供了一個 Map/Reduce API(漫衍式計較)和漫衍式存儲。二者主要的差異點是,Spark 在集群的內存中生存數(shù)據(jù),而 Hadoop 在集群的磁盤中存儲數(shù)據(jù)。
大數(shù)據(jù)對一些數(shù)據(jù)科學團隊來說是 主要的挑戰(zhàn),因為在要求的可擴展性方面單機沒有本領和容量來運行大局限數(shù)據(jù)處 理。另外,縱然專為大數(shù)據(jù)設計的系統(tǒng),如 Hadoop,由于一些數(shù)據(jù)的屬性問題也很難有效地處理懲罰圖數(shù)據(jù),我們將在本章的其他部門看到這方面的內容。
Apache Spark 與 Hadoop 雷同,數(shù)據(jù)漫衍式存儲在處事器的集群可能是“節(jié)點”上。 差異的是,Spark 將數(shù)據(jù)生存在內存(RAM)中,Hadoop 把數(shù)據(jù)生存在磁盤(機器 硬盤可能 SSD 固態(tài)硬盤)中。
界說 :在圖和集群計較方面,“節(jié)點”這個詞有兩種截然差異的意思。 圖數(shù)據(jù)由極點和邊構成,在這里“節(jié)點”與極點的意思臨近。在集群計較 方面,構成集群的物理呆板也被稱為“節(jié)點”。為制止夾雜,我們稱圖的 節(jié)點為極點,這也是 Spark 中的專有名詞。而本書中的“節(jié)點”這個詞我 們嚴格界說為集群中的單個物理計較節(jié)點。
大數(shù)據(jù)因為數(shù)據(jù)量大單機無法處理懲罰。Hadoop 和 Spark 都是把數(shù)據(jù)漫衍在集群節(jié)點上的分 布式框架中。Spark 把漫衍式數(shù)據(jù)集存放在內存中,所以比 Hadoop 把數(shù)據(jù)存放在磁盤中 處理懲罰速度要快許多。
除了將要計較的數(shù)據(jù)生存的位置差異(內存和磁盤),Spark 的 API 比 Hadoop的 Map/Reduce API 更容易利用。Spark 利用簡捷且表達力較好的 Scala 作為原生編程語言,寫 Hadoop Map/Reduce 的 Java 代碼行數(shù)與寫 Spark 的 Scala 的代碼行的數(shù) 量比一般是 10:1。
固然本書主要利用 Scala,可是你對 Scala 不熟悉也不消擔憂,我們在第 3 章提 供了快速入門,包羅獨特、艱澀和簡潔的 Scala 語法。進一步熟悉 Java、C++、C#、 Python 等至少一門編程語言是須要的。
恍惚的大數(shù)據(jù)界說
此刻的“大數(shù)據(jù)”觀念已經被很洪流平地夸大了。大數(shù)據(jù)的觀念可以追溯到Google 在 2003 年頒發(fā)的 Google 文件系統(tǒng)的論文和 2004 年頒發(fā)的 Map/Reduce 論文。
大數(shù)據(jù)這個術語有多種差異的界說,而且有些界說已經失去了大數(shù)據(jù)所應有的意 義。可是簡樸的焦點且至關重要的意義是:大數(shù)據(jù)是因數(shù)據(jù)自己太大,單機無法處理懲罰。
數(shù)據(jù)量已經呈爆炸性增長。數(shù)據(jù)來自網站的點擊、處事器日志和帶有傳感器的 硬件等,這些稱為數(shù)據(jù)源。有些數(shù)據(jù)是圖數(shù)據(jù)(graph data),意味著由邊和極點構成, 如一些協(xié)作類網站(屬于“Web 2.0”的社交媒體的一種)。大的圖數(shù)據(jù)集實際上是 眾包的,譬喻常識相互毗連的 Wikipedia、Facebook 的伴侶數(shù)據(jù)、LinkedIn 的毗連數(shù) 據(jù),可能 Twitter 的粉絲數(shù)據(jù)。
Hadoop :Spark 之前的世界
在接頭 Spark 之前,我們總結一下 Hadoop 是如何辦理大數(shù)據(jù)問題的,因為Spark 是成立在下面將要描寫的焦點 Hadoop 觀念之上的。
Hadoop 提供了在集群呆板中實現(xiàn)容錯、并行處理懲罰的框架。Hadoop 有兩個要害 本領 :
HDFS—漫衍式存儲 MapReduce—漫衍式計較
HDFS 提供了漫衍式、容錯存儲。NameNode 把單個大文件支解成小塊,典范 的塊巨細是 64MB 或 128MB。這些小塊文件被分手在集群中的差異呆板上。容錯性 是將每個文件的小塊復制到必然數(shù)量的呆板節(jié)點上(默認復制到 3 個差異節(jié)點, 下圖中為了暗示利便,將復制數(shù)配置為 2)。如果一個呆板節(jié)點失效,致使這個呆板上的 所有文件塊不行用,但其他呆板節(jié)點可以提供缺失的文件塊。這是 Hadoop 架構的 要害理念 :呆板出妨礙是正常運作的一部門。
三個漫衍式數(shù)據(jù)塊通過 Hadoop 漫衍式文件系統(tǒng)(HDFS)保持兩個副本。
MapReduce 是提供并行和漫衍式計較的 Hadoop 并行處理懲罰框架,如下圖 。
MapReduce 是被 Hadoop 和 Spark 都用到的一個數(shù)據(jù)處理懲罰范式。圖中暗示計較處事器日 志文件中“error”呈現(xiàn)的次數(shù),這是一個 MapReduce 操縱。凡是 Map 操縱是一對一的 操縱,對每一個源數(shù)據(jù)項生成一個相應的數(shù)據(jù)轉換操縱。Reduce 是多對一的操縱,聚合 Map 階段的輸出。Hadoop 和 Spark 都用到了 MapReduce 范式。
用 MapReduce 框架,措施員寫一個封裝有 map 和 reduce 函數(shù)的獨立代碼片斷來處 理 HDFS 上的數(shù)據(jù)集。為取到數(shù)據(jù)位置,代碼打包(jar 名目)分發(fā)到數(shù)據(jù)節(jié)點, Map 操縱就在這些數(shù)據(jù)節(jié)點上執(zhí)行,這制止了集群的數(shù)據(jù)傳輸導致耗損網絡帶寬。 對付 Reduce 聚合操縱,Map 的功效被傳輸?shù)蕉鄠€ Reduce 節(jié)點上做 reduce 操縱(稱 之為 shuf?ing)。首先,Map 階段是并行操縱的,Hadoop 提供了一個彈性機制,當 一個呆板節(jié)點可能一個處理懲罰進程失敗時,計較會在其他呆板節(jié)點上重啟。