Hadoop中TeraSort演算法分析

2021-06-16 05:55:30 字數 2126 閱讀 6766

1、概述

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

2、演算法思想

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

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

3、terasort演算法

3.1  terasort演算法流程

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

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

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

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

3.2    terasort演算法關鍵點

(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

如果reduce task個數為4,則分割點為:abd,bcd,mnk

(2)map task對資料記錄做標記

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

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

(3)reduce task進行區域性排序

每個reduce task進行區域性排序,依次輸出結果即可。

4、參考資料

(1) hadoop的1tb排序terasort:

(2)hadoop-0.20.2**

(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《轉》

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