Hadoop在大數據領域享有多年壟斷權,隨著該領域開始出現新生力量,其統治地位正在逐漸下滑。年初的調查中,Hadoop被列為2018年大數據領域的“漸凍”趨勢之一,Gartner的調查也揭示了Hadoop使用量的下滑,不少人將Hadoop稱作“倒下的大象”,比如Lucidworks首席執行官Will Hayes.如果Hadoop開始進入寒冬期,率先崛起的會是呼聲最高的Spark嗎?
筆者曾經看過一個非常有趣的比喻,Hadoop是第一家大型包工隊,可以組織一大堆人合作(HDFS)搬磚蓋房(用MapReduce),但是速度比較慢。
Spark是另一家包工隊,雖然成立得晚一些,但是他們搬磚很快很靈活,可以實時交互地蓋房子,比Hadoop快得多。
Hadoop開始升級,指定調度專家YARN調度工人。Spark從多個倉庫搬磚(HDFS,Cassandra,S3,HBase),還允許不同專家如YARN/ MESOS對人員和任務進行調度。
當然,他們兩家并不是水火不容。Spark經常和Hadoop團隊合作,這讓問題變得更加復雜。不管怎么說,Spark和Hadoop都是兩個獨立的包工隊,都有著各自的優缺點和特定的業務用例。
所以,最后,哪一家會勝出呢?
本文將從這兩大系統的體系結構,性能,VPS租用 國內服務器,成本,安全性和機器學習能力等方面進行比較。
Hadoop是什么?
現在恐怕沒有人會問“Hadoop是什么?”這個問題了,因為它實在是太火了!Hadoop在2006年開始成為雅虎項目,隨后晉升為頂級Apache開源項目。它是一種通用的分布式系統基礎架構,具有多個組件:Hadoop分布式文件系統(HDFS),它將文件以Hadoop本機格式存儲并在集群中并行化; YARN,協調應用程序運行時的調度程序; MapReduce,這是實際并行處理數據的算法。Hadoop使用Java編程語言構建,其上的應用程序也可以使用其他語言編寫。通過一個Thrift客戶端,用戶可以編寫MapReduce或者Python代碼。
除了這些基本組件外,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以進行調度。
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,不會保留到磁盤,但每一步操作都會將內存中的所有數據保留到磁盤。