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)概述 ...
随机推荐
- 0518Scrum项目5.0
1.团队成员完成自己认领的任务. 2.燃尽图:理解.设计并画出本次Sprint的燃尽图的理想线.参考图6. 3.每日立会更新任务板上任务完成情况.燃尽图的实际线,分析项目进度是否在正轨. 每天的 ...
- 一张图让你看懂各开源License[转]
你是否遇到过开源License,精炼而又晦涩的文字通常要读半天才能理解,而且大多数License差别不大,容易混淆.下面这张图让你段时间迅速掌握各种开源的License. 图片来源:阮一峰的博客. f ...
- ros使用rplidar hector_mapping建地图
ros中建地图方式有两种: 首先1.首先下载hector_slam包到你工作空间的src下 命令: cd ~/catkin/src git clone https://github.com/tu-da ...
- WP8.1 Study17:网络之后台下载/上传及HttpClient
一.后台下载/上传 1.简介 使用BackgroundTransferGroup可以十分方便操作上传及下载文件,BackgroundDownloader和BackgroundUploader类中的方法 ...
- Android studio的深坑 导jar包重复的异常处理
导包重复这个问题折磨了整整一天!! 第一个方法在gradle文件下看看有没有重复的包 如果有那么一切都是浮云分分钟搞定 ,最可恶的是在gradle里面没有. 在gradle里面找不到的话就要考虑一下 ...
- JavaScript基础--内部类(九)
js的内部类javascript 中本身提供一些,可以直接使用的类,这种类就是内部类,主要有:ObjectArrayMathBooleanStringRegExpDateNumber 1.内部类分类从 ...
- innerHTML,innertext ,textcontent,write()
innerhtml属于对象的一个属性,一般用于向已经存在的标签中写入内容,或者读取标签的内容. innertext属于对象的一个属性,一般只能用于写入内容,或者读取内容,不能读取dom 中的标签,且只 ...
- NOI Linux JAVA
右键open with another application 里输javaws 按ctrl+shift+del,调出火狐内置的清除最近的历史记录工具(或者按alt键弹出菜单,工具->清空最近历 ...
- BZOJ 2595 斯坦那树
很久以前就想做,后来弃坑了. 最近又在群里有人问了类似的问题,艾老师说是斯坦纳树(%%%) 就是状压DP,然后用Spfa对状态进行转移. #include <iostream> #incl ...
- 从零开始学习Node.js例子三 图片上传和显示
index.js var server = require("./server"); var router = require("./router"); var ...