赞
踩
- Map表示第一阶段,负责“拆分问题”,即把复杂的问题拆分成多个问题并行处理,可以拆分的前提是这些问题可以并行运行,且几乎没有依赖关系。
- Reduce表示第二阶段,负责“合并”,即对Map结果进行全局汇总。
集中式计算
- 集中式计算是指数据处理任务在一个中央服务器或计算机上进行的计算模型。在集中式计算中,所有的计算资源和数据都集中在一个地方,由中央服务器或计算机负责处理和管理
- 适用于小规模任务:集中式计算适用于处理小规模的数据任务,对于大规模的数据处理任务可能存在性能瓶颈和扩展性差的问题。
单词统计问题,统计每个单词的个数。
Mapper中的业务逻辑写在map()方法中。
Reducer的业务逻辑写在reducer()方法中。
整个程序需要一个Driver来进行提交,提交的是一个描述了各种必要信息的job对象。
编写MapReduce程序主要涉及以下几个步骤:
定义Mapper函数:Mapper函数是对输入数据进行处理的函数。它接收输入的数据记录,将其转化为(Key,Value)对,并输出到Reducer函数进行处理。你可以根据需求自定义Mapper函数。
定义Reducer函数:Reducer函数接收来自Mapper函数输出的(Key,Value)对,并对具有相同Key的Value进行合并和聚合。你可以根据需求自定义Reducer函数。
配置MapReduce作业:通过配置作业来定义输入和输出路径,指定Mapper和Reducer函数等。你可以使用Hadoop提供的API或编辑配置文件来配置MapReduce作业。注意:输出路径不能存在,不然会报错。
提交作业并运行:将编写好的MapReduce程序打包成JAR文件,并通过Hadoop提供的命令或API提交作业并运行。
- Java是面对对象的编程。
- 开发中,经常有以下场景,跨进程,跨网络传递对象,将对象数据持久化存储。
- 需要有一种可以在两端传输数据的协议。
- java序列化就是问为了解决这个问题而产生。
Java序列化机制可以通过实现Serializable接口来实现对象的序列化和反序列化,就是将二进制数组转化为对象的过程。
- Hadoopd序列化没有采用java的序列化机制,而是实现了自己的序列化机制Writable。
- 原因在于java的序列化机制比较臃肿,是一种不断创建对象的机制,并且会额外附带很多信息(校验,继承关系,系统等)。
- 但在Hadoop的序列化机制中,用户可以复用对象,这样就减少了java对象的分配和回收,提高了应用效率 。
Hadoop数据类型 | Java数据类型 |
BooleanWritable | boolean |
ByteWritable | byte |
IntWritable | int |
FloatWritable | float |
LongWritable | long |
DoubleWritable | double |
Text | String |
MapWritable | Map |
ArrayWritable | array |
NullWritable | null |
mapreduce输出结果文件个数探究
不管map阶段有多少个并发执行task,到reduce阶段,所有的结果都有一个task处理。并且最终结果输出到一个文件中,及reducetask参数为1。
输出结果文件的个数和reducetask个数是一种对等关系。也就说有几个reducetask,就输出几个文件。
ke
设置job.setNumReduceTask(3) ##括号内填入输出结果的个数
引出数据分区当MapReduce中有多个reducetask执行的时候,此时maptask的输出就会面临一个问题:究竟将自己的输出数据交给哪一个reducetask来处理?这就是所谓的数据分区(partition)问题。
改变reducetask个数时,mapreduce就会涉及到分区的问题,即:maptask输出的结果如何分配给各个reducetask来处理。
数据规约的含义
- 数据规约是尽可能保持数据原貌前提下,最大限度地精简数据量。
MapReduce弊端
- MapRduce是一种具有两个执行阶段的分布式计算程序,Map阶段和Reduce阶段之间会涉及到跨网络数据传递。
- 每一个MapReduce都可能会产生大量的本地输出,这就导致网络传输数据量变大,网络IO性能低。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。