Hadoop 資料排序(一)

2021-06-19 02:54:10 字數 2008 閱讀 6287

1、概述

1tb排序通常用於衡量分布式資料處理框架的資料處理能力。terasort是hadoop中的的乙個排序作業。那麼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進行區域性排序,依次輸出結果即可。

Hadoop學習一 Hadoop版本

一.hadoop社群版和發行版 社群版 我們把apache社群一直開發的hadoop稱為社群版。簡單的說就是apache hadoop 發行版 基於apache hadoop的基礎上進行商業改造的解決方案,包含一系列定製的管理工具和軟體。二.hadoop社群版版本號 一直以來,hadoop的版本號一...

Hadoop整理一(初識Hadoop)

1.hadoop目的是讓多台計算機同時解決乙個問題 2.hdfs hadoop distributed file system 分布式儲存系統 是乙個分布式檔案系統,有目錄,目錄下可以儲存檔案 3.hdfs不適合儲存大量小檔案,不適合低延遲資料訪問,不支援多使用者寫入及任意修改檔案 4.使用者命令,...

大資料之Hadoop框架(一)

三 hadoop應用 四 hadoop優勢及意義 quad quad apache hadoop 是乙個開源的,可靠的 reliable 可擴充套件的 scalable 用於大資料儲存 計算 分析的分布式儲存系統和分布式計算框架。quad quad hdfs hadoop distributed f...