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