MapReduce格式与类型
MapReduce Types
MapReduce是一个简单的数据处理模型,map与reduce的输入和输出类型都为key-value形式的键值对。
map: (K1, V1) → list(K2, V2)
reduce: (K2, list(V2)) → list(K3, V3)
一般来讲,map的输入key与输出value类型(K1,V1)不同于map的输出类型(K2,V2).reduce的输入类型比如与map的输出类型保持一致,reduce的输出类型可能会有不同的形式(K3,V3)。下面是JAVA API:
public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
public class Context extends MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
// ...
}
protected void map(KEYIN key, VALUEIN value,
Context context) throws IOException, InterruptedException {
// ...
}
} public class Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
public class Context extends ReducerContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
// ...
}
protected void reduce(KEYIN key, Iterable<VALUEIN> values,
Context context) throws IOException, InterruptedException {
// ...
}
}
最终由context调用write()方法将key-value pairs输出
public void write(KEYOUT key, VALUEOUT value)
throws IOException, InterruptedException
Mapper与Reducer是两个不同的classes,分别具有不同的入参类型,Mapper的入参类型可能与Reducer的入参类型不同,比如Mapper的key的入参为LongWritable,reduce的为Text.
这里有一点,如果在map阶段调用了combine方法,那么就与reduce的入参相同
map: (K1, V1) → list(K2, V2)
combine: (K2, list(V2)) → list(K2, V2)
reduce: (K2, list(V2)) → list(K3, V3)
使用parition方法对中间结果的key与value进行操作时,将会返回parition的位置(index),parition将决定于排过序的key
public interface Partitioner<K2, V2> extends JobConfigurable {
int getPartition(K2 key, V2 value, int numPartitions);
}
默认的分区类型为HashPartitioner,由它决定着key属于哪个分区,每一个分区都属于一个reduce task,所以分区的个数决定了reduce tasks的个数
public
class
HashPartitioner
<
K
,
V
>
extends
Partitioner
<
K
,
V
>
{
public
int
getPartition
(
K
key
,
V
value
,
int
numReduceTasks
)
{
return
(
key
.
hashCode
()
&
Integer
.
MAX_VALUE
)
%
numReduceTasks
;
}
}
当你需要多个reduce tasks作业任务时,HashPartitioner就举足轻重了,因为map的结果将会传递给多个reduce,那么相同的key将会被分发到不同reduce task,大大提升了作业效率。那么reduce个数的决定了整个作业的并行度,有人会问,那map的个数呢,map的个数是由文件的block数目决定的,具体下面再说~
那么reducer个数的把握将会是一门艺术- -增加reducer的个数相当于增加了并行度。
较小的文件与CombineFileInputFormat
Hadoop的作业适用于较大的文件,原因在于FileInputFormat是split整个文件还是split单个文件,如果文件太小(这里指的是小于HDFS的block块大小)并且拥有很多这样的文件,那么就会增加打开文件的性能开销。同时,大量的小文件也会增加namenode的元数据的存储开销。
参考文献:《Hadoop:The Definitive Guide, 4th Edition》
MapReduce格式与类型的更多相关文章
- Java日期的格式String类型GMT,GST换算成日期Date种类
请尊重他人的劳动成果.转载请注明出处:Java日期格式化之将String类型的GMT,GST日期转换成Date类型 http://blog.csdn.net/fengyuzhengfan/articl ...
- erlang处理mongodb日期时间格式data类型(原)
在项目中,mongo中要创建日期类型,根据这个日期类型进而对mongo设置过期时间expire,加上对应的index索引自动删除. 而mongo中的日期类型,使用ISO格式,例如:ISODate(&q ...
- MarkDown 格式生产类型
-- 不默认换行, 真的结束, 包括格式设定,记得空一行. -- 学习参考地址如下, 讲的不好, 太复杂, 不适合新手. 有好读的更好. ** 但是江湖规矩 还是引用下吧 这是地址(http://wo ...
- html input file accept 上传文件类型限制格式 MIME 类型列表
例: <input type="file" accept="application/vnd.openxmlformats-officedocument.spread ...
- Json格式String类型字符串转为Map工具类
package agriculture_implement.util; import com.google.gson.Gson; import com.google.gson.JsonSyntaxEx ...
- Oracle- 日期格式和数字类型处理
更新数据库时间格式的显示格式的语句:(alter session set nls_date_format='YYYY-MM-dd'); to_date("要转换的字符串",&quo ...
- jquery请求格式和返回类型 汇总
常规请求基本格式 1 [WebMethod] 2 public string SayHello(string name) 3 { 4 return "Hello " + name; ...
- 关于Mapreduce Text类型赋值的错误
Mapreduce中Text类型数据被无缘无故替换? 今天偶然看到一个mapreduce demo,直接上手操作 统计两个文件中 最大值 文件中数据格式为 名字 数值 输出为 名字(最大值所对应的 ...
- Hadoop(十七)之MapReduce作业配置与Mapper和Reducer类
前言 前面一篇博文写的是Combiner优化MapReduce执行,也就是使用Combiner在map端执行减少reduce端的计算量. 一.作业的默认配置 MapReduce程序的默认配置 1)概述 ...
随机推荐
- PostgreSQL的时间/日期函数使用 转
http://www.cnblogs.com/mchina/archive/2013/04/15/3010418.html
- 注册Github
注册Github 1.打开Github网页 2.设置用户名.邮箱.密码(右侧会显示是否可以使用),点击注册 3.此时邮箱会发来来自Github的注册消息,进入邮箱,点连接,完成注册 4.注册成功
- POJ 3020 Antenna Placement 匈牙利算法,最大流解法 难度:1
http://poj.org/problem?id=3020 #include <cstdio> #include <cstring> #include <vector& ...
- 一个 11 行 Python 代码实现的神经网络
一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...
- Linux定时器相关源码分析
Linux的定时器使用时间轮算法.数据结构不难理解,核心数据结构与散列表及其相似,甚至可以说,就是散列表.事实上,理解其散列表的本质,有助于对相关操作的理解. 数据结构 这里先列出一些宏,稍后解释: ...
- Android 开源组件 ----- Android LoopView无限自动轮转控件
Android 开源组件 ----- Android LoopView无限自动轮转控件 2015-12-28 15:26 by 杰瑞教育, 32 阅读, 0 评论, 收藏, 编辑 一.组件介绍 App ...
- 关于VS中文件属性的解释
生成操作(BuildAction) 属性:BuildAction 属性指示 Visual Studio .NET 在执行生成时对文件执行的操作.BuildAction 可以具有以下几个值之一: 无(N ...
- c语言基础
- linux安装eclipse
1 采用ssh无法运行eclipse, 错误如下: Autolaunch error: X11 initialization failed.\n, 打开日志文件: org.eclipse.swt. ...
- HDU 5360 (贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:告诉你n个区间[ l[i],r[i] ],然后让你排序,必须左区间不大于它前边的总区间个数 ...