Hadoop中TeraSort算法分析

测试眼里的Hadoop系列 之Terasort TeraSortHadoop的测试中很有用的一个工具,但以前只是粗略的知道它的功能和用法,简单的用它做了几个测试用例。实际上,对于这种比较通用的工具,如果能够了解它更多一些的话,对于理解Hadoop是很有帮助的,同时也可以更好的利用它来帮助测试。最近有点时间,就了解了一些它的背景,代码实现原理等等,就先记录下来吧。 1. Hadoop与Sort Benchmarks SortBenchmar 阅读详情

1、概述

1TB排序通常用于衡量分布式数据处理框架的数据处理能力。Terasort是Hadoop中的的一个排序作业,在2008年,Hadoop在1TB排序基准评估中赢得第一名 ,耗时209秒。那么Terasort在Hadoop中是怎样实现的呢?本文主要从算法设计角度分析Terasort作业。

2、算法思想

实际上,当我们要把传统的串行排序算法设计成并行的排序算法时,通常会想到分而治之的策略,即:把要排序的数据划成M个数据块(可以用Hash的方 法做到),然后每个map task对一个数据块进行局部排序,之后,一个reduce task对所有数据进行全排序。这种设计思路可以保证在map阶段并行度很高,但在reduce阶段完全没有并行。

传统并行sort算法

为了提高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树】。

Terasort流程

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。

2-trie tree

 

(3)reduce task进行局部排序

每个reduce task进行局部排序,依次输出结果即可。

4、参考资料

(1) hadoop的1TB排序terasort:

http://hi.baidu.com/dtzw/blog/item/cffc8e1830f908b94bedbc12.html

(2)Hadoop-0.20.2代码

(3)http://sortbenchmark.org/

原创文章,转载请注明: 转载自董的博客

本文链接地址: http://dongxicheng.org/mapreduce/hadoop-terasort-analyse/

WIN10环境下STK11.5(含Analyzer, EOIR, Scheduler插件)的安装与破解全攻略 本文提供了一份详细的WIN10环境下STK11.5软件及其核心插件(Analyzer, EOIR, Scheduler)的安装与破解全攻略。内容涵盖从安装包准备、系统环境检查,到基础版安装、插件部署、破解文件替换及许可证配置的完整步骤,并附有常见问题排错指南,旨在帮助用户免费搭建功能齐全的卫星仿真分析环境。 阅读详情

相关推荐

40、深入解析TeraSort:强最小MapReduce算法的典范

本文深入解析了TeraSort算法的强最小性,重点探讨其在MapReduce框架下的高效性能。通过Chernoff界等概率工具,详细证明了TeraSort的两个关键断言,并进一步分析其强最小性及在数据库问题中的广泛应用。文章展示了TeraSort如何通过自采样策略实现近乎理想的负载均衡,为并行计算和数据库处理提供了优化思路。

dream的博客 96

hadoopterasort排序总结

hadoop传统的排序是各个map任务对每个数据块进行局部排序,然后由一个reduce任务对所有数据进行全局排序,这样虽然map的并行度高,但reduce的单行化操作却是排序的瓶颈,terasort排序利用trie树(词典查找树)的相关性质,让reduce任务同样并行化大大提高了大数据的排序效率。     (1)trie树介绍      Trie树,是一种树形结构,是一种根节点不包含字符,

zcc_0015的专栏 3797

aic8800出现insmod: can‘t insert ‘/lib/modules/4.9.191/aic8800_fdrv.ko‘: No such device

2、如果单独编译wifi驱动,则把CONFIG_PLATFORM_UBUNTU?= y都改为CONFIG_PLATFORM_ALLWINNER?1、如果把wifi驱动嵌入到内核编译,则在makefile中加入这一句。后面再修改对应平台的交叉编译链和内核吗路径等。

mantouyouyou的博客 492

Spark TeraSort 实现与调优

参考ehiggs/spark-terasort以及RDD#sortBy的代码,我自己实现了一个Spark的TeraSort程序。

Just for Fun la 4631

Mark - HDFS性能压测工具

引言 Hadoop生态圈的基石有两个,一个是HDFS文件系统,一个是MR编程框架。第一弹中提到应用MR编程框架实现大规模多机联合负载压测场景的方案,则突出了MR的能力,实际上HDFS作为这一切的基础,所起的作用是不容忽视的。 HDFS分布式文件系统与一般的文件系统,从本质构成上来说并没有太大的区别,普通磁盘上的文件系统,例如ext3有数据块(block),HDFS也有这个概念,ext3的分区表...

tianyeshiye 784

HadoopTerasort算法分析1<转>

HadoopTeraSort算法分析 Category:MapReduceView:594viewsAuthor:Dong 1、概述 1TB排序通常用于衡量分布式数据处理框架的数据处理能力。TerasortHadoop中的的一个排序作业,在2008年,Hadoop在1TB排序基准评估中赢得第一名,耗时209秒。那么TerasortHadoop中是怎样实现的呢?本文主要从算法设计角度分析

yongjian_luo的专栏 1098

hadoop terasort

1. map reduce 和hadoop起源。 MapReduce借用了函数式编程的概念,是Google发明的一种数据处理模型。因为Google几乎爬了互联网上的所有网页,要为处理这些网页并为搜索引擎建立索引是一项非常艰巨的任务,必须借助成千上万台机器同时工作(也就是分布式并行处理),才有可能完成建立索引的任务。     所以,Google发明了MapReduce数据处理模型,而且他们还就此

原创学无止尽 2360

Hadoop系列 之Terasort

TeraSortHadoop的测试中很有用的一个工具,但以前只是粗略的知道它的功能和用法,简单的用它做了几个测试用例。实际上,对于这种比较通用的工具,如果能够了解它更多一些的话,对于理解Hadoop是很有帮助的,同时也可以更好的利用它来帮助测试。最近有点时间,就了解了一些它的背景,代码实现原理等等,就先记录下来吧。 1. Hadoop与Sort Benchmarks SortBenchm

诡影苍穹的专栏 4502

Hadoop TeraSort 基准测试实验

<br /><br />Author: zhankunlin<br />Date: 2011-4-1<br />Key words: Hadoop, TeraSort<br /> <br /><一> TeraSort 介绍<br />1TB排序通常用于衡量分布式数据处理框架的数据处理能力。TerasortHadoop中的的一个排序作业,在2008年,Hadoop在1TB排序基准评估中赢得第一名,耗时209秒。<br /><二> 相关资料<br />Hadoop MapReduce扩展性的测试:  http

风声 1万+

MapReduce Terasort算法分析

1.概述 1TB排序通常用于衡量分布式数据处理框架的数据处理能力。TerasortHadoop中的的一个排序作业,在2008年,Hadoop在1TB排序基准评估中赢得第一名,耗时209秒。那么TerasortHadoop中是怎样实现的呢?本文主要从算法设计角度分析Terasort作业。 2.算法思想 实际上,当我们要把传统的串行排序算法设计成并行的排序算法时,通常会想到分而治之的策略,即:把要...

Trend_H的博客 1750

hadoop基准测试_Hadoop TeraSort基准测试

hadoop基准测试TeraSort is one of Hadoop’s widely used benchmarks. Hadoop’s distribution contains both the input generator and sorting implementations: the TeraGen generates the input and TeraSort conducts...

cuma2369的博客 789

hadoop的基准评测程序 及 terasort grep wordcount测试

下面的hadoop-examples.jar是建立的软链接:hadoop-examples.jar -> /opt/cloudera/parcels/CDH-5.12.01.cdh5.12.0.p0.29/share/doc/hadoop-0.20-mapreduce/examples/hadoop-examples.jar CDH安装的hadoop在这里: /opt/cloud...

Ahuuua的博客 1545

NI软件卸载工具,下载解压即可使用

Multisim第一次下载失败后,可以使用此工具卸载残留内容,从而可以再次进行Multisim的下载。

上一篇: HadoopDB集群配置方法
下一篇: Hadoop性能调优(一)--总述
npucloud
博客等级 码龄15年 6粉丝 9原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值