Hadoop-MapReduce-TeraSort-大数据排序例子
来源:互联网 发布:linux启动到initramfs 编辑:程序博客网 时间:2024/04/29 04:30
作为分布式数据处理的框架,集群的数据处理能力究竟有多快?或许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
- Hadoop-MapReduce-TeraSort-大数据排序例子
- Hadoop MapReduce做大数据排序
- Hadoop mapreduce 数据去重 数据排序小例子
- hadoop mapreduce数据排序
- hadoop的terasort排序总结
- hadoop mapreduce做数据排序
- hadoop terasort
- 大数据 IMF传奇行动 hadoop 中 开发mapreduce 天气预报的例子
- 大数据之hadoop[MapReduce]学习 笔记
- Hadoop大数据系列---MapReduce代码实战
- 大数据(七)Hadoop-MapReduce
- 大数据-Hadoop-MapReduce (一) 第一性原理
- 利用hadoop mapreduce 做数据排序
- Hadoop MapReduce 编写例子
- hadoop mapreduce 例子
- hadoop MapReduce例子
- hadoop.terasort测试
- Hadoop系列 之Terasort
- bochs调试版本的安装
- 日语学习 N1 单词
- 第一个java程序的心得
- GridView + DropDownList 实现 数据的 通过审查管理
- nsis打包下载地址形式的第三方软件
- Hadoop-MapReduce-TeraSort-大数据排序例子
- 还在自己写代码做数据统计吗,你out了
- SQLServer 2008 技术内幕——T-SQL 查询 笔记
- 工作的经验
- 第2个java程序的心得
- [心得]我收集的部分可以买奶粉的网站
- shtml学习笔记 SSI 指令 语法 详细说明
- 上半年工作总结
- jsp中的过滤器