一些mapreduce程序分析
来源:互联网 发布:http传输数据大小 编辑:程序博客网 时间:2024/06/05 06:41
数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出现一次。我们自然而然会想到将同一个数据的所有记录都交给一台reduce机器,无论这个数据出现多少次,只要在最终结果中输出一次就可以了。具体就是reduce的输入应该以数据作为key,而对value-list则没有要求。当reduce接收到一个时就直接将key复制到输出的key中,并将value设置成空值。
数据排序跟上面的去重差不多,只不过上面的key可能是按字母顺序排的,现在要先转换成数字再来,而且重复的数字也要表示出来,所以value不能用空了,要用1,然后累加。
//实现map函数
//实现reduce函数
for(IntWritable
单表关联和夺标关联
HadoopMapReduce的实现也采用了Master/Slave
当Map开始产生输出的时候,他并不是简单的把数据写到磁盘,因为频繁的操作会导致性能严重下降。他的处理更加复杂,数据首先是写到内存中的一个缓冲区,并作一些预排序,以提升效率。
每个Map任务都有一个用来写入输出数据的循环内存缓冲区,这个缓冲区默认大小是100M,可以通过io.sort.mb属性来设置具体的大小,当缓冲区中的数据量达到一个特定的阀值(io.sort.mb
首先根据数据所属的partition排序,然后每个partition中再按Key排序。输出包括一个索引文件和数据文件,如果设定了Combiner,将在排序输出的基础上进行。Combiner就是一个MiniReducer,它在执行Map任务的节点本身运行,先对Map的输出作一次简单的Reduce,使得Map的输出更紧凑,更少的数据会被写入磁盘和传送到Reducer。Spill文件保存在由mapred.local.dir指定的目录中,Map任务结束后删除。
当spill 文件归并完毕后,Map将删除所有的临时spill 文件,并告知TaskTracker任务已完成。Reducers
现在让我们转到Shuffle的Reduce部分。Map的输出文件放置在运行Map任务的TaskTracker的本地磁盘上(注意:Map输出总是写到本地磁盘,但是Reduce输出不是,一般是写到HDFS),它是运行Reduce任务的TaskTracker所需要的输入数据。Reduce任务的输入数据分布在集群内的多个Map任务的输出中,Map任务可能会在不同的时间内完成,只要有其中一个Map任务完成,Reduce任务就开始拷贝他的输出。这个阶段称为拷贝阶段,Reduce任务拥有多个拷贝线程,可以并行的获取Map输出。可以通过设定mapred.reduce.parallel.copies来改变线程数。
Reduce是怎么知道从哪些TaskTrackers中获取Map的输出呢?当Map任务完成之后,会通知他们的父TaskTracker,告知状态更新,然后TaskTracker再转告JobTracker,这些通知信息是通过心跳通信机制传输的,因此针对以一个特定的作业,jobtracker知道Map输出与tasktrackers的映射关系。Reducer中有一个线程会间歇的向JobTracker询问Map输出的地址,直到把所有的数据都取到。在Reducer取走了Map输出之后,TaskTracker不会立即删除这些数据,因为Reducer可能会失败,他们会在整个作业完成之后,JobTracker告知他们要删除的时候才去删除。
- 一些mapreduce程序分析
- Hadoop之MapReduce程序分析
- MapReduce中wordCount程序工作过程分析
- 复杂mapreduce程序 分析http服务器数据
- Hadoop MapReduce程序分析飞机航班信息源代码
- Hadoop(十三)分析MapReduce程序
- 一些程序段分析(1)
- 一些程序段分析(2)
- 第一个mapreduce程序的测试与分析
- Hadoop-03-第二个MapReduce程序--模拟分析购物日志
- 从程序角度分析mapreduce原理与代码
- MapReduce(一):入门级程序wordcount及其分析
- 最近写mapreduce程序从hbase中抽取程序遇到的一些问题
- mapreduce中一些坑
- 对MapReduce一些理解
- 程序分析的一些概念总结
- 关于程序自校验的一些分析
- 编写MapReduce程序(简单的电话被呼叫分析程序)
- makefile中的all和.PHONY的…
- C# 单例(Singleton)模式
- 从几个简单例子了解CUDA内核的几个…
- WINDOWS 下编译CUDA的好方法
- 基于CUDA的GPU优化建议
- 一些mapreduce程序分析
- sql语句实现一个输入框下多条件查询
- 关于Python中的yield
- 从SQL到HiveQL
- C++创建对象的两种方法
- 第十九天:IO流
- 柔性数组
- python 集合操作 set
- CUDA 共享内存的bank co…