概述

Hadoop的MapReduce中,map和reduce函数遵循如下常规格式:
map:(K1,V1) -> list(K2,V2)
reduce:(K2,list(V2)) -> list(K3,V3)
输入数据的类型由输入格式进行设置。例如,对应于TextInputFormat的键类型是LongWritable,值类型是Text。其他类型通过调用JobConf上的方法进行显示设置。如果没有显示设置,中间的类型默认为最终的输出类型。因此,如果K2与K3相同,就不需要调用setMapOutputKeyClass(),因为它将调用setOutputKeyClass(),如果V2与V3相同,只需要使用setOutputValueClass()。

默认的MapReduce作业

  • 默认的输入格式是TextInputFormat。
  • 默认的mapper是IdentityMapper,它将输入的键和值原封不动的写到输出中。
  • 默认的partitioner是HashPartitioner,它对每条记录的键进行哈希操作以决定该记录属于哪个分区。每个分区对应一个reducer任务,所以分区数等于作业的reducer的个数。
  • 默认只有一个reducer,它是IdentityReducer。reducer的最优个数与集群中可用的reducer任务槽数相关。总槽数由mapred.tasktracker.reduce.tasks.maximum属性的值决定。通常情况下,reducer数设置比总槽数稍微少一些。

输入格式

输入分片与记录

一个输入分片就是由单个map处理的输入块,每个map操作只处理一个输入分片。每个分片被划分为若干个记录,每条记录就是一个键值对。

FileInputFormat类

FileInputFormat类是所有使用文件作为数据源的InputFormat实现的基类。它提供两个功能:一个定义哪些文件包含在一个作业的输入中,一个为输入文件生成分片的实现。

FileInputFormat类的输入路径

FileInputFormat类提供四种静态方法来设定JobConf的输入路径:

public static void addInputPath(JobConf conf, Path path)
public static void addInputPaths(JobConf conf, String commaSeparatedPaths)
public static void setInputPaths(JobConf conf, Path... inputPaths)
public static void setInputPaths(JobConf conf, String commaSeparatedPaths)

FileInputFormat类的输入分片

FileInputFormat只分割超过HDFS块大小的文件。分片通常与HDFS块大小一致,但也可以通过设置属性改变,最小的分片大小通常是一字节。最大的分片大小默认是Java long类型表示的最大值。
分片的大小由以下公式计算:
max(minimumSize, min(maximumSize, blockSize))
默认情况下:
minimumSize < blockSize < maximumSize
所以默认大小就是blockSize。

小文件与CombineFileInputFormat

相对于大批量的小文件,Hadoop更适合处理少量的大文件。对应大量小文件的问题,使用CombineFileInputFormat会把多个文件打包到一个分片。

文本输入

TextInputFormat

TextInputFormat是默认的InputFormat。每条记录是一行输入,键是存储该行在整个文件中的字节偏移量。值是这行的内容。

KeyValueTextInputFormat

TextInputFormat的键通常不是特别有用,因此我们可以用KeyValueTextInputFormat。

NLineInputFormat

如果希望mapper收到固定行数的输入,需要使用NLineInputFormat作为InputFormat,通过设置mapred.line.input.format.linespermap属性,控制mapper收到行数。

数据库输入(和输出)

DBInputFormat这种输入格式用于使用JDBC从关系数据库中读取数据。最好用于加载小量的数据集,如果需要与来自HDFS的大数据集连接,要使用MultipleInputs。

java程序员的大数据之路(9):MapReduce的类型相关推荐

  1. java程序员的大数据之路(13):Pig入门

    Pig简介 Pig为大型数据集的处理提供了更高层次的抽象. Pig包括两部分: 用于描述数据流的语言,称为Pig Latin. 用于运行Pig Latin程序的执行环境.当前有两个环境:单JVM中的本 ...

  2. java程序员的大数据之路(3):用maven构建Hadoop项目

    背景 由于Hadoop项目多数是比较大的项目,因此我们选择使用构建工具来构建Hadoop项目,这里我们使用的是maven.当然也可以使用Gradle等比较流行的构建工具 构建过程 这里总结一下我使用I ...

  3. java程序员的大数据之路(14):Pig Latin

    结构 一个Pig Latin程序由一组语句构成,一个语句可以理解为一个操作,或一个命令.语句必须以分号结束. Pig Latin有两种注释方法,双减号表示单行注释.多行注释可以使用/* 和 */表示. ...

  4. java程序员的大数据之路(1):Hadoop安装

    Hadoop伪分布式安装 从今天开始我会在这里记录在大数据学习方面的方法和遇到的一些问题. 首先从最著名的开源平台Hadoop开始学习.参考安装教程,这个教程比较全面,按照步骤一步步安装即可. 安装时 ...

  5. java程序员的大数据之路(12):Hadoop的守护进程

    关键属性 Hadoop守护进程的关键属性大多标记为final,使作业的配置无法覆盖. 典型的core-site.xml配置文件 <?xml version="1.0"> ...

  6. java程序员的大数据之路(2):创建第一个Hadoop程序

    环境 Ubuntu 16.04 + Hadoop 2.7.4 + Intellij idea 2017.2 + jdk 1.8 创建过程 新建工程 新建一个工程 输入工程名 可以随便给工程起一个名字, ...

  7. java程序员的大数据之路(15):Pig Latin用户自定义函数

    过滤函数 所有的过滤函数都要继承FilterFunc类,并且实现抽象方法exec(),该方法的返回类型为Boolean. 示例代码如下: package com.udf.filter;import o ...

  8. java程序员的大数据之路(8):MapReduce的工作机制

    概述 Hadoop运行作业时的整个过程如果所示. 包含如下4个独立的实体. 客户端:提交MapReduce作业. jobtracker:协调作业的运行.它的主类是JobTracker. tasktra ...

  9. java程序员的大数据之路(7):基于文件的数据结构

    SequenceFile 介绍 由于日志文件中每一条日志记录是一行文本.如果想记录二进制类型,纯文本是不合适的.这种情况下,Hadoop的SequenceFile类非常合适.SequenceFile可 ...

最新文章

  1. Python网络编程2:创建套接字和套接字对象的内建方法
  2. 【Java面试题】提取不重复的整数
  3. android 屏幕旋转不重新加载,Android webview旋转屏幕导致页面重新加载问题解决办法...
  4. 在一起计时器_古典计时器简介之一 qqtimer
  5. 飞猪:国庆乡村民宿订单量涨560% 00后红色旅游订单量同比涨80%
  6. fgets,cin. getline被跳过
  7. 用phpcms如何将静态页面制作成企业网站(上)
  8. ubuntu 分区_系统小技巧:迁移通过Wubi方式安装的Ubuntu系统
  9. pad点餐系统 内存管理的一点总结
  10. Java 多版本JDK 环境配置 javac和java 版本不一致
  11. Maven生命周期详解及常用命令
  12. 平稳时间序列以及MATLAB相关工具箱学习笔记
  13. 集合的一些练习题1(Collection+Map)
  14. docker swarm 部署 sentry9.1.2
  15. Intellig idea关闭自动更新
  16. mysql 1273错误
  17. Python Tkinter 下载器 多任务下载+多线程下载+多任务断点续存
  18. 微信小程序中的iPhone X适配解决
  19. linux mailxdingding机器人报警
  20. 茅山光大大团队第二次冲刺进度展示

热门文章

  1. 鼠标点击时计算机做了什么原因,电脑鼠标双击变单击怎么办 电脑鼠标双击变单击的原因【图文】...
  2. 深度学习之---起源
  3. 【CSDN|每日一练】幼稚班作业
  4. 从盘古开天辟地说起为什么 Flink CP 能实现精确一次?(下)
  5. 与v-model等价的写法
  6. 高校生英文写作工具推荐
  7. 6108v9c卡刷包_wc6108v9c线刷包_wc6108v9c刷机包_wc6108v9c固件包_wc6108v9c救砖包 - 线刷宝ROM中心...
  8. (一)移动端 Web 开发基础
  9. 数字图像处理——中值滤波降噪
  10. 年轻的Vivaldi浏览器正在从社区中汲取灵感