MapReducer
MapReducer
概述
是一个分布式的计算框架(编程模型),最初由由谷歌的工程师开发,基于GFS的分布式计算框架。后来Cutting根据《Google Mapreduce》,设计了基于HDFS的Mapreduce分布式计算框架。
MR框架对于程序员的最大意义在于,不需要掌握分布式计算编程,不需要考虑分布式编程里可能存在的种种难题,比如任务调度和分配、文件逻辑切块、位置追溯、工作。这样,程序员能够把大部分精力放在核心业务层面上,大大简化了分布式程序的开发和调试周期。
结构
JobTracker / ResourceManager: 任务调度者,管理多个TaskTracker。ResourceManager是hadoop2.0版本之后引入了yarn,有yarn来管理hadoop之后,jobtracker就被替换成了ResourceManager
TaskTracker / NodeManager:任务执行者
Mapper组件
1.Mapper组件开发方式:写一个类,继承Mapper
2.Mapper组件的作用是定义 每一个MapTask具体要怎么处理数据。比如一个文件,257MB,会生成3个MapTask。即三个MapTask处理逻辑是一样的只是每个MapTask处理的数据不一样。
Reduce
1.reduce组件用于接收mapper组件的输出
2.redudce第一个泛型类型是reduce的输入key,需要和mapper的输出key类型一致
3.第二个泛型类型是reduce的输入value,需要和mapper的输出value类型一致
4.第三个泛型类型是reduce的输出key类型,根据具体业务决定
5.第四个泛型类型是reduce的输出value类型,根据具体业务决定
6.reduce收到map的输出,会按相同的key做聚合,形成:key Iterable 形式然后通过reduce方法传给程序员。
7.reduce方法中的Iterable是一次性的,即遍历一次之后,再遍历,里面就没有数据了。所以,在某些业务场景,会涉及到多次操作此迭代器,处理的方法是:①先创建一个List ②把Iterable装到List ③多次去使用List即可
序列化机制
由于集群工作过程中,需要用到RPC操作,所以MR处理的对象必须可以进行序列化/反序列操作。Hadoop利用的是avro实现的序列化和反序列,并且在其基础上提供了便捷的API
要序列化的对象必要实现相关的接口:
Writable接口--WritableComparable
MapReducer的更多相关文章
- 基于mapreducer的图算法
作者现就职阿里巴巴集团1688技术部 引言 周末看到一篇不错的文章"Graph Twiddling in a MapReduce world" ,介绍MapReduce下一些图算法 ...
- mapReducer第一个例子WordCount
mapreducer第一个例子,主要是统计一个目录下各个文件中各个单词出现的次数. mapper package com.mapreduce.wordCount; import java.io.IOE ...
- 关于mapreducer 读取hbase数据 存入mysql的实现过程
mapreducer编程模型是一种八股文的代码逻辑,就以用户行为分析求流存率的作为例子 1.map端来说:必须继承hadoop规定好的mapper类:在读取hbase数据时,已经有现成的接口 Tabl ...
- Hadoop之 MapReducer工作过程
1. 从输入到输出 一个MapReducer作业经过了input,map,combine,reduce,output五个阶段,其中combine阶段并不一定发生,map输出的中间结果被分到reduce ...
- mapreducer计算原理
mapreducer计算原理
- MapReducer程序调试技巧
写过程序分布式代码的人都知道,分布式的程序是比较难以调试的,但是也不是不可以调试,对于Hadoop分布式集群来说,在其上面运行的是mapreduce程序,因此,有时候写好了mapreduce程序之后, ...
- MapReducer Counter计数器的使用,Combiner ,Partitioner,Sort,Grop的使用,
一:Counter计数器的使用 hadoop计数器:可以让开发人员以全局的视角来审查程序的运行情况以及各项指标,及时做出错误诊断并进行相应处理. 内置计数器(MapReduce相关.文件系统相关和作业 ...
- 关于小改CF协同过滤至MapReducer上的一些心得
至上次重写ID3 MR版之后,手贱继续尝试CF.之前耳闻CF这两年内非常火,论内某大神也给了单机版(90%代码来自于其).所以想试试能否改到MR上.整体来说,CF本身的机制以相似性为核心,与迭代调用几 ...
- mapReducer 去重副的单词
需求是: 统计输出某目录文件的所有单词,去除重复的单词. mapper阶段正常做map工作,映射. 切割单词. <key,value> --> <word,nullWrita ...
随机推荐
- mysql之索引查询1
一 备份数据 备份库: mysqldump:拷贝数据 --database:数据库 基本语法是:mysqldump -h服务器名 -u用户名 -p密码 --database 库名 > 备份路径. ...
- 682. Baseball Game
static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...
- swift-基础语法2
一.整形 :有符号和无符号类型 有符号类型:Int ,Int8 ,Int32,Int64 无符号类型: UInt ,UInt8 UInt32,UInt64 注意点:如果你的开发环境是32位,那么Int ...
- Bayes’s formula for Conditional Probability
Conditional Probability Example:In a batch, there are 80% C programmers, and 40% are Java and C prog ...
- Elastic serarch 安装
1.安装 1.1下载最新的 elasticsearch-6.5.4.tar.gz 1.2解压 tar -zxvf elasticsearch-6.5.4.tar.gz 1.3 创建用户 elastic ...
- Spring Boot 入门实践
一.Eclipse配置Spring Boot环境 1.查看eclipse版本信息: 2.登录:http://spring.io/tools/sts/all 看eclipse对应的插件版本对应的ecli ...
- c# devexpress学习绘图
用字典方式存储数据并绘图:http://www.xuebuyuan.com/465384.html 数据库存储数据,并对图形作各种设置:http://www.cnblogs.com/xuhaibiao ...
- IntelliJ IDEA 2017版 编译器使用学习笔记(七) (图文详尽版);IDE快捷键使用;IDE代码重构(编写高质量代码)
一.重构 重构变量:将语义模糊的变量名称改为更易理解的名称 修改变量名称,快键键 shift + F6 (输入要改的名字,所有位置相同的名字都会改变) 重构方法 ...
- es6 字符串方法
1.字符串的新方法 includes() 包含属性 startsWith() 头部开始是否包含 endWith() 字符串是否在尾部 ========三个返回值都为布尔值 第二参数为数字 e ...
- ubuntu16.04 编译安卓4.2
1. root@ge-Lenovo:/usr/lib/jvm# cd /home/material/install/jdk/ jdk-6u29-linux-x64.bin jdk-6u45-l ...