Hadoop進入寒冬期,崛起的會是Spark嗎?

趙鈺瑩發表於2018-05-07

  Hadoop在大資料領域享有多年壟斷權,隨著該領域開始出現新生力量,其統治地位正在逐漸下滑。年初的調查中,Hadoop被列為2018年大資料領域的“漸凍”趨勢之一,Gartner的調查也揭示了Hadoop使用量的下滑,不少人將Hadoop稱作“倒下的大象”,比如Lucidworks執行長Will Hayes。

  如果Hadoop開始進入寒冬期,率先崛起的會是呼聲最高的Spark嗎?

Hadoop進入寒冬期,崛起的會是Spark嗎?

  筆者曾經看過一個非常有趣的比喻,Hadoop是第一家大型包工隊,可以組織一大堆人合作(HDFS)搬磚蓋房(用MapReduce),但是速度比較慢。

  Spark是另一家包工隊,雖然成立得晚一些,但是他們搬磚很快很靈活,可以實時互動地蓋房子,比Hadoop快得多。

  Hadoop開始升級,指定排程專家YARN排程工人。Spark從多個倉庫搬磚(HDFS,Cassandra,S3,HBase),還允許不同專家如YARN/ MESOS對人員和任務進行排程。

  當然,他們兩家並不是水火不容。Spark經常和Hadoop團隊合作,這讓問題變得更加複雜。不管怎麼說,Spark和Hadoop都是兩個獨立的包工隊,都有著各自的優缺點和特定的業務用例。

  所以,最後,哪一家會勝出呢?

  本文將從這兩大系統的體系結構,效能,成本,安全性和機器學習能力等方面進行比較。

  Hadoop是什麼?

  現在恐怕沒有人會問“Hadoop是什麼?”這個問題了,因為它實在是太火了!Hadoop在2006年開始成為雅虎專案,隨後晉升為頂級Apache開源專案。它是一種通用的分散式系統基礎架構,具有多個元件:Hadoop分散式檔案系統(HDFS),它將檔案以Hadoop本機格式儲存並在叢集中並行化; YARN,協調應用程式執行時的排程程式; MapReduce,這是實際並行處理資料的演算法。Hadoop使用Java程式語言構建,其上的應用程式也可以使用其他語言編寫。透過一個Thrift客戶端,使用者可以編寫MapReduce或者Python程式碼。

Hadoop進入寒冬期,崛起的會是Spark嗎?

  除了這些基本元件外,Hadoop還包括Sqoop,它將關係資料移入HDFS; Hive,一種類似SQL的介面,允許使用者在HDFS上執行查詢; Mahout,機器學習。除了將HDFS用於檔案儲存之外,Hadoop現在還可以配置使用S3 buckets或Azure blob作為輸入。

  它可以透過Apache發行版開源,也可以透過Cloudera(規模和範圍最大的Hadoop供應商),MapR或HortonWorks等廠商提供。

  Spark是什麼?

  Spark是一個較新的專案,最初於2012年誕生在加州大學伯克利分校的AMPLab。它也是一個頂級Apache專案,專注於在叢集中並行處理資料,最大的區別在於它在記憶體中執行。

  類似於Hadoop讀取和寫入檔案到HDFS的概念,Spark使用RDD(彈性分散式資料集)處理RAM中的資料。Spark以獨立模式執行,Hadoop叢集可用作資料來源,也可與Mesos一起執行。在後一種情況下,Mesos主站將取代Spark主站或YARN以進行排程。

Hadoop進入寒冬期,崛起的會是Spark嗎?

  Spark是圍繞Spark Core構建的,Spark Core是驅動排程,最佳化和RDD抽象的引擎,並將Spark連線到正確的檔案系統(HDFS,S3,RDBM或Elasticsearch)。Spark Core上還執行了幾個庫,包括Spark SQL,允許使用者在分散式資料集上執行類似SQL的命令,用於機器學習的MLLib,用於解決圖形問題的GraphX以及允許輸入連續流式日誌資料的Streaming。

  Spark有幾個API。原始介面是用Scala編寫的,並且由於大量資料科學家的使用,還新增了Python和R介面。Java是編寫Spark作業的另一種選擇。

  Databricks是由Spark創始人Matei Zaharia創立的公司,現在負責Spark開發併為客戶提供Spark分銷。

  架構對比

  Hadoop

  首先,所有傳入HDFS的檔案都被分割成塊。根據配置的塊大小和複製因子,每個塊在叢集中被複制指定的次數。該資訊被傳遞給NameNode,它跟蹤叢集中的所有內容。NameNode將這些檔案分配給多個資料節點,然後將這些檔案寫入其中。在2012年被實施的高可用性允許NameNode故障轉移到備份節點上,以跟蹤叢集中的所有檔案。

  MapReduce演算法位於HDFS之上,由JobTracker組成。一旦應用程式以其中一種語言編寫,Hadoop接受JobTracker,然後分配工作(可包括計算單詞和清理日誌檔案等內容,以及在Hive倉庫資料集之上執行HiveQL查詢)到偵聽其他節點的TaskTracker。

  YARN分配JobTracker加速並監控它們的資源,以提高效率。然後將所有來自MapReduce階段的結果彙總並寫入HDFS中的磁碟之上。

  Spark

  Spark的計算過程在中執行並在記憶體中儲存,直到使用者儲存為止。除此之外,Spark處理工作的方式基本與Hadoop類似。最初,Spark從HDFS,S3或其他檔案儲存系統讀取到名為SparkContext的程式執行入口。除此之外,Spark建立了一個名為RDD(彈性分散式資料集)的結構,它表示一組可並行操作元素的不可變集合。

  隨著RDD和相關操作的建立,Spark還建立了一個DAG(有向無環圖),以便視覺化DAG中的操作順序和操作之間的關係。每個DAG都有確定的階段和步驟。

  使用者可以在RDD上執行轉換,中間操作或最終步驟。給定轉換的結果進入DAG,不會保留到磁碟,但每一步操作都會將記憶體中的所有資料保留到磁碟。

  Spark RDD頂部的一個新抽象是DataFrames,它是在Spark 2.0中作為RDD配套介面開發的。這兩者非常相似,但DataFrames將資料組織成命名列,類似於Python的pandas或R包。這使得它們比RDD更方便,RDD沒有類似的一系列列級標題引用。SparkSQL還允許使用者像儲存關係資料的SQL表一樣查詢DataFrame。

  效能

  Spark在記憶體中執行速度比Hadoop快100倍,在磁碟上執行速度快10倍。眾所周知,Spark在數量只有十分之一的機器上,對100TB資料進行排序的速度比Hadoop MapReduce快3倍。此外,Spark在機器學習應用中的速度同樣更快,例如Naive Bayes和k-means。

Hadoop進入寒冬期,崛起的會是Spark嗎?

  由處理速度衡量的Spark效能之所以比Hadoop更優,原因如下:

  1、每次執行MapReduce任務時,Spark都不會受到輸入輸出的限制。事實證明,應用程式的速度要快得多。

  2、Spark的DAG可以在各個步驟之間進行最佳化。Hadoop在MapReduce步驟之間沒有任何週期性連線,這意味著在該級別不會發生效能調整。

  但是,如果Spark與其他共享服務在YARN上執行,則效能可能會降低並導致RAM開銷記憶體洩漏。出於這個原因,如果使用者有批處理的訴求,Hadoop被認為是更高效的系統。

  成本

  Spark和Hadoop都可以作為開源Apache專案免費獲得,這意味著使用者都可以零成本安裝執行。但是,考慮總體擁有成本才是最重要的,比如維護、硬體和軟體購買,僱傭叢集管理團隊的開銷。內部安裝的一般經驗法則是Hadoop需要更多的磁碟記憶體,而Spark需要更多的RAM,這意味著設定Spark叢集可能會更加昂貴。此外,由於Spark是較新的系統,因此它的專家更為稀少,成本更高。另一種選擇是使用供應商進行安裝,例如Cloudera for Hadoop或Spark for DataBricks,或使用AWS在雲中執行EMR / Mapreduce。

  由於Hadoop和Spark是串聯執行的,將各自的價格分離出來進行比較可能是困難的。對於高階別的比較,假設為Hadoop選擇計算最佳化的EMR叢集,最小例項c4.large的成本為每小時0.026美元。 Spark最小記憶體最佳化叢集每小時成本為0.067美元。因此,Spark每小時更昂貴,但考慮到計算時間,類似的任務在Spark叢集上花費的時間更少。

  容錯和安全性

  Hadoop具有高度容錯性,因為它旨在跨多個節點複製資料。每個檔案都被分割成塊,並在許多機器上覆制無數次,以確保如果單臺機器停機,可以從其他塊重建檔案。

  Spark的容錯主要是透過RDD操作來實現。最初,靜態資料儲存在HDFS中,透過Hadoop的體系結構進行容錯。隨著RDD的建立,lineage也是如此,它記住了資料集是如何構建的,由於它是不可變的,如果需要可以從頭開始重建。跨Spark分割槽的資料也可以基於DAG跨資料節點重建。資料在執行器節點之間複製,如果執行器和驅動程式之間的節點通訊失敗,通常可能會損壞資料。

Hadoop進入寒冬期,崛起的會是Spark嗎?

  Spark和Hadoop都可以支援Kerberos身份驗證,但Hadoop對HDFS具有更加細化的安全控制。 Apache Sentry是一個用於執行細粒度後設資料訪問的系統,是另一個專門用於HDFS級別安全性的專案。

  Spark的安全模型目前很少,但允許透過共享金鑰進行身份驗證。

  機器學習

  Hadoop使用Mahout來處理資料。Mahout包括叢集,分類和基於批處理的協作過濾,所有這些都在MapReduce之上執行。目前正在逐步推出支援Scala和DSL語言的Samsara(類似R的向量數學環境),允許使用者進行記憶體和代數操作,並允許使用者自己編寫演算法。

Hadoop進入寒冬期,崛起的會是Spark嗎?

  Spark有一個機器學習庫叫MLLib,充分利用了Spark快速記憶體計算,迭代效率高的優勢開發機器學習應用程式。它可用於Java,Scala,Python或R,包括分類和迴歸,以及透過超引數調整構建機器學習管道的能力。

  總結

  所以,到底是選Hadoop還是Spark呢?兩者都是Apache的頂級專案,經常一起使用,並且有相似之處,但Spark並不是離不開Hadoop,目前已有超過20%的Spark獨立於Hadoop執行,並且這一比例還在增加。從效能、成本、高可用性、易用性、安全性和機器學習諸多方面參考,Spark都略勝一籌!

  或許,Hadoop確實老了,大資料世界應該出現更年輕的統治者。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2154070/,如需轉載,請註明出處,否則將追究法律責任。

相關文章