前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用hadoop进行大规模数据的全局排序

使用hadoop进行大规模数据的全局排序

作者头像
CSDN技术头条
发布于 2018-02-09 03:19:53
发布于 2018-02-09 03:19:53
1.6K0
举报
文章被收录于专栏:CSDN技术头条CSDN技术头条

1. Hellow hadoop~~! Hadoop(某人儿子的一只虚拟大象的名字)是一个复杂到极致,又简单到极致的东西。 说它复杂,是因为一个hadoop集群往往有几十台甚至成百上千台low cost的计算机组成,你运行的每一个任务都要在这些计算机上做任务的分发,执行中间数据排序以及最后的汇总,期间还包含节点发现,任务的重试,故障节点替换等等等等的维护以及异常情况处理。谁叫hadoop集群往往都是由一些平民计算机组成,没事儿罢个工什么的,实在是再寻常不过的事情。 而说其简单,则是因为,上面说到的那些,你通通不用管,你所需要做的,就是写一个程序,当然也可以是脚本,从标准输入读入一条数据,处理完之后,把结果输出到标准输出。 现在,或许你就明白了,hadoop就是一个计算模型。一个分布式的计算模型。 1.1Map和reduce 天下大事,分久必合、合久必分。 所谓分布式计算,就是把一大堆用于计算的数据材料切了,扔到多个锅里面,该焯水的焯水,该油炸的油炸。然后都准备的差不多了,按着一定的先后顺序,比如不好熟的先放,好熟的后放什么的,一块下锅炒成一盘菜出来,端出来上桌。 前面的步骤,就是map,分发。Map的作用就是把输入数据打散,做简单的处理,输出。而hadoop则要先将中间数据排序,这个称为shuffle,然后由reduce把中间数据合并到一起。将最终结果输出。 举个简单的例子:公安局要根据数据库内身份证号获得全国每个地市人口数情况(好吧,这个应该是统计局做的),这个任务落到你的头上了,你应该先把所有的身份证号导出到文件中,每行一个,然后把这些文件交给map。Map中的要做的就是截取身份证号的前面六位,把这六位数字直接输出。然后hadoop会把这些身份证号的前六位排序,把相同的数据都排到一起,交给reduce,reduce判断每次输入的号码是否与上一个处理的相同,相同则累加,不同则把之前的号码,和统计的数值输出。这样,你就获得了各地市的人口数统计。 下面这个图就是map和reduce处理的图示:

上图是MapReduce的数据处理视图。分为map,shuffle,reduce三个部分。各map任务读入切分后的大规模数据进行处理并将数据作为一系列key:value对输出,输出的中间数据按照定义的方式通过shuffle程序分发到相应的reduce任务。Shuffle程序还会按照定义的方式对发送到一个reduce任务的数据进行排序。Reduce进行最后的数据处理。 MapReduce计算框架适用于超大规模的数据(100TB量级)且各数据之间相关性较低的情况。 1.2HDFS

之前,或许你听说过NTFS,VFS,NFS等等等等,没错,HDFS就是hadoop file system。 为什么需要一种专门的文件系统呢? 这是因为hadoop使用过网络松散(说其松散,是因为hadoop集群中的任意一个计算机故障了或是不相干了,都不会对集群造成影响)的组合到一起的。多个计算机需要一个统一的文件访问方式。也就是根据一个路径,不同的计算机可以定位同一个文件。 HDFS就是这样一种分布式文件系统,提供了较好的容错功能和扩展性。 1.3节点与槽位

Hadoop集群是由很多low cost的计算机组成的,这些计算机被称为节点。组成hadoop的计算机通常都是全功能的,没有特别的专门用于计算和存储的部分。 这样带来的好处是明显的,因为特别大的硬盘和特别快的cpu,总是意味着难以接受的价格。而且这样一个配置“特别的”节点计算机挂掉了,找个他的替身将是很困难的事情。 计算节点和存储节点统一的另一个好处是,任务在计算过程中产生的文件,可以直接放在本机的存储节点上,减少网络带宽占用和延迟。 在衡量hadoop的map和reduce的处理能力的时候通常都是以槽位为单位的。槽位就是集群内每个计算机的cpu并发数(cpu数*核心数*超线程数)的总和。每个任务都会安排在一个槽位内允许,安排不到槽位的任务则会等待。 2.1应用hadoop进行大规模数据全局排序的方法

使用hadoop进行大量的数据排序排序最直观的方法是把文件所有内容给map之后,map不做任何处理,直接输出给一个reduce,利用hadoop的自己的shuffle机制,对所有数据进行排序,而后由reduce直接输出。 然而这样的方法跟单机毫无差别,完全无法用到多机分布式计算的便利。因此这种方法是不行的。 利用hadoop分而治之的计算模型,可以参照快速排序的思想。在这里我们先简单回忆一下快速排序。快速排序基本步骤就是需要现在所有数据中选取一个作为支点。然后将大于这个支点的放在一边,小于这个支点的放在另一边。 设想如果我们有N个支点(这里可以称为标尺),就可以把所有的数据分成N+1个part,将这N+1个part丢给reduce,由hadoop自动排序,最后输出N+1个内部有序的文件,再把这N+1个文件首尾相连合并成一个文件,收工。 由此我们可以归纳出这样一个用hadoop对大量数据排序的步骤:

1)对待排序数据进行抽样; 2)对抽样数据进行排序,产生标尺; 3)Map对输入的每条数据计算其处于哪两个标尺之间;将数据发给对应区间ID的reduce 4)Reduce将获得数据直接输出。 这里使用对一组url进行排序来作为例子:

这里还有一点小问题要处理:如何将数据发给一个指定ID的reduce?hadoop提供了多种分区算法。这些算法根据map输出的数据的key来确定此数据应该发给哪个reduce(reduce的排序也依赖key)。因此,如果需要将数据发给某个reduce,只要在输出数据的同时,提供一个key(在上面这个例子中就是reduce的ID+url),数据就该去哪儿去哪儿了。 2.2注意事项

1)标尺的抽取应该尽可能的均匀,这与快速排序很多变种算法均是强调支点的选取是一致的。 2)HDFS是一种读写性能很不对称的文件系统。应该尽可能的利用其读性能很强的特点。减少对写文件和shuffle操作的依赖。举例来说,当需要根据数据的统计情况来决定对数据的处理的时候。将统计和数据处理分成两轮map-reduce比将统计信息合并和数据处理都放到一个reduce中要快速的多。 3. 总结

Hadoop实际是一种以数据为驱动的计算模型,结合MapReduce和HDFS,将任务运行在数据存放的计算节点上,充分利用了计算节点的存储和计算资源,同时也大大节省了网络传输数据的开销。 Hadoop提供了简便利用集群进行并行计算的平台。各种可以隔离数据集之间相关性的运算模型都能够在Hadoop上被良好应用。之后会有更多的利用Hadoop实现的大规模数据基础计算方法的介绍。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSDN技术头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分布式计算Hadoop简介
Hadoop是什么:Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。 Hadoop是什么:Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。 Hadoop框架中最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算。
猿人谷
2018/01/17
1.5K0
分布式计算Hadoop简介
Hadoop前世今生
本文从Hadoop(1.0)系统中调度策略的角度展开讨论。这本质还是对Hadoop的集群资源进行管理,主要有四个方面:
章鱼carl
2022/03/31
9530
Hadoop前世今生
Spark为什么比Hadoop快那么多?
在2014年11月5日举行的Daytona Gray Sort 100TB Benchmark竞赛中,Databricks 用构建于206个运算节点之上的spark运算框架在23分钟内完成100TB数据的排序,一举击败了该赛事2013年的冠军—Yahoo团队建立在2100个运算节点之上的Hadoop MapReduce集群,该集群耗时72分钟排序了102.5TB的数据。换句话说,Spark用了十分之一的资源在三分之一的时间里完成了Hadoop做的事情。 HadoopSpark被排序数据大小102.5 TB
叶锦鲤
2018/03/15
2.3K0
使用Hadoop MapReduce进行大规模数据爬取
Hadoop MapReduce是一个编程模型,用于处理和生成大数据集。它由Map和Reduce两个主要阶段组成。Map阶段负责处理输入数据,并将结果输出为键值对;Reduce阶段则对Map阶段的输出进行汇总和合并,生成最终结果。
小白学大数据
2024/12/05
1330
独家 | 一文读懂Hadoop(三):Mapreduce
随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识。2017年年初apache发行了Hadoop3.0,也意味着一直有一群人在对Hadoop不断的做优化,不仅如此,各个Hadoop的商业版本也有好多公司正在使用,这也印证了它的商业价值。 读者可以通过阅读“一文读懂Hadoop”系列文章,对Hadoop技术有个全面的了解,它涵盖了Hadoop官网的所有知识点,并且通俗易懂,英文不好的读者完全可以通过阅读此篇文章了解Hado
数据派THU
2018/01/30
1.3K0
独家 | 一文读懂Hadoop(三):Mapreduce
Hadoop基础教程-第7章 MapReduce进阶(7.1 MapReduce过程)
一般而言,数据文件都会上传到HDFS上,也就是说HDFS上的文件作为MapReduce的输入。已知block块大小是128M(Hadoop 2.x默认的blockSize是128MB,Hadoop 1.x默认的blockSize是64MB)。MapReduce计算框架首先会用InputFormat的子类FileInputFormat类对输入文件进行切分,形成输入分片(InputSplit)。每个InputSplit分片将作为一个Map任务的输入,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组。也就是说,InputSplit只是对输入数据进行逻辑上切分,并不会将物理文件切分成片进行存储。
程裕强
2022/05/06
5200
Hadoop基础教程-第7章 MapReduce进阶(7.1 MapReduce过程)
什么是大数据
进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,描述数据系统的数据量的计量单位从MB(1MB大约等于一百万字节)、GB(1024MB)、TB(1024GB),一直向上攀升,目前,PB(等于1024TB)级的数据系统已经很常见,随着移动个人数据、社交网站、科学计算、证券交易、网站日志、传感器网络数据量的不断加大,国内拥有的总数据量早已超出 ZB(1ZB=1024EB,1EB=1024PB)级别。
用户3391135
2018/11/12
1.1K0
Hadoop教程(一) Hadoop入门教程「建议收藏」
Hadoop是Apache开源组织的一个分布式计算开源框架(http://hadoop.apache.org/),用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。Hadoop框架中最核心设计就是:HDFS和MapReduce,HDFS实现存储,而MapReduce实现原理分析处理,这两部分是hadoop的核心。数据在Hadoop中处理的流程可以简单的按照下图来理解:数据通过Haddop的集群处理后得到结果,它是一个高性能处理海量数据集的工具 。
全栈程序员站长
2022/08/11
1.4K0
Hadoop教程(一) Hadoop入门教程「建议收藏」
【硬刚大数据之面试篇】2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇
2021年初的时候,关于Hadoop要退休淘汰的PR文章甚嚣尘上。其中MapReduce思想最为人所诟病,因为其并不友好的写代码方式,高昂的维护成本以及较差的运行效率。
大数据真好玩
2021/09/18
6320
【硬刚大数据之面试篇】2021年从零到大数据专家面试篇之Hadoop/HDFS/Yarn篇
hadoop常见问题解答
(1)Hadoop适不适用于电子政务?为什么? 电子政务是利用互联网技术实现政府组织结构和工作流程的重组优化,建成一个精简、高效、廉洁、公平的政府运作信息服务平台。因此电子政务肯定会产生相关的大量数据以及相应的计算需求,而这两种需求涉及的数据和计算达到一定规模时传统的系统架构将不能满足,就需要借助海量数据处理平台,例如Hadoop技术,因此可以利用Hadoop技术来构建电子政务云平台。 总结一下,任何系统没有绝对的适合和不适合,只有当需求出现时才可以决定,在一个非常小的电子政务系统上如果没有打数据处
我是攻城师
2018/05/11
1.1K0
图解大数据 | 分布式平台Hadoop与Map-reduce详解
教程地址:http://www.showmeai.tech/tutorials/84
ShowMeAI
2022/02/24
5950
图解大数据 | 分布式平台Hadoop与Map-reduce详解
【大数据技术】Hadoop体系框架详细解析
Mapreduce是一种模式,一种什么模式呢?一种云计算的核心计算模式,一种分布式运算技术,也是简化的分布式编程模式,它主要用于解决问题的程序开发模型,也是开发人员拆解问题的方法。 如下图所示,ma
Luga Lee
2022/03/25
2.1K0
【大数据技术】Hadoop体系框架详细解析
Hadoop的概念
Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群的威力进行高速运算和存储。
我脱下短袖
2019/12/23
1.1K0
Hadoop的概念
大数据学习之路05——Hadoop原理与架构解析
Hadoop 是 Apache 开源组织的一个分布式计算开源框架,是一个可以更容易开发和运行处理大规模数据的解决方案,它提供了一套分布式系统基础架构,允许使用简单的编程模型跨大型计算机的大型数据集进行分布式处理。
汪志宾
2019/05/24
8.3K0
大数据学习之路05——Hadoop原理与架构解析
Hadoop3.0分布式集群安装知识
挖掘大数据
2018/01/08
2K0
Apache Hadoop入门
介绍 本文要介绍的Apache Hadoop是一个使用简单高级编程模型实现的对大型数据集进行分布式存储和处理的软件框架。文章涵盖了Hadoop最重要的概念,对其架构的描述,并指导如何使用它,以及在Hadoop上编写和执行各种应用程序。 简而言之,Hadoop是Apache Software Foundation的开源项目,可以安装在一组标准机器上,以便这些机器可以通信并协同工作来存储和处理大型数据集。近年来,Hadoop已经非常成功,因为它有能力有效地处理大数据。它允许公司将其所有数据存储在一个系统中,并对
用户1263954
2018/01/30
1.6K0
Apache Hadoop入门
MapReduce性能优化大纲
检测系统瓶颈 性能调优 创建一项基线,用来评估系统的首次运行性能(即集群默认配置) 分析Hadoop计数器,修改,调整配置,并重新执行任务,与基线进行比较 重复执行第2步,直到最高效率 识别资源瓶颈 内存瓶颈 当发现节点频繁出现虚拟内存交换时表示出现了内存瓶颈 CPU瓶颈 通常情况下,处理器负载超过90%,在多处理器系统上整体负载超过50% 判断是否是单个特定线程独占了CPU IO瓶颈 磁盘持续活动率超过85%(也有可能是由CPU或内存导致) 网络带宽瓶颈 在输出结果或shuffle阶段从map拉取数据时
王知无-import_bigdata
2020/06/01
1.1K0
MapReduce性能优化大纲
Hadoop与Spark等大数据框架介绍[通俗易懂]
海量数据的存储问题很早就已经出现了,一些行业或者部门因为历史的积累,数据量也达到了一定的级别。很早以前,当一台电脑无法存储这么庞大的数据时,采用的解决方案是使用NFS(网络文件系统)将数据分开存储。但是这种方法无法充分利用多台计算机同时进行分析数据。
全栈程序员站长
2022/08/10
1.5K0
Hadoop与Spark等大数据框架介绍[通俗易懂]
BAT大数据面试题及答案
一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成 header部分由一个字节的magic(文件格式)和四个字节的CRC32(用于判断body消息体是否正常)构成。当magic的值为1的时候,会在magic和crc32之间多一个字节的数据:attributes(保存一些相关属性,比如是否压缩、压缩格式等等);如果magic的值为0,那么不存在attributes属性 body是由N个字节构成的一个消息体,包含了具体的key/value消息
Maynor
2021/12/06
5920
2022年Hadoop面试题最全整理,两万字干货分享【建议收藏】
Hadoop 中常问的就三块,第一:分布式存储(HDFS);第二:分布式计算框架(MapReduce);第三:资源调度框架(YARN)。
Maynor
2023/02/01
1.2K0
相关推荐
分布式计算Hadoop简介
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文