日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剖析Hadoop和Spark的Shuffle过程差异(一)

發布時間:2025/3/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剖析Hadoop和Spark的Shuffle过程差异(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  一、前言
  
  對于基于MapReduce編程范式的分布式計算來說,本質上而言,就是在計算數據的交、并、差、聚合、排序等過程。而分布式計算分而治之的思想,讓每個節點只計算部分數據,也就是只處理一個分片,那么要想求得某個key對應的全量數據,那就必須把相同key的數據匯集到同一個Reduce任務節點來處理,那么Mapreduce范式定義了一個叫做Shuffle的過程來實現這個效果。
  
  二、編寫本文的目的
  
  本文旨在剖析Hadoop和Spark的Shuffle過程,并對比兩者Shuffle的差異。
  
  三、Hadoop的Shuffle過程
  
  Shuffle描述的是數據從Map端到Reduce端的過程,大致分為排序(sort)、溢寫(spill)、合并(merge)、拉取拷貝(Copy)、合并排序(merge sort)這幾個過程,大體流程如下:
  
  上圖的Map的輸出的文件被分片為紅綠藍三個分片,這個分片的就是根據Key為條件來分片的,分片算法可以自己實現,例如Hash、Range等,最終Reduce任務只拉取對應顏色的數據來進行處理,就實現把相同的Key拉取到相同的Reduce節點處理的功能。下面分開來說Shuffle的的各個過程。
  
  Map端做了下圖所示的操作:
  
  1、Map端sort
  
  Map端的輸出數據,先寫環形緩存區kvbuffer,當環形緩沖區到達一個閥值(可以通過配置文件設置,默認80),便要開始溢寫,但溢寫之前會有一個sort操作,這個sort操作先把Kvbuffer中的數據按照partition值和key兩個關鍵字來排序,移動的只是索引數據,排序結果是Kvmeta中數據按照partition為單位聚集在一起,同一partition內的按照key有序。
  
  2、spill(溢寫)
  
  當排序完成,便開始把數據刷到磁盤,刷磁盤的過程以分區為單位,一個分區寫完,寫下一個分區,分區內數據有序,最終實際上會多次溢寫,然后生成多個文件
  
  3、merge(合并)
  
  spill會生成多個小文件,對于Reduce端拉取數據是相當低效的,那么這時候就有了merge的過程,合并的過程也是同分片的合并成一個片段(segment),最終所有的segment組裝成一個最終文件,那么合并過程就完成了,如下圖所示
  
  至此,Map的操作就已經完成,Reduce端操作即將登場
  
  Reduce操作
  
  總體過程如下圖的紅框處:
  
  1、拉取拷貝(fetch copy)
  
  Reduce任務通過向各個Map任務拉取對應分片。這個過程都是以Http協議完成,每個Map節點都會啟動一個常駐的HTTP server服務,Reduce節點會請求這個Http Server拉取數據,這個過程完全通過網絡傳輸,所以是一個非常重量級的操作。
  
  2、合并排序
  
  Reduce端,拉取到各個Map節點對應分片的數據之后,會進行再次排序,排序完成,結果丟給Reduce函數進行計算。
  
  四、總結
  
  至此整個shuffle過程完成,最后總結幾點:
  
  Regcode.prototype.draw = function(dom, callback = function (www.yongshiyule178.com/) {}) { // 繪圖
  
  // 獲取canvas dom
  
  if (!this.paint) { // 如果沒有2d對象,再進行賦值操作
  
  this.canvas = dom; // 保存到this指針,方便使用
  
  if (!this.canvas) return;
  
  this.paint =www.enzuo178.com this.canvas.getContext(www.yingka178.com'2d'); // 保存到this指針,方便使用
  
  if (!this.paint) return;
  
  // 回調函數賦值給this,方便使用
  
  this.callback = callback;
  
  }
  
  // 隨機畫布顏色,使用背景色
  
  let colors = this.getColor(this.www.huarenyl.cn backgroundColor);
  
  this.paint.fillStyle = www.maituyul1.cn`rgba(${colors[www.tiaotiaoylzc.com]}, ${colors[www.dfgjpt.com]}, ${colors[2]}, 0.8)`;
  
  // 繪制畫布
  
  this.paint.fillRect(0, 0, this.canvas.width,www.yongshi123.cn this.canvas.height);
  
  1、shuffle過程就是為了對key進行全局聚合
  
  2、排序操作伴隨著整個shuffle過程,所以Hadoop的shuffle是sort-based的

轉載于:https://www.cnblogs.com/qwangxiao/p/10485121.html

總結

以上是生活随笔為你收集整理的剖析Hadoop和Spark的Shuffle过程差异(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。