三大分布式計算系統
- Hadoop適合處理離線的靜態的大數據;
- Spark適合處理離線的流式的大數據;
- Storm/Flink適合處理在線的實時的大數據。
前言
Spark,是分布式計算平台,是一個用scala語言編寫的計算框架,基於內存的快速、通用、可擴展的大數據分析引擎。
Hadoop,是分布式管理、存儲、計算的生態系統;包括HDFS(存儲)、MapReduce(計算)、Yarn(資源調度)。
Hadoop和Apache Spark都是當今蓬勃發展的開源大數據框架。盡管Hadoop和Spark並沒有做同樣的事情,但是它們是相互關聯的。大數據處理無處不在Hadoop的需求。
但是,盡管Hadoop具有許多重要的功能和數據處理優勢,但它仍存在一個主要缺點。Hadoop的本地批處理引擎MapReduce不如Spark快。
這就是Spark超越Hadoop的優勢。除此之外,當今大多數大數據項目都需要批處理工作負載以及實時數據處理。Hadoop的MapReduce並不適合它,只能處理批處理數據。
此外,當需要低延遲處理大量數據時,MapReduce無法做到這一點。因此,我們需要在Hadoop之上運行Spark。借助其混合框架和彈性分布式數據集(RDD),可以在運行Spark時將數據透明地存儲在內存中。
需要Hadoop運行Spark
Hadoop和Spark不是互斥的,可以一起工作。沒有Spark,就不可能在Hadoop中進行實時,快速的數據處理。另一方面,Spark沒有用於分布式存儲的任何文件系統。
但是,許多大數據項目需要處理數PB的數據,這些數據需要存儲在分布式存儲中。因此,在這種情況下,Hadoop的分布式文件系統(HDFS)與資源管理器YARN一起使用。
因此,如果使用HDFS在分布式模式下運行Spark,則可以通過連接集群中的所有項目來獲得最大的收益。因此,HDFS是Hadoop在分布式模式下運行Spark的主要需求。
您可以在獨立模式下在沒有Hadoop的情況下運行Spark
Spark和Hadoop更好地結合在一起Hadoop對於運行Spark並不是必不可少的。如果查看Spark文檔,則提到如果以Standalone(獨立模式)運行Spark,則不需要Hadoop。
在這種情況下,您僅需要Mesos之類的資源管理器。此外,只要您不需要Hadoop生態系統中的任何庫,就可以在沒有Hadoop的情況下運行Spark,並在具有Mesos的Hadoop群集上獨立運行。
沒有HDFS的情況下如何運行Spark?
HDFS只是Spark支持的文件系統之一,而不是最終答案。 Spark是集群計算系統,而不是數據存儲系統。運行數據處理所需的全部就是一些外部數據存儲源來存儲和讀取數據。
它可能是您桌面上的本地文件系統。此外,除非您在HDFS中使用任何文件路徑,否則無需運行HDFS。但是,Spark On Yarn 必須要運行HDFS,因為會使用HDFS存儲臨時文件。
結論
因此, 我們得出結論, 我們可以在沒有Hadoop的情況下運行Spark 。但是,如果我們在HDFS或類似文件系統上運行Spark,
則可以實現數據處理的最大利益。而且,Spark和Hadoop都是開源的,由Apache維護。因此它們彼此兼容。此外,使用第三方文件系統解決方案設置Spark可能會很復雜。
因此,很容易將Spark與Hadoop集成,在Hadoop之上運行Spark是最好的解決方案。