最近有个任务就是处理上百G的日志文件,为了效率我们首先想到的是用hadoop,而hadoop框架中最重要的一
部分就是MapReduce,下面个人总结下MapReduce的流程:
1、MapRuduce File要处理得文件:File存储在HDFS上,切分成默认64M的Block,存储在多个DataNode节点上
2、MapReduce InputFormat:数据格式定义,例如以\n分割记录,“空格”分割单词
3、MapReduce Split:map函数的输入逻辑概念,一个inputSplit和Block是“1对1”或者“1对多”的关系
4、MapReduce RecordReader:每读取一条记录,调用一次map函数
5、MapReduce Map:执行map函数,在内存中增加数据
6、MapReduce Shuffle:Partion,Sort,Spill,Merge, Combiner,Copy,Memory,Disk……性能优化的大
有可为的地方
6.1、Partitioner:决定数据由哪个Reducer进行处理(例如用hash方法)
6.2、MemoryBuffer:内存缓冲区 三元组数据{"partion" "key" "value"}形式存储 缓冲区大小默
认100M,溢出阀值80M
6.3、Spill:内存缓冲超过80M时,spill线程锁住这80M内容,将数据写到本地磁盘,然后释放内存,
数据溢出前会先进行Sort、Combiner并发送到相同Reduce的key数据,这样可减少partitioner索引量
6.4、Sort:缓冲区按照key进行排序
6.5、Combiner:数据合并,将相同的key value值合并,combine函数其实就是reduce函数
6.6、Spill to Disk:溢写到硬盘 内存缓冲区每次数据溢写都会生成一个溢写文件,将相同partition
的数据存储到一块
6.7、Merge on disk:map后合并溢写文件
7、MapReduce Map Task:Map任务上的输出时按照partitiion和key排序的数据存储文件,一般有多个map task,
每个task有一个输出文件{key1 :[value1,value2...]} {key2 :[value1,value2...]}...
8、MapReduce Copy:将map端的输出文件按照相应的partition,copy到reduce端
9、MapReduce Spill:和Map端的Spill一样
10、MapReduce Sort:以相同的key值为参照排序
11、MapReduce combiner:value值合并
12、MapReduce merge:合并溢出文件
13、reduce函数:function reduce
附加一张官方的shuffle流程图;
下面凭借我自己的理解写一下具体数据在MapReduce过程中的形式变化:
样例数据:this is a hello hello world
a b a
b c b
1、数据被inputformat分隔为"this is a hello hello world",value1 "a b a ",value2 "b c b ",value3
(注:数据以split形式存储在Block中)
Map开始
2、map(value1) map(value2) map(value3) ----------> {"this",1}{"is",1}{"a",1}{"hello",1}.....{"c",1}{"b",1}
3、partion每个{key value},例如{"this",1} 让this对reduce个数n取模得到m,则{"this",1}----------->{m,"this",1}
4、按照key值进行sort,例如:{1,"a",1}{1,"b",1}{1,"a",1}------->{1,"a",1}{1,"a",1}{1,"b",1}
5、combine {1,"a",1}{1,"a",1}{1,"b",1} --------> {1,"a",2}{1,"b",1}
merge 如果没有设置上述combiner 则 {1,"a",1}{1,"a",1}{1,"b",1} ------> {1,"a",[1,1]}{1,"b",[1]}
6、map输出{1,"a",[1,1]}{1,"b",1}... ,这些数据被copy到1号reduce(因为partition的值为1)
(注:以上的输出数据没有经过combine)
Reduce开始
7、sort{1,"a",[1,1]}{1,"b",[1]}{1,"c",[1]}{1,"b",[1,1]}---------> {1,"a",[1,1]}{1,"b",[1]}{1,"b",[1,1]}{1,"c",[1]}
8、combine {1,"a",[1,1]}{1,"b",[1]}{1,"b",[1,1]}{1,"c",[1]}--------> {1,"a",[2]}{1,"b",[1]}{1,"b",[2]}{1,"c",[1]}
9、merge {1,"a",[2]}{1,"b",[1]}{1,"b",[2]}{1,"c",[1]}------>{1,"a",[2]}{1,"b",[1,2]}{1,"c",[1]}
10、reduce {1,"a",[2]}{1,"b",[1,2]}{1,"c",[1]}------->{1,"a",[2]}{1,"b",[3]}{1,"c",[1]}
即完成了一个wordcount程序,统计出单词个数a:2 b:3 c:1
(样例数据第一行不具代表性,博主悄悄地把这行数据的处理忽视了......)
其实整个MapReduce流程的最最神奇的地方在shuffle,因为整个MR程序的执行效率全在这个里面进行优化,而平时
我们仅仅是通过split或者string的连接来编写一些简单的map、reduce函数,殊不知得shuffle者得MapReduce,得
MapReduce者得hadoop,得hadoop者得大数据云计算的天下......播主有点神经了......以上分析仅仅是为了梳理一
下自己对mapreduce流程的理解(其实我还是比较凌乱的),并没有上代码,以后慢慢的分析源码并总结吧。
文献参考来源:http://www.slideshare.net/snakebbf/hadoop-mapreduce-12716482
(每次看这个都感触颇深啊)
MR优化博客:http://hongweiyi.com/2012/09/mapred-optimize-writable/
http://langyu.iteye.com/blog/1341267
shuffle分析博客:http://langyu.iteye.com/blog/992916
相关推荐
阿里大数据之路的总结主要涵盖了大数据开发的关键技术和架构,包括数据的采集、存储、处理和分析等方面。以下是对这些内容的详细解析: 1. 数据采集 数据采集是大数据流程的第一步,涉及对Web和APP产生的数据进行...
在这个大数据练手项目中,我们将聚焦于利用YouTube数据源进行分析和处理,这是一次绝佳的实践机会,尤其对于那些想要提升Hadoop和Hive技能的IT从业者来说。YouTube作为全球最大的视频分享平台,每天都会产生海量的...
在这个大数据期末复习资料中,我们将详细介绍与大数据相关的知识点。 首先,大数据时代的到来,被称为第三次信息化浪潮,它标志着信息技术进入了一个全新的发展阶段。在这个时代中,信息科技为大数据提供了技术支撑...
在本实验报告中,我们将深入探讨大数据技术及其在...通过这些实验,你将对大数据技术有全面的理解,为今后从事大数据分析和处理的工作打下坚实的基础。同时,掌握这些技能也能帮助你更好地应对日益增长的海量数据挑战。
《大数据优秀产品、服务和应用解决方案案例集》一书详细介绍了大数据智能分析在招聘行业的具体构建和运作流程,以及对传统人力资源招聘模式的颠覆性影响。该书通过具体案例展示了大数据智能分析系统的架构方法,以及...
在这个部分,我们主要分析了两大科技巨头——谷歌和亚马逊如何利用大数据来推动其业务发展。 谷歌是大数据领域的先驱,其大数据行动主要体现在数据的获取、存储和分析上。谷歌通过各种渠道广泛收集数据,如搜索查询...
在大数据项目实战中,"招聘网站大数据职位分析"是一个典型的案例,它涵盖了多个重要的IT知识点。这个项目旨在通过收集、处理、分析招聘网站上的职位信息,挖掘出行业趋势、热门技能以及人才需求等有价值的数据。 1....
这是MapReduce工作流程中的第一步,它接收键值对(`LongWritable key, Text value`)作为输入,这里`key`通常是文件块的偏移量,`value`是该位置的行文本。Mapper的主要任务是处理输入数据并生成中间键值对。在这个...
在大数据背景下,ETL流程可能涉及到分布式计算框架,如Hadoop MapReduce或Spark,以处理大规模数据的处理和存储。 总结来说,大数据商务智能是利用大数据技术对商务活动进行深度洞察和智能决策的工具集。它涵盖了从...
《基于MapReduce分析的招聘信息大数据可视化系统》 在当今数据驱动的时代,招聘信息的大数据分析与可视化已经成为企业决策的重要工具。本文将深入探讨一个基于Hadoop的MapReduce实现的招聘信息大数据处理和可视化...
大数据测试是针对海量数据集进行的...总之,大数据测试是一门技术密集型的工作,不仅需要掌握各种大数据工具和框架,还要熟悉数据处理流程,具备高效的测试技术和策略,确保在海量数据处理中达到预期的性能和数据质量。
大数据技术原理与应用——MapReduce概述与应用 MapReduce是大数据技术中的一个核心组件,它是一种分布式并行编程模型,能够处理大量数据。下面是关于MapReduce的知识点: 1. 概述 MapReduce是一种分布式并行编程...
Apache DolphinScheduler是一个分布式、去中心化的可视化DAG(Directed Acyclic Graph)工作流任务调度系统,它致力于解决数据处理流程中的复杂依赖问题,旨在提供一个开箱即用的调度系统。DolphinScheduler原名为...
在当今的大数据时代,MapReduce作为处理海量数据的核心技术之一,被广泛应用于各类大数据处理框架中。本文将对MapReduce的基本概念、编程模型、框架原理、相关组件以及入门编程实例等进行详细介绍。 MapReduce是一...
Shuffle和Sort阶段是MapReduce流程中的一个重要环节,它确保相同键的值会被分到同一个Reducer上。这个阶段会对Map阶段产生的键值对进行排序,以便Reduce函数可以按顺序处理。 接下来,Reduce函数会接收相同的键值对...
《福建师范大学精品大数据导论课程系列 (6.2.1)--5.1 一种并行编程模型--MapReduce-之二》这篇资料主要探讨的是大数据处理领域中的核心算法模型——MapReduce。MapReduce是由Google在2004年提出的一种分布式计算框架...
《福建师范大学精品大数据导论课程系列 (6.1.1)--5.1 一种并行编程模型--MapReduce-之一》这个压缩包文件是关于大数据处理领域中的核心概念——MapReduce的详细介绍。MapReduce是一种由Google开发的分布式计算框架,...
MapReduce是Hadoop框架的核心部分,主要负责大数据的并行处理。在MapReduce模型中,IO操作扮演着至关重要的角色,因为它涉及到数据的输入和输出。Hadoop自带了一套完整的原子操作,专门用于数据的读写,确保在处理大...
标题提及的"完整版大数据云计算课程 Hadoop数据分析平台系列课程 Hadoop 04 MapReduce"是一门专注于Hadoop生态系统中的核心组件MapReduce的教程。MapReduce是Google提出的一种分布式计算模型,广泛应用于大数据处理...