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排序
- [Shell] Sort排序的例子排序
- ColdFusion向資料庫插入資料例子資料庫
- 大資料集報表點選表頭排序大資料排序
- 大資料,大資料,大資料大資料
- 資料結構高階--八大排序彙總資料結構排序
- MySQL-排序資料MySql排序
- angular1資料繫結例子Angular
- java操作 mongo DB 資料庫例子JavaGo資料庫
- oracle bbed修改資料塊的例子Oracle
- MongoDB之資料查詢(資料排序)MongoDB排序
- 兩個例子(來自Storm實戰 構建大資料實時計算)ORM大資料
- 資料結構(python) —— 【18排序: 桶排序】資料結構Python排序
- 資料結構與排序資料結構排序
- 資料庫排序查詢資料庫排序
- 【資料結構】希爾排序!!!資料結構排序
- 【資料結構】希爾排序資料結構排序
- 【資料結構】堆排序資料結構排序
- 【資料結構】快速排序資料結構排序
- mysql資料庫姓名排序MySql資料庫排序
- JDBC連線三種資料庫例子JDBC資料庫
- 複習資料結構:排序(一)——插入排序資料結構排序
- 複習資料結構:排序(三)——選擇排序資料結構排序
- 歸併排序,我舉個例子你就看懂了排序
- json listView 資料請求解析小例子JSONView
- asp.net連線Access資料庫例子ASP.NET資料庫
- 一段讀取資料表的例子
- ColdFusion如何從資料庫讀取資訊例子資料庫
- 使用oracle sqlldr匯入文字資料的例子OracleSQL
- 資料庫慢方法論二 ——一個例子資料庫
- 【資料結構】歸併排序!!!資料結構排序
- .net 對JSON資料排序JSON排序
- List資料多重規則排序排序
- 【資料結構】選擇排序!!!資料結構排序
- mysql資料去重和排序MySql排序
- 【資料結構】氣泡排序資料結構排序
- 【資料結構】選擇排序資料結構排序