Hadoop與Spark關係

yoylee_web發表於2018-11-11

說明:近期在做一個圖關係專案時,使用到了saprk分析引擎和Hadoop的HDFS檔案系統,在瞭解的過程中產生了關於Hadoop與Spark的關係是什麼樣的疑問,在此簡單的整理一下

一:介紹

1:Spark

Apache Spark™ is a unified analytics engine for large-scale data processing.

這是官網上的一句話,意思就是“Spark是大規模資料處理的統一分析引擎”,是專為大規模資料處理而設計的快速通用的計算引擎。由UC Berkeley AMP Lab所開源的類Hadoop MapReduce的通用並行框架。

Apache Spark使用最先進的DAG排程程式,查詢優化器和物理執行引擎,實現批處理和流資料的高效能。

可以相容多種語言:Java,Scala,Python,R和SQL 等,來自官網的一個圖:
在這裡插入圖片描述
spark的架構圖:
在這裡插入圖片描述

2:Hadoop

The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.

Apache Hadoop軟體庫是一個允許使用簡單的程式設計模型跨計算機叢集分散式處理大型資料集的框架。它旨在從單個伺服器擴充套件到數千臺計算機,每臺計算機都提供本地計算和儲存。庫本身不是依靠硬體來提供高可用性,而是設計用於檢測和處理應用程式層的故障,從而在計算機叢集之上提供高可用性服務。
簡單的來說:Hadoop是一個由Apache基金會所開發的分散式系統基礎架構
在學習過程中,發現一個特別好的圖,在此和大家分享一下,如評論所說’一圖解千愁‘,Hadoop叢集完整架構設計圖(來自:https://blog.csdn.net/quwenzhe/article/details/53905572):
在這裡插入圖片描述

二:不同層面的關係

1:功能

首先,Hadoop和Spark兩者都是大資料框架,但是各自存在的目的不盡相同。就如上述所說,Hadoop實質上更多是一個分散式資料基礎設施: 它將巨大的資料集分派到一個由普通計算機組成的叢集中的多個節點進行儲存,意味著不需要購買和維護昂貴的伺服器硬體,直接使用廉價的機器就可組成一個高可用的叢集。Hadoop不僅提供分散式儲存,還可以使用其MapReduce模型對大資料量進行分析計算。

而Spark主要是一個專門用來對那些分散式儲存的大資料進行處理的工具,它並不會進行分散式資料的儲存。

2:依賴關係

Hadoop主要是提供HDFS分散式資料儲存功能,在這之外還提供了叫做MapReduce的資料處理功能。所以我們完全可以拋開Spark,使用Hadoop自身的MapReduce來完成資料的處理。

Spark也不是非要依附於Hadoop才能生存。但是Spark沒有提供檔案管理儲存系統,所以,它必須和其他的分散式檔案系統進行整合才能運作。我們可以選擇Hadoop的HDFS,也可以選擇其他的基於雲的資料系統平臺。大部分情況下Spark還是使用的Hadoop的HDFS檔案系統。

3:資料量影響

Hadoop的MapReduce模型特別適合大資料量的離線處理。

Spark適合對資料量不太大的資料處理,可以是離線也可以是實時處理。

對於相同的資料量,spark的處理速度快於Hadoop,為什麼?

  1. Spark和Hadoop都是基於記憶體計算的。Spark和Hadoop的根本差異是多個任務之間的資料通訊問題:Spark多個任務之間資料通訊是基於記憶體,而Hadoop是基於磁碟。
  2. MapReduce是分步對資料進行處理的: ”從叢集中讀取資料,進行一次處理,將結果寫到叢集磁碟中,從叢集中讀取更新後的資料,進行下一次的處理,將結果寫到叢集磁碟中。。。“要不斷的進行磁碟的讀取和儲存。
  3. 對於Spark,它會在記憶體中以接近“實時”的時間完成所有的資料分析:“從叢集中讀取資料,完成所有必須的分析處理,將結果寫回叢集,完成,” 只需要載入一次即可,任務之間的通訊幾乎全在記憶體中。Spark的所有運算並不是全部都在記憶體中,當shuffle發生的時候,資料同樣是需要寫入磁碟的
  4. Spark的批處理速度比MapReduce快近10倍,記憶體中的資料分析速度則快近100倍,下面為Spark官網中的關於spark和hadoop做邏輯迴歸處理的一個比較:
    Logistic regression in Hadoop and Spark

4:容錯

MapReduce使用TaskTracker節點,它為 JobTracker節點提供了心跳(heartbeat)。如果沒有心跳,那麼JobTracker節點重新排程所有將執行的操作和正在進行的操作,交 給另一個TaskTracker節點。這種方法在提供容錯性方面很有效,可是會大大延長某些操作(即便只有一個故障)的完成時間。

Spark使用彈性分散式資料集(RDD),它們是容錯集合,裡面的資料元素可執行並行操作。RDD可以引用外部儲存系統中的資料集,比如共享式檔案系統、HDFS、HBase,或者提供Hadoop InputFormat的任何資料來源。Spark可以用Hadoop支援的任何儲存源建立RDD,包括本地檔案系統,或前面所列的其中一種檔案系統。Spark的快取具有容錯性,原因在於如果RDD的任何分割槽丟失,就會使用原始轉換,自動重新計算。

大資料領域知識博大精深,想要深入學習還需要繼續努力呀。

參考:
https://blog.csdn.net/onlyoncelove/article/details/81945381
https://blog.csdn.net/forward__/article/details/78770466
https://blog.csdn.net/zcy6675/article/details/78256164?locationNum=2&fps=1

相關文章