1. 程式人生 > >MapReduce端的二次排序以及對移動計算而不是移動資料的理解

MapReduce端的二次排序以及對移動計算而不是移動資料的理解

1.其實MapReduce的二次排序是我們定義的sort排序會執行兩遍,第一遍是在map端執行,針對一個map任務的(當partition之後的將資料寫入到記憶體緩衝區的時候,達到記憶體緩衝區的80%的時候就會spill到disk,此時disk是作為硬碟快取的,所以我們的資料在硬碟上可以sort排序,而且在map執行完任務之後資料就不見了),那麼當程式執行到reduce之後,reduce端shuffle首先會將各個map端的資料都抓取到reduce端的記憶體緩衝區中,等達到記憶體緩衝區的80%的時候就會溢位到硬碟,硬碟作為記憶體緩衝區,在這裡會第二次執行我們寫的sort排序,也就是二次排序!這就是有名的二次排序!

2.不要再認為sort+group是二次排序了,group的作用就是一次性將同一組資料交給一個reduce任務處理!

3.這裡需要強調的是:map任務不是隨隨便便地分配給某個TaskTracker的,這裡有個概念叫:資料本地化(Data-Local)。意思是:將map任務分配給含有該map處理的資料塊的TaskTracker上,同時將程式JAR包複製到該TaskTracker上來執行,這叫“運算移動,資料不移動”。而分配reduce任務時並不考慮資料本地!


上面也就是說,移動計算而不是移動資料實際上是針對shuffle之前的map端而言的,而不是針對reduce端而言的!

相關推薦

MapReduce排序以及移動計算移動資料理解

, 1.其實MapReduce的二次排序是我們定義的sort排序會執行兩遍,第一遍是在map端執行,針對一個map任務的(當partition之後的將資料寫入到記憶體緩衝區的時候,達到記憶體緩衝區的80%的時候就會spill到disk,此時disk是作為硬碟快取的,所以我們

mapreduce排序

大數據 hadoop 二次排序 mapreduce 一: 理解二次排序的功能, 使用自己理解的方式表達(包括自定義數據類型,分區,分組,排序) 二: 編寫實現二次排序功能, 提供源碼文件。 三:理解mapreduce join 的幾種 方式,編碼實現reduce join,提供源代碼,說出

MapReduce排序

  這裡介紹二次排序的思路整理,並附上具體程式碼     首先要明確二次排序的基本概念:在我們所之前所熟悉的排序稱為一次排序,即只對key進行排序       所以二次排序的概念在原來的基礎上便不難理解,即對key進行排序的同時對

MySQL階段提交以及xtrabackup如何保證備份丟失資料

MySQL二階段提交與xtrabackup如何保證備份不丟失資料 MySQL二階段提交與crash recovery 1. MySQL二階段提交 2. crash recovery的實現 xtrabackup如何實現資料不丟失 1.

Hadoop Mapreduce分割槽、分組、連線以及輔助排序(也叫排序)過程詳解

package com.hadoop; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import or

MapReduce程序之排序與多排序

大數據 Hadoop MapReduce Java [toc] MapReduce程序之二次排序與多次排序 需求 有下面的數據: cookieId time url 2 12:12:34 2_hao123 3 09:10:34 3_baidu 1 15:0

MapReduce排序

必須 .lib rec settime string == 技術分享 字段排序 protect 一、背景   按照年份升序排序,同時每一年中溫度降序排序   data文件為1949年-1955年每天的溫度數據。   要求:1、計算1949-1955年,每年溫度最高的時間  

關於MapReduce排序的一點解答

網上 hash 使用 table 為什麽 exti 而且 分區 ret 上一篇博客說明了怎麽自定義Key,而且用了二次排序的例子來做測試,但沒有詳細的說明二次排序,這一篇說詳細的說明二次排序,為了說明曾經一個思想的誤區,特地做了一個3個字段的二次排序來說明。後面稱其為“三次

Hadoop MapReduce排序演算法與實現之演算法解析

MapReduce二次排序的原理     1.在Mapper階段,會通過inputFormat的getSplits來把資料集分割成split public abstract class Input

Python Hadoop Mapreduce 實現Hadoop Streaming分組和排序

需求:公司給到一份全國各門店銷售資料,要求:1.按門店市場分類,將同一市場的門店放到一起;2.將各家門店按銷售額從大到小,再按利潤從大到小排列 一 需求一:按市場對門店進行分組 分組(partition) Hadoop streaming框架預設情況下會以’/t

結合案例講解MapReduce重要知識點 ------- 使用自定義MapReduce資料型別實現排序

自定義資料型別SSData import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.WritableCompa

Hadoop排序MapReduce處理流程例項詳解

一、概述 MapReduce框架對處理結果的輸出會根據key值進行預設的排序,這個預設排序可以滿足一部分需求,但是也是十分有限的,在我們實際的需求當中,往往有要對reduce輸出結果進行二次排序的需求。對於二次排序的實現,網路上已經有很多人分享過了,但是對二次排序的實現原理

Hadoop Mapreduce分割槽、分組、排序過程詳解[轉]

徐海蛟 教學用途 1、MapReduce中資料流動    (1)最簡單的過程:  map - reduce    (2)定製了partitioner以將map的結果送往指定reducer的過程: map - partition - reduce    (3)增加了在本地先進性一次reduce(優化)過程: 

mapreduce程式設計(一)-排序

mr自帶的例子中的原始碼SecondarySort,我重新寫了一下,基本沒變。 這個例子中定義的map和reduce如下,關鍵是它對輸入輸出型別的定義:(java泛型程式設計)  public static class Map extends Mapper<LongW

Hadoop鏈式MapReduce、多維排序、倒排索引、自連線演算法、排序、Join效能優化、處理員工資訊Join實戰、URL流量分析、TopN及其排序、求平均值和最大最小值、資料清洗ETL、分析氣

Hadoop Mapreduce 演算法彙總  第52課:Hadoop鏈式MapReduce程式設計實戰...1 第51課:Hadoop MapReduce多維排序解析與實戰...2 第50課:HadoopMapReduce倒排索引解析與實戰...3 第49課:Hado

MapReduce排序原理和實現

/** * 自己定義的key類應該實現WritableComparable介面 */ public class IntPair implements WritableComparable<IntPair>{ int first;//第一個成員變數 int second;//第二個成員變數 p

hadoop平臺使用python編寫mapreduce排序小程式

接上一個博文的環境 使用的是官網的專利使用資料,這裡只截取了一部分 3858241,956203 3858241,1324234 3858241,3398406 3858241,3557384 38

MapReduce-三排序-曾經想不通的排序

上一篇部落格說明了怎麼自定義Key,而且用了二次排序的例子來做測試,但沒有詳細的說明二次排序,這一篇說詳細的說明二次排序,為了說明曾經一個思想的誤區,特地做了一個3個欄位的二次排序來說明。後面稱其為“三次排序”。 測試資料: a1,b2,c5 a4,b1,c3 a1,b2,

Mapreduce中的 自定義型別、分組與排序

0、需求說明 資料格式 期望輸出的結果 做簡單分析: a. 由於只有兩列,所以可以將map的InputFormat設定為KeyValueTextInputFormat b. 事實上這裡實現了兩個排序,即對輸出的k

MapReduce排序排序

一:背景 Hadoop中雖然有自動排序和分組,由於自帶的排序是按照Key進行排序的,有些時候,我們希望同時對Key和Value進行排序。自帶的排序功能就無法滿足我們了,還好Hadoop提供了一些元件可以讓開發人員進行二次排序。 二:技術實現 我們先來看案例需求 #需求1: