Hadoop中Terasort演算法分析1《轉》

2021-06-17 22:12:15 字數 2241 閱讀 1034

hadoop中terasort演算法分析

1、概述

1tb排序通常用於衡量分布式資料處理框架的資料處理能力。terasort是hadoop中的的乙個排序作業,在2023年,hadoop在1tb排序基準評估中贏得第一名,耗時209秒。那麼terasort在hadoop中是怎樣實現的呢?本文主要從演算法設計角度分析terasort作業。

2、演算法思想

實際上,當我們要把傳統的序列排序演算法設計成並行的排序演算法時,通常會想到分而治之的策略,即:把要排序的資料劃成m個資料塊(可以用hash的方法做到),然後每個maptask對乙個資料塊進行區域性排序,之後,乙個reducetask對所有資料進行全排序。這種設計思路可以保證在map階段並行度很高,但在reduce階段完全沒有並行。

為了提高reduce階段的並行度,terasort作業對以上演算法進行改進:在map階段,每個maptask都會將資料劃分成r個資料塊(r為reducetask個數),其中第i(i>0)個資料塊的所有資料都會比第i+1個中的資料大;在reduce階段,第i個reducetask處理(進行排序)所有maptask的第i塊,這樣第i個reducetask產生的結果均會比第i+1個大,最後將1~r個reducetask的排序結果順序輸出,即為最終的排序結果。這種設計思路很明顯比第一種高效,但實現難度較大,它需要解決以下兩個技術難點:第一,如何確定每個maptask資料的r個資料塊的範圍?第二,對於某條資料,如果快速的確定它屬於哪個資料塊?答案分別為【取樣】和【trie樹】。

3、terasort演算法

3.1terasort演算法流程

對於hadoop的terasort排序演算法,主要由3步組成:取樣–>>maptask對於資料記錄做標記–>>reducetask進行區域性排序。

資料取樣在jobclient端進行,首先從輸入資料中抽取一部分資料,將這些資料進行排序,然後將它們劃分成r個資料塊,找出每個資料塊的資料上限和下線(稱為「分割點」),並將這些分割點儲存到分布式快取中。

在map階段,每個maptask首先從分布式快取中讀取分割點,並對這些分割點建立trie樹(兩層trie樹,樹的葉子節點上儲存有該節點對應的reducetask編號)。然後正式開始處理資料,對於每條資料,在trie樹中查詢它屬於的reducetask的編號,並儲存起來。

在reduce階段,每個reducetask從每個maptask中讀取其對應的資料進行區域性排序,最後將reducetask處理後結果按reducetask編號依次輸出即可。

3.2terasort演算法關鍵點(1)取樣

hadoop自帶了很多資料取樣工具,包括intercalsmapler,randomsampler,splitsampler等(具體見org.apache.hadoop.mapred.lib)。

取樣資料條數:samplesize=conf.getlong(「terasort.partitions.sample」,100000);

選取的split個數:samples=math.min(10,splits.length);splits是所有split組成的陣列。每個split提取的資料條數:recordspersample=samplesize/samples;

對取樣的資料進行全排序,將獲取的「分割點」寫到檔案_partition.lst中,並將它存放到分布式快取區中。

舉例說明:比如取樣資料為b,abc,abd,bcd,abcd,efg,hii,afd,rrr,mnk經排序後,得到:abc,abcd,abd,afd,b,bcd,efg,hii,mnk,rrr如果reducetask個數為4,則分割點為:abd,bcd,mnk(2)maptask對資料記錄做標記

每個maptask從檔案_partition.lst讀取分割點,並建立trie樹(假設是2-trie,即組織利用前兩個位元組)。

maptask從split中一條一條讀取資料,並通過trie樹查詢每條記錄所對應的reducetask編號。比如:abg對應第二個reducetask,mnz對應第四個reducetask。

(3)reducetask進行區域性排序

每個reducetask進行區域性排序,依次輸出結果即可。4、參考資料

(1)hadoop的1tb排序terasort:

**(3)

Hadoop中TeraSort演算法分析

本文 1 概述 1tb排序通常用於衡量分布式資料處理框架的資料處理能力。terasort是hadoop中的的乙個排序作業,在2008年,hadoop在1tb排序基準評估中贏得第一名,耗時209秒。那麼terasort在hadoop中是怎樣實現的呢?本文主要從演算法設計角度分析terasort作業。2...

Hadoop中TeraSort演算法分析

1 概述 1tb排序通常用於衡量分布式資料處理框架的資料處理能力。terasort是hadoop中的的乙個排序作業,在2008年,hadoop在1tb排序基準評估中贏得第一名 耗時209秒。那麼terasort在hadoop中是怎樣實現的呢?本文主要從演算法設計角度分析terasort作業。2 演算...

Hadoop中TeraSort演算法分析

1 概述 1tb排序通常用於衡量分布式資料處理框架的資料處理能力。terasort是hadoop中的的乙個排序作業,在2008年,hadoop在1tb排序基準評估中贏得第一名 耗時209秒。那麼terasort在hadoop中是怎樣實現的呢?本文主要從演算法設計角度分析terasort作業。2 演算...