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生态系统的关键组件、核心概念以及在处理海量数据时的应用方法。全书分为基础篇、应用篇和总结篇三个部分,全面涵盖了Hadoop...
第四章(Hadoop大数据处理实战)Hadoop分布式文件系统.pdf第四章(Hadoop大数据处理实战)Hadoop分布式文件系统.pdf第四章(Hadoop大数据处理实战)Hadoop分布式文件系统.pdf第四章(Hadoop大数据处理实战)Hadoop分布式文件...
第五章(Hadoop大数据处理实战)Hadoop的IO操作.pdf第五章(Hadoop大数据处理实战)Hadoop的IO操作.pdf第五章(Hadoop大数据处理实战)Hadoop的IO操作.pdf第五章(Hadoop大数据处理实战)Hadoop的IO操作.pdf第五章(Hadoop大...
第二章(Hadoop大数据处理实战)搭建Hadoop分布式集群.pdf第二章(Hadoop大数据处理实战)搭建Hadoop分布式集群.pdf第二章(Hadoop大数据处理实战)搭建Hadoop分布式集群.pdf第二章(Hadoop大数据处理实战)搭建Hadoop分布式...
《Hadoop大数据处理实战》是康开锋撰写的一本深入探讨Hadoop技术的书籍,旨在帮助读者理解并掌握Hadoop在大数据处理中的实际应用。这本书的内容涵盖了Hadoop生态系统的核心组件,以及如何利用这些组件解决实际问题。...
由于给定的文件内容部分涉及到PDF电子书的提供信息,并非技术知识点,故这部分内容将被忽略,重点将放在标题与描述所提到的Hadoop海量数据处理技术上。 Hadoop是一个由Apache软件基金会开发的开源框架,旨在支持...
Hadoop数据迁移是指将存储在传统数据库系统(如Oracle)中的数据转移到Hadoop文件系统(HDFS)的过程。在这个过程中,MapReduce作为一种编程模型,用于处理和生成大数据集,被用来连接Hadoop与Oracle数据库,使得...
总的来说,DATAGURU-Hadoop数据分析平台是一个全面的解决方案,集成了Hadoop的关键组件和技术,旨在简化大数据处理流程,提升数据分析效率,帮助企业从海量数据中获取关键洞见。对于希望提升自身大数据处理和分析...
在大数据的世界里,Hadoop是不可或缺的一个核心组件,它为海量数据处理提供了高效、可靠的解决方案。本主题将深入探讨Hadoop在数据分析中的应用及其生态系统的关键技术。 首先,我们需要理解“大数据”的概念。...
一、HDFS 坏块数据处理 HDFS 坏块数据的处理通常是由挂了两台以上的机器导致的。因此,需要检查集群机器是否挂了多台,然后检查 HDFS 状态。如果不健康,需要确定有损坏的块,列出损坏块,然后删除全部的损坏块。...
在大数据处理领域,Hadoop是一个不可或缺的关键工具,它以其分布式计算框架著称,为企业和组织提供了海量数据存储和处理的能力。本实践指南将深入探讨如何利用Hadoop来构建高效的数据仓库系统,以此来提升数据分析的...
总结来说,Hadoop是一个强大的大数据处理框架,其核心组件HDFS和MapReduce为企业提供了处理海量数据的能力。通过不断扩展的生态系统,Hadoop能够满足各种复杂的数据处理需求,是当今大数据时代不可或缺的技术之一。
这份“数据算法--HadoopSpark大数据处理技巧”文档显然探讨了如何利用这两个工具进行复杂的数据操作,具体涉及到Scala编程实现的两个重要算法:Secondary Sort(二级排序)和Common Friends(共同朋友计算)。...
《Hadoop大数据处理技术基础与实践(第2版)(微课版)PPT-课件》是一个关于Hadoop在大数据处理领域的核心课程资源。这个压缩包包含了丰富的教学资料,帮助学习者深入理解和掌握Hadoop生态系统的核心概念和技术。...
《Hadoop数据分析》一书是O'Reilly出版社的力作,专为那些希望深入理解如何利用Hadoop进行大规模数据处理和分析的专业人士所撰写。这本书详细地探讨了Hadoop生态系统中的核心组件,以及如何利用这些工具来解决实际的...
大数据处理框架:Hadoop:Hadoop数据处理框架Pig.docx
"烟草企业基于Hadoop的数据处理研究" 本文主要研究了烟草企业基于Hadoop的数据处理研究,讨论了Hadoop平台的技术架构和项目结构,以及在烟草企业中的应用。 一、Hadoop简介 Hadoop是一个开源分布式计算平台,具有...
在大数据处理领域,Hadoop是一个不可或缺的关键工具,它专为处理和存储大量数据而设计。本文将深入探讨Hadoop在海量数据处理中的核心概念、架构以及应用。 **Hadoop核心概念** 1. **分布式文件系统(HDFS)**: ...
Hadoop作为一个强大的大数据处理平台,在处理海量数据方面展现出了极高的效率和灵活性。通过HDFS和MapReduce两大核心技术,Hadoop能够轻松应对PB级数据的存储和处理挑战。对于那些希望利用大数据提升业务价值的企业...