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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hadoop--Shuffle机制

發布時間:2025/3/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hadoop--Shuffle机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • Shuffle機制
  • 一、 Shuffle機制
  • 二、 Partition分區
    • 1. 問題引出
    • 2. 默認partitioner分區
    • 3. 自定義Partitioner步驟
    • 4.分區總結
  • 三、WritableComparable排序
    • 排序概述
    • 排序分類
  • 四、Combiner合并

Shuffle機制

一、 Shuffle機制

Map方法之后,Reduce方法之前的數據處理過程稱為Shuffle。

二、 Partition分區

1. 問題引出

要求將統計結果按照條件輸出到不同文件中(分區)。如統計結果按照手機歸屬地不同省份輸出到不同文件中。

2. 默認partitioner分區

默認分區是根據key的hashCode對ReduceTasks個數取模得到的。用戶沒法控制哪個key存儲到哪個分區。

3. 自定義Partitioner步驟

  • 自定義類繼承Partitioner,重寫getPartition()方法
  • 在Job驅動中,設置自定義Partitioner
  • job.setPartitionerClass(CustomPartitioner.class);
  • 自定義Partitioner后,要根據自定義partitioner的邏輯設置相應數量的ReduceTask。
  • job.setNumReduceTasks(5);

    4.分區總結

  • 如果ReduceTask的數量 > getPartition的結果數,則會多產生幾個空的輸出文件part-r-000xx;

  • 如果1 < ReduceTask的數量 < getPartition的結果數,則有一部分分區數據無地可放,拋出IOException異常;

  • 如果ReduceTask的數量 = 1,則不管MapTask端輸出多少個分區文件,最終結果都交給這一個ReduceTask,也只會產生一個結果文件part-r-00000;

  • 分區號必須從零開始,逐一累加。

  • 🌰:
    假設自定義分區數為5,則

  • job.setNumReduceTasks(1); //正常運行,產生一個輸出文件
  • job.setNumReduceTasks(2); //報錯,拋出IOException異常
  • job.setNumReduceTasks(6); // 大于5,程序正常運行,會產生空文件
  • 三、WritableComparable排序

    排序概述

    為什么要進行排序?

    為了提高效率。

  • 排序是MapReduce框架中最重要的操作之一。
    MapTask和ReduceTask均會對數據按照key進行排序,該操作屬于Hadoop默認行為。任何應用程序中的數據均會被排序,而不管邏輯上是否需要。
    默認排序是按照字典順序排序,且實現該排序的方法是快速排序。

  • 對于MapTask,它會將處理的結果暫時放到環形緩沖區中,當環形緩沖區使用率達到一定閾值后,再對緩沖區中的數據進行一次快速排序,并將這些有序數據溢寫到磁盤上,而當數據處理完畢后,它會對磁盤上所有文件進行歸并排序。

  • 對于ReduceTask,它從每個MapTask上遠程拷貝相應的數據文件,如果文件大小超過一定閾值,則溢寫到磁盤上,否則存儲在內存中。
    如果磁盤上文件數目達到一定閾值,則進行一次歸并排序以生成一個更大文件;如果內存中文件大小或者數目達到一定閾值,則進行一次合并后將數據溢寫到磁盤上。當所有數據拷貝完畢后,ReduceTask統一對內存和磁盤上的所有數據進行一次歸并排序。

  • 排序分類

  • 部分排序
  • MapReduce根據輸入記錄的鍵對數據集排序。保證輸出的每個文件內部有序。

  • 全排序
  • 最終輸出結果只有一個文件,且文件內部有序。實現方式是只設置一個ReduceTask。但該方法在處理大型文件時效率極低,因為一臺機器處理所有文件,完全喪失了MapReduce所提供的并行架構。

  • 輔助排序: (GroupingComparator分組)
  • 在Reduce端對key進行分組。應用于:在接收的key為bean對象時,想讓一個或幾個字段相同(全部字段比較不相同)的key進入到同一個reduce方法時,可以采用分組排序。

  • 二次排序
  • 在自定義排序過程中,如果compareTo中的判斷條件為兩個即為二次排序。

    四、Combiner合并

  • Combiner是MR程序中Mapper和Reducer之外的一種組件;
  • Combiner組件的父類就是Reducer;
  • Combiner和Reducer的區別在于運行的位置;
    Combiner是在每一個MapTask所在的節點運行;
    Reducer是接收全局所有Mapper的輸出結果;
  • Combiner的意義就是對每一個MapTask的輸出進行局部匯總,以減少網絡傳輸量;
  • Combiner能夠應用的前提是不能影響最終的業務邏輯,而且,Combiner的輸出應該跟Reducer的輸入kv類型要對應起來。
  • 🌰:
    要求兩個MapTask的平均值,如果提前在Mapper階段開啟了Combiner,

    Mapper:
    MapTask1: 3 5 7 -> (3+5+7)/3=5,
    MapTask2: 2 6 -> (2+6)/2=4,

    Reducer:
    將所有數據都拷貝到reducer端后求平均值:(3+5+7+2+6)/5=23/5 不等于(5+4)/2=9/2;

    所以針對求和可以使用Combiner合并,針對求平均值不可。

    總結

    以上是生活随笔為你收集整理的hadoop--Shuffle机制的全部內容,希望文章能夠幫你解決所遇到的問題。

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