数据类型的选择

自定义数据类型

参考:Hadoop提交作业自定义排序和分组

MapWritable/SortedMapWritable

Hadoop中可传输的Map集合,和Java中的Map用法差不多,但是可以用与mapper和reducer之间的数据传输

Map输出不同类型的Value

使用自定义的数据类型继承自GenericWritable可以实现在mapper中输出多个不同类型的value

//使用这个数据类型将可以输出IntWritable和Text两种类型的value
public class MultiValueWritable extends GenericWritable{
private static Class[] CLASSES = new Class{
IntWritable.class,
Text.class
} public MultiValueWritable(){
} public MultiValueWritable(Writable value){
set(value);
} protected Class[] getTypes(){
return CLASSES;
}
}

mapper中context.write的时候可以使用如下的格式:

context.write(key,new MultiValueWritable(new Text("1")));
context.write(key,new MultiValueWritable(IntWritable Text(1)));

reducer的Values迭代器中可以通过这种方式来判断value是那种数据类型:

Writable value = value.get();
if(value instanceof Text){
...
}

选择合适的InputFormat/OutputFormat

基本上每个InputFormat都会有一个对应的OutputFormat

TextInputFormat

默认的输入格式,按行读取,key为每行偏移量,value为行的内容

NLineInputFormat

可以指定一次数据文件多少行的内容:

//设置一次读取50行的内容
NLineInputFormat.setNumLinesPerSplit(job,50);

SequenceFileInputFormat

输入的格式为keylen,key,valuelen,value,适合用于多个job之间的数据连接

DBInputFormat

处理数据库输入,待使用测试

自定义的InputFormat

参考:自定义分片策略解决大量小文件问题

同时处理不同类型的输入

参考:多个Mapper和Reducer处理多个输入

Partitioner的选择

TotalOrderPartitioner

对所有reducer中的结果进行排序,默认情况下每个reducer中的内容都是各自排序互不影响的

自定义partitioner

参考:Hadoop作业中自定义分区和归约

KeyFieldBasedPartitioner

在分区的时候mapper的key部分会参与计算

配合参数

map.output.key.field.separator
num.key.fields.for.partition

指定分隔符和要参与分区的字符索引

例如:key=”name-price”,指定map.output.key.field.separator=”-“,num.key.fields.for.partition=1表示key的price部分参与分区计算

二次排序

setSortComparatorClass

map中每个分区调用进行排序,reduce中shuffle之后再次调用

setGroupingComparatorClass

第二次排序,属于同一组的顺序记录并放入同一个value迭代器

分布式缓存的使用

参考:MapReduce中的DistributedCache

作者:@小黑

MapReduce开发技巧的更多相关文章

  1. SQL开发技巧(二)

    本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列文章基于SQLServer系列,且版本为SQLServer2005及以上-- 文章系列目录 SQL开发技巧(一) SQL开 ...

  2. 基于 Eclipse 的 MapReduce 开发环境搭建

    文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6055850.html 上周末本来要写这篇的,结果没想到上周末自己环境都没有搭起来,运行起 ...

  3. DelphiXE2 DataSnap开发技巧收集

    DelphiXE2 DataSnap开发技巧收集 作者:  2012-08-07 09:12:52     分类:Delphi     标签: 作为DelphiXE2 DataSnap开发的私家锦囊, ...

  4. delphi XE5下安卓开发技巧

    delphi XE5下安卓开发技巧 一.手机快捷方式显示中文名称 project->options->Version Info-label(改成需要显示的中文名即可),但是需要安装到安卓手 ...

  5. 经典收藏 50个jQuery Mobile开发技巧集萃

    http://www.cnblogs.com/chu888chu888/archive/2011/11/10/2244181.html 1.Backbone移动实例 这是在Safari中运行的一款Ba ...

  6. 移动 Web 开发技巧之(后续)

    昨天的<移动 Web 开发技巧>的这篇文章,大家反响不错,因为这些问题在大家日常写移动端的页面时经常遇到的.所以那个文章还是超级实用的,那么我们今天继续来分享一下移动端的web开发技巧吧, ...

  7. Maven 安装以及一些开发技巧

    解压 apache-maven-3.2.5 在conf ->sites中配置repository 的路径. Eclipse 配置 maven 2. 3. 一些小BUG 或开发技巧 eclipse ...

  8. thinkphp开发技巧经验分享

    thinkphp开发技巧经验分享 www.111cn.net 编辑:flyfox 来源:转载 这里我给大家总结一个朋友学习thinkphp时的一些笔记了,从变量到内置模板引擎及系统变量等等的笔记了,同 ...

  9. Java 8的五大开发技巧

    转载:http://geek.csdn.net/news/detail/94219 在Java 9发布之前,我们来分享一些Java 8开发技巧,本文翻译自JetBrains高级开发主管Trisha G ...

随机推荐

  1. php大图

    原文地址:https://laravel-china.org/articles/9450/php-fpm-vs-swoole

  2. 2017-2018-1 20179202《Linux内核原理与分析》第五周作业

    一.系统调用实验: 1.知识准备: (1)系统调用的三层皮:xyz()(API).system_call(所有系统调用的入口) . sys_xyz()(中断服务程序) (2)API是程序员在用户空间下 ...

  3. struts2和1的区别

    先大致介绍下struts1和struts2 struts:过去最流行的web MVC组件,apache项目组的一个开源项目. struts2:现在非常流行的web MVC组件,是apache用stru ...

  4. Vue 2.0学习(二)数据绑定

    Vue实例对象 创建一个vue应用很简单,通过构造函数Vue就能创建一个Vue的根实例: var app = new Vue({ el: '#app', data: { message: 'Hello ...

  5. [BZOJ3676][APIO2014]回文串(Manacher+SAM)

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 3097  Solved: 1408[Submit][Statu ...

  6. [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))

    5109: [CodePlus 2017]大吉大利,晚上吃鸡! Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 107  Solved: 57[Sub ...

  7. 【贪心】【高精度】zoj3987 Numbers

    题意:给你一个数n,让你找m个非负整数,使得它们的和为n,并且按位或起来以后的值最小化.输出这个值. 从高位到低位枚举最终结果,假设当前是第i位,如果m*(2^i-1)<n的话,那么说明这一位如 ...

  8. [CodeForces850C]Arpa and a game with Mojtaba

    题目大意: 给你一个包含n个数的数列,两个人轮流对数列进行如下操作: 选择一个质数p和一个正整数k,将数列中所有能被p^k整除的数除以p^k. 最后不能操作者负. 问先手是否有必胜策略. 思路: 显然 ...

  9. Codeforces Round #304 (Div. 2) B. Soldier and Badges 水题

    B. Soldier and Badges Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/54 ...

  10. 如果内容很长ueditor编辑辑器怎么出现滚动条

    在开发网站的时候,有的页面需要加载ueditor编辑器,如果内容很长,默认设置的时候编辑器会根据内容拉长,而不是页面出现滚动条,如果拖动页面滚条,会比较麻烦,要拖动很长才能看到提交按钮. 如何才能让编 ...