1. 程式人生 > >mapreduce與spark的區別--內容詳細

mapreduce與spark的區別--內容詳細

Hadoop MapReduce採用了多程序模型,而Spark採用了多執行緒模型:

Apache Spark的高效能一定程度上取決於它採用的非同步併發模型(這裡指server/driver 端採用的模型),這與Hadoop 2.0(包括YARN和MapReduce)是一致的。Hadoop 2.0自己實現了類似Actor的非同步併發模型,實現方式是epoll+狀態機,而Apache Spark則直接採用了開源軟體Akka,該軟體實現了Actor模型,效能非常高。儘管二者在server端採用了一致的併發模型,但在任務級別(特指 Spark任務和MapReduce任務)上卻採用了不同的並行機制:Hadoop MapReduce採用了多程序模型,而Spark採用了多執行緒模型。

注意,本文的多程序和多執行緒,指的是同一個節點上多個任務的執行模 式。無論是MapReduce和Spark,整體上看,都是多程序:MapReduce應用程式是由多個獨立的Task程序組成的;Spark應用程式的 執行環境是由多個獨立的Executor程序構建的臨時資源池構成的。

多程序模型便於細粒度控制每個任務佔用的資源,但會消耗較多的啟動時間,不適合執行低延遲型別的作業,這是MapReduce廣為詬病的原因之一。而多執行緒模型則相反,該模型使得Spark很適合執行低延遲型別的作業。總之,Spark同節點上的任務以多執行緒的方式執行在一個JVM程序中,可帶來以下好處:

1)任務啟動速度快,與之相反的是MapReduce Task程序的慢啟動速度,通常需要1s左右;

2)同節點上所有任務執行在一個程序中,有利於共享記憶體。這非常適合記憶體密集型任務,尤其對於那些需要載入大量詞典的應用程式,可大大節省記憶體。

3) 同節點上所有任務可執行在一個JVM程序(Executor)中,且Executor所佔資源可連續被多批任務使用,不會在執行部分任務後釋放掉,這避免 了每個任務重複申請資源帶來的時間開銷,對於任務數目非常多的應用,可大大降低執行時間。與之對比的是MapReduce中的Task:每個Task單獨 申請資源,用完後馬上釋放,不能被其他任務重用,儘管1.0支援JVM重用在一定程度上彌補了該問題,但2.0尚未支援該功能。

儘管Spark的過執行緒模型帶來了很多好處,但同樣存在不足,主要有:

1)由於同節點上所有任務執行在一個程序中,因此,會出現嚴重的資源爭用,難以細粒度控制每個任務佔用資源。與之相 反的是MapReduce,它允許使用者單獨為Map Task和Reduce Task設定不同的資源,進而細粒度控制任務佔用資源量,有利於大作業的正常平穩執行。

下面簡要介紹MapReduce的多程序模型和Spark的多執行緒模型。

1.MapReduce多程序模型

mapreduce採用多程序與spark採用多執行緒比較

1) 每個Task執行在一個獨立的JVM程序中;

2) 可單獨為不同型別的Task設定不同的資源量,目前支援記憶體和CPU兩種資源;

3) 每個Task執行完後,將釋放所佔用的資源,這些資源不能被其他Task複用,即使是同一個作業相同型別的Task。也就是說,每個Task都要經歷“申請資源—> 執行Task –> 釋放資源”的過程。

2.Spark多執行緒模型

mapreduce採用多程序與spark採用多執行緒比較

1) 每個節點上可以執行一個或多個Executor服務;

2) 每個Executor配有一定數量的slot,表示該Executor中可以同時執行多少個ShuffleMapTask或者ReduceTask;

3) 每個Executor單獨執行在一個JVM程序中,每個Task則是執行在Executor中的一個執行緒;

4) 同一個Executor內部的Task可共享記憶體,比如通過函式SparkContext#broadcast廣播的檔案或者資料結構只會在每個Executor中載入一次,而不會像MapReduce那樣,每個Task載入一次;

5) Executor一旦啟動後,將一直執行,且它的資源可以一直被Task複用,直到Spark程式執行完成後才釋放退出。

總體上看,Spark採用的是經典的scheduler/workers模式, 每個Spark應用程式執行的第一步是構建一個可重用的資源池,然後在這個資源池裡執行所有的ShuffleMapTask和ReduceTask(注 意,儘管Spark程式設計方式十分靈活,不再侷限於編寫Mapper和Reducer,但是在Spark引擎內部只用兩類Task便可表示出一個複雜的應用 程式,即ShuffleMapTask和ReduceTask),而MapReduce應用程式則不同,它不會構建一個可重用的資源池,而是讓每個 Task動態申請資源,且執行完後馬上釋放資源。

相關推薦

mapreducespark區別--內容詳細

Hadoop MapReduce採用了多程序模型,而Spark採用了多執行緒模型: Apache Spark的高效能一定程度上取決於它採用的非同步併發模型(這裡指server/driver 端採用的模型),這與Hadoop 2.0(包括YARN和MapReduce)是一致的

StormSpark區別

Storm擅長於動態處理大量實時生產的小資料塊,概念上是將小資料量的資料來源源不斷傳給過程; Spark擅長對現有的資料全集做處理,概念是將過程傳給大資料量的資料。 二者設計思路相反。Storm側重於處理的實時性,Spark側重處理龐大資料(類似於Hadoop的MR)。   Spark流模組

4.mapreducespark的優虐

MapReduce存在的問題1. MapReduce框架侷限性  1)僅支援Map和Reduce兩種操作  2)處理效率低效。    a)Map中間結果寫磁碟,Reduce寫HDFS,多個MR之間通過HDFS交換資料; 任務排程和啟動開銷大;    b)無法充分利用記憶體    c)Map端和Reduce端均

MapReduce---之spark區別

Mapreduce和spark是資料處理層兩大核心,瞭解和學習大資料必須要重點掌握的環節,根據自己的經驗和大家做一下知識的分享。   首先了解一下Mapreduce,它最本質的兩個過程就是Map和Reduce,Map的應用在於我們需要資料一對一的元素的對映轉換,比如說進行擷取,進行

spark中mapmapPartitions區別

part print map spark 偽代碼 一個 數據 最終 partition 在spark中,map與mapPartitions兩個函數都是比較常用,這裏使用代碼來解釋一下兩者區別 import org.apache.spark.{SparkConf, Spar

@Autowired註解@resource註解的區別(十分詳細)

背景: 今天下班路上看到一個大貨車,於是想到了裝配,然後腦海裡跳出了一個註解@Autowired(自動裝配),於是又想到最近工作專案用的都是@Resource註解來進行裝配。於是本著學什麼東西都要一鑽到底才能從菜鳥變大神的精神!!我就認真研究了一下,在此總結一波。以下內容先分別解釋一下兩個註解,再進行共同點

Hadoop MapReduce 關係型資料庫的區別

在比較兩者的區別之前,首先應該清楚,兩者的應用場景不同,在工業工程中兩者是互相補充的角色。 為什麼關係型資料庫不能通過增加磁碟的方式來擴充分析能力,而hadoop卻需要這麼做呢?原因在於,關係型資料庫主要應用於大量細粒化讀寫和更新資料的場景,而hadoop則主要用於批量讀寫

rem、em、px的區別詳細介紹rempx的轉換

PX:px畫素(Pixel)。相對長度單位。畫素px是相對於顯示器螢幕解析度而言的。EM:em是相對長度單位,相對於當前物件內文字的字型尺寸。如當前對行內文字的字型尺寸未被設定,則相對於瀏覽器的預設字型尺寸。注意:em的值是不固定的,em會繼承父元素的字型大小REM:rem是

thriftserverspark application的區別

一.ThriftServer介紹 ThriftServer是一個JDBC/ODBC介面,使用者可以通過JDBC/ODBC連線ThriftServer來訪問SparkSQL的資料。ThriftServer在啟動的時候,會啟動了一個sparkSQL的應用程式,而通過JDBC/ODBC連線進來

HadoopSpark區別

有以下四個不同: 1. 解決問題的層面不一樣 Hadoop和Apache Spark兩者都是大資料框架,但是各自存在的目的不盡相同。Hadoop實質上更多是一個分散式資料基礎設施: 它將巨大的資料集分派到一個由普通計算機組成的叢集中的多個節點進行儲存,意味著

hadoop1.xhadoop2.x在HDFS和MapReduce上的區別

HDFS改進  ·hadoop1.x的HDFS體系架構          在Hadoop1.x中的NameNode只可能有一個,雖然可以通過SecondaryNameNode與NameNode進行資料同步備份,但是總會存在一定的延時,如果NameNode掛掉,但是如果有部份

面試必問題目:轉發重定向的區別——最詳細的回答

在servlet中呼叫轉發: request.getRequestDispatcher("new.jsp").forward(request,response);//轉發到new.jsp 在servlet中呼叫重定向: response.sendRedirect("new.jsp");/

關於構建私人git伺服器以及gitgithub的區別詳細介紹

it專案開發往往都是團隊來完成的各有分工,那麼在生產的過程中為了更好的將每個人完成的地方完美的搭配起來,公司大多會採用比較合適的團隊協作工具,早起svn的使用很普遍,近年出現了github社群之後很多公司轉而使用git倉庫進行高效的程式碼協作以及版本控制。 也就是說當一

FlinkSpark Streaming在kafka結合的區別

本文主要是想聊聊flink與kafka結合。當然,單純的介紹flink與kafka的結合呢,比較

@Autowired @Resource的區別詳細

不用 數據庫 聲明式 構造 eve ring 自動註入 post 方法 參考博文: http://www.cnblogs.com/happyyang/articles/3553687.html http://blog.csdn.net/revent/article/deta

spark RDD 的mapflatmap區別說明

HDFS到HDFS過程看看map 和flatmap的位置Flatmap 和map 的定義 map()是將函式用於RDD中的每個元素,將返回值構成新的RDD。flatmap()是將函式應用於RDD中的每個元素,將返回的迭代器的所有內容構成新的RDD例子:val rdd = sc

mongodbmysql區別(超詳細

MySQL是關係型資料庫。   優勢:在不同的引擎上有不同 的儲存方式。查詢語句是使用傳統的sql語句,擁有較為成熟的體系,成熟度很高。開源資料庫的份額在不斷增加,mysql的份額頁在持續增長。   缺點:在海量資料處理的時候效率會顯著變慢。Mongodb是非關係型資料庫(n

MapReduceYarn 的詳細工作流程分析

MapReduce詳細工作流程之Map階段 如上圖所示 首先有一個200M的待處理檔案 切片:在客戶端提交之前,根據引數配置,進行任務規劃,將檔案按128M每塊進行切片 提交:提交可以提交到本地工作環境或者Yarn工作環境,本地只需要提交切片資訊和xml配置檔案,Yarn環境還需要提交jar包;本地

簡要MRSpark在Shuffle區別

**一、區別** ①本質上相同,都是把Map端資料分類處理後交由Reduce的過程。 ②資料流有所區別,MR按map, spill, merge, shuffle, sort, r educe等各階段逐一實現。Spark基於DAG資料流,可實現更復雜資料流操作(根據寬/窄依賴實現) ③實現功能上有所區

HAProxyNginx區別

時間 請求 也會 維護 異常 會有 訪問 haproxy 失敗 1)HAProxy對於後端服務器一直在做健康檢測(就算請求沒過來的時候也會做健康檢查):後端機器故障發生在請求還沒到來的時候,haproxy會將這臺故障機切掉,但如果後端機器故障發生在請求到達期間,那麽前端訪問