Hadoop-MapReduce-TeraSort-大資料排序例子
1TB(或1分鐘)排序的冠軍
作為分散式資料處理的框架,叢集的資料處理能力究竟有多快?或許1TB排序可以作為衡量的標準之一。
1TB排序,就是對1TB(1024GB,大約100億行資料)的資料進行排序。2008年, Hadoop贏得1TB排序基準評估第一名 ,排序1TB資料耗時209秒。後來, 1TB排序被1分鐘排序所取代 ,1分鐘排序指的是在一分鐘內儘可能多的排序。 2009年,在一個1406個節點組成的hadoop叢集,在59秒裡對500GB完成了排序;而在1460個節點的叢集,排序1TB資料只花了62秒 。
這麼驚人的資料處理能力,是不是讓你印象深刻呢?呵呵
1. TeraGen生成什麼樣的資料?
1TB的資料?100億條資料?都是什麼樣的資料呢?讓我們來看幾條:
描述一下:每一行,是一條資料。每一條,由2部分組成,前面是一個由10個隨即字元組成的key,後面是一個80個字元組成的value。
排序的任務:按照key的順序排。
那麼1TB的資料從何而來?答案是用程式隨即生成的,用一個只有map,沒有reduce的MapReduce job,在整個叢集上先隨即生成100億行資料。然後,在這個基礎上,再執行排序的MapReduce job,以測試叢集排序效能。
2. TeraSort的工作原理
先說明一點,熟悉MapReduce的人都知道:排序是MapReduce的天然特性!在資料達到reducer之前,mapreduce框架已經對這些資料按鍵排序了。
所以, 在這個排序的job裡,不需要特殊的Mapper和Reducer類。用預設的
IdentityMapper和IdentityReducer即可。
既然排序是天然特性,那麼1TB排序的難點在哪裡呢??答:100億行的資料隨即分散在1000多臺機器上,mapper和reducer都是Identity的,這個難點就在MapReduce的shuffle階段!關鍵在如何取樣和怎麼寫Partitioner。
作為分散式資料處理的框架,叢集的資料處理能力究竟有多快?或許1TB排序可以作為衡量的標準之一。
1TB排序,就是對1TB(1024GB,大約100億行資料)的資料進行排序。2008年, Hadoop贏得1TB排序基準評估第一名 ,排序1TB資料耗時209秒。後來, 1TB排序被1分鐘排序所取代 ,1分鐘排序指的是在一分鐘內儘可能多的排序。 2009年,在一個1406個節點組成的hadoop叢集,在59秒裡對500GB完成了排序;而在1460個節點的叢集,排序1TB資料只花了62秒 。
這麼驚人的資料處理能力,是不是讓你印象深刻呢?呵呵
TeraSort 例子分為3個模組:
1. TeraGen,用於生成排序的原始資料。
2. TeraSort, 用於完成對原始資料的排序工作。
3. TeraValida, 用於完成對排序結果的驗證。
1. TeraGen生成什麼樣的資料?
1TB的資料?100億條資料?都是什麼樣的資料呢?讓我們來看幾條:
- .t^#\|v$2\ 0AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHH
- 75@~?'WdUF 1IIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPP
- w[o||:N&H, 2QQQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXX
- ^Eu)<n#kdP 3YYYYYYYYYYZZZZZZZZZZAAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFF
- +l-$$OE/ZH 4GGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLLLLMMMMMMMMMMNNNNNNNN
- LsS8)|.ZLD 5OOOOOOOOOOPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTTTTUUUUUUUUUUVVVVVVVV
- le5awB.$sm 6WWWWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZAAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDD
- q__[fwhKFg 7EEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHHHHIIIIIIIIIIJJJJJJJJJJKKKKKKKKKKLLLLLLLL
- ;L+!2rT~hd 8MMMMMMMMMMNNNNNNNNNNOOOOOOOOOOPPPPPPPPPPQQQQQQQQQQRRRRRRRRRRSSSSSSSSSSTTTTTTTT
- M^*dDE;6^< 9UUUUUUUUUUVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXYYYYYYYYYYZZZZZZZZZZAAAAAAAAAABBBBBBBB
描述一下:每一行,是一條資料。每一條,由2部分組成,前面是一個由10個隨即字元組成的key,後面是一個80個字元組成的value。
排序的任務:按照key的順序排。
那麼1TB的資料從何而來?答案是用程式隨即生成的,用一個只有map,沒有reduce的MapReduce job,在整個叢集上先隨即生成100億行資料。然後,在這個基礎上,再執行排序的MapReduce job,以測試叢集排序效能。
2. TeraSort的工作原理
先說明一點,熟悉MapReduce的人都知道:排序是MapReduce的天然特性!在資料達到reducer之前,mapreduce框架已經對這些資料按鍵排序了。
所以, 在這個排序的job裡,不需要特殊的Mapper和Reducer類。用預設的
IdentityMapper和IdentityReducer即可。
既然排序是天然特性,那麼1TB排序的難點在哪裡呢??答:100億行的資料隨即分散在1000多臺機器上,mapper和reducer都是Identity的,這個難點就在MapReduce的shuffle階段!關鍵在如何取樣和怎麼寫Partitioner。
好在這個排序的原始碼已近包含在hadoop的examples裡了,下面我們就來分析一下。
在TeraSort原始碼中提供了兩種Partitioner,一種是SimplePartitioner,一種是TotalOrderPartitioner,
SimplePartitioner::GetPartition(),直接對key值的字首做了一些處理,視乎不能保證特定區域的key值分配到特定的bucket.
TotalOrderPartitioner: 是構建了一個3層的字典樹,用key的前兩個byte作為查詢關鍵字,查詢出以2個byte字首的key值應該屬於哪個bucket,應該由哪個reduce去做排序處理。這樣每個reduce的輸出結果就不需要再merge了。
下面博文是對teraGen,teraSort, teraValide進行測試的例子:
http://blog.csdn.net/zklth/article/details/6295517
其中提到的hadoop-0.20.1-examples.jar,在hadoop的release壓縮包裡就有,也可以自己下原始碼編譯。
參考文獻:
http://datacenter.watchstor.com/server-134830.htm
http://blog.csdn.net/zklth/article/details/6295517
相關文章
- Qt表格排序例子QT排序
- 前半有序的大資料排序大資料排序
- 大資料集報表點選表頭排序大資料排序
- angular1資料繫結例子Angular
- MySQL-排序資料MySql排序
- 資料結構高階--八大排序彙總資料結構排序
- 歸併排序,我舉個例子你就看懂了排序
- 資料結構與排序資料結構排序
- 資料庫排序查詢資料庫排序
- .net 對JSON資料排序JSON排序
- 資料結構(python) —— 【18排序: 桶排序】資料結構Python排序
- js 陣列返回,資料排序JS陣列排序
- 資料排序_麥克機試排序
- 資料結構--排序--插入排序--python語言描述資料結構排序Python
- 【資料結構與演算法】非比較排序(計數排序、桶排序、基數排序)資料結構演算法排序
- (戀上資料結構筆記):計數排序、基數排序 、桶排序資料結構筆記排序
- 資料結構32:選擇排序資料結構排序
- 資料結構之計數排序資料結構排序
- GBase8a資料排序優化排序優化
- 資料結構第10章 排序資料結構排序
- 大資料MongoDB之mgo驅動如何對查詢結果進行排序(正序逆序多欄位排序)?大資料MongoDB排序
- 走進大資料,感受大資料大資料
- 【PHP資料結構】插入類排序:簡單插入、希爾排序PHP資料結構排序
- 大資料hadoop資料大資料Hadoop
- 大資料與資訊保安(六)天網系統與大資料 大資料大資料
- 大資料概念:史上最全大資料解析大資料
- 資料結構與演算法——排序資料結構演算法排序
- 分散式資料庫排序及優化分散式資料庫排序優化
- dcat-admin 資料列表排序問題排序
- 諮詢一個資料排序問題排序
- 資料結構第九節(排序(上))資料結構排序
- 《資料結構與演算法》之十大基礎排序演算法資料結構演算法排序
- 資料結構與演算法——排序演算法-歸併排序資料結構演算法排序
- 資料結構與演算法——排序演算法-基數排序資料結構演算法排序
- 資料結構與演算法——排序演算法-氣泡排序資料結構演算法排序
- 資料結構與演算法——排序演算法-選擇排序資料結構演算法排序
- 大資料如何採集資料?大資料的資料從何而來?大資料
- 大資料學習資料大資料
- 大資料筆記01--大資料概述大資料筆記