1. 程式人生 > >Spark和Hadoop作業之間的區別

Spark和Hadoop作業之間的區別

Spark目前被越來越多的企業使用,和Hadoop一樣,Spark也是以作業的形式向叢集提交任務,那麼在內部實現Spark和Hadoop作業模型都一樣嗎?答案是不對的。
  熟悉Hadoop的人應該都知道,使用者先編寫好一個程式,我們稱為Mapreduce程式,一個Mapreduce程式就是一個Job,而一個Job裡面可以有一個或多個Task,Task又可以區分為Map Task和Reduce Task,如下圖所示:

而在Spark中,也有Job概念,但是這裡的Job和Mapreduce中的Job不一樣,它不是作業的最高級別的粒度,在它只上還有Application的概念。我們先來看看Spark文件是怎麼定義Application,Task ,Job和Stage的:

Application:User program built on Spark. Consists of a driver program and executors on the cluster.
Task:A unit of work that will be sent to one executor
Job:A parallel computation consisting of multiple tasks that gets spawned in response to a Spark action (e.g. save, collect); you'll see this term used in the driver's logs.
Stage:Each job gets divided into smaller sets of tasks called stages that depend on each other (similar to the map and reduce stages in MapReduce); you'll see this term used in the driver's logs. 

一個Application和一個SparkContext相關聯,每個Application中可以有一個或多個Job,可以並行或者序列執行Job。 Spark中的一個Action可以觸發一個Job的執行。在Job裡面又包含了多個Stage,Stage是以Shuffle進行劃分的。在Stage 中又包含了多個Task,多個Task構成了Task Set。他們之間的關係如下圖所示:

Mapreduce中的每個Task分別在自己的程序中執行,當該Task執行完的時候,該程序也就結束了。和Mapreduce不一樣的是,Spark中多個Task可以執行在一個程序裡面,而且這個程序的生命週期和Application一樣,即使沒有Job在執行。
  這個模型有什麼好處呢?可以加快Spark的執行速度!Tasks可以快速地啟動,並且處理記憶體中的資料。但是這個模型有的缺點就是粗粒度的資源管理,每個Application擁有固定數量的executor和固定數量的記憶體。

 

轉載於https://www.cnblogs.com/itboys/p/5769027.html