博客
关于我
MapReduce
阅读量:364 次
发布时间:2019-03-05

本文共 991 字,大约阅读时间需要 3 分钟。

MapReduce

话接,既然HDFS将文件分分散存放在各个节点了,那么也就可以在每个存储节点来单独计算了,毕竟人多力量大。没错,MapReduce 就是这么干的,调用Hadoop 提供的API,将map任务和reduce任务写好,打包上传到Hadoop框架就可以由集权来调度资源执行计算任务了,至于如何调度下篇再聊,这里主要聊一下map-reduce。

为什么时map-reduce呢,先来看一下归并排序

public void mergeSort (int[] arr, int begin, int end){   }

这里体现的就是分治思想,map-reduce也使用的这种思想,将一个大任务分成多个小任务,它将其定义成了两个阶段,map阶段和reduce阶段,“分”这个阶段干的事请在map时做,“合”这个阶段干的事请在reduce时做,以大数据中的helloworld为例,
首先获取数据,在map时将数据分为<word, 1> 这种pair的形式,reduce中将同一个word的pair累计,就得到了每个word的词频。编写的map和reduce类需要用到一个driver来驱动。其中数据怎么分片,map和reduce之间数据怎么传输框架都帮我们搞定了(毕竟框架,人家说了怎么干照着干就行了)。虽然传输不需要我们操心,但是可以看到map和reduce中的形参都不是java的普通数据类型,而是hadoop自定义的,这是为什么呢?因为如前所示的<word,1>这种形式的数据是需要在不同任务间传输的,不同任务可能运行在不同的节点,将map任务的结果传输到reduce的网络传输就需要序列化和反序列化,hadoop自己实现的数据类型序列化/反序列化更高效。那么问题来了,自定义的bean在hadoop中使用时也要实现writable序列化接口。

前面讲了MapReduce的基本思想,那它内部究竟怎么工作的呢?

1、map端

map端的InputFormat用getSplits

2、reduce端

以wordcount为例,map 仅仅将

3、shuffle

参考文献

MapReduce 之helloworld代码。
MapReduce 之使用自定义be’an对象时实现writable序列化接口。
129M会被切成两个小文件吗?
shffule之自定义分区器。

转载地址:http://jywwz.baihongyu.com/

你可能感兴趣的文章
ament: command not found ROS2
查看>>
双变量的t检验
查看>>
用 wxPython 打印你的 App
查看>>
wxPython:引用、展示图片、Stock IDs、操作剪切板、拖拽
查看>>
android GPS JAVA 获取GPS功能是否禁用
查看>>
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
查看>>
Linux下安装MySql过程
查看>>
原生vue实现VantUI中IndexBar索引导航栏功能
查看>>
android:使用audiotrack 类播放wav文件
查看>>
vue通过better-scroll 封装自定义的下拉刷新组件
查看>>
android解决:使用多线程和Handler同步更新UI
查看>>
vue自定义封装Loading组件
查看>>
解决移动端项目中苹果ios和安卓android手机点击输入框网页页面自动放大缩小
查看>>
Element UI 中动态路由的分析及实现
查看>>
使用springMVC配置视图管理器后找不到指定的页面
查看>>
关于js中对于Promise的深入理解
查看>>
对于js中的this指向的深入理解
查看>>
杭电 2007 平方和与立方和(输入数据的大小顺序并不能默认)
查看>>
十大排序算法之三:插入排序(Python)
查看>>
利用Python实现循环队列
查看>>