Hadoop MapReduce 框架原理 | InputFormat 数据输入

文章目录


一、切片与MapTask并行度决定机制

MapTask的并行度决定Map阶段的任务处理并发读,进而影响到整个Job的处理速度,引入两个概念:

  • 数据块:BlockHDFS物理上把数据分成一块一块,数据块是HDFS存储数据单位
  • 数据切片: 只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是MapReduce程序计算输入数据的单位,一个切片会对应启动一个MapTask

Hadoop MapReduce 框架原理 | InputFormat 数据输入

二、Job提交流程

提交一个Job要经过:

  • 建立连接connect()
    • 在这里会判断该Job是本地运行环境还是YARN集群运行环境
  • 提交JobsubmitJobInternal()
    • 创建给集群提交数据的Stag路径—getStagingDir()
    • 获取JobId,并创建Job路径—getNewJobID()
    • 拷贝jar包到集群—copyAndConfigureFiles()uploadFiles
    • 计算切片,生成切片的规划文件—writeSplits
    • Stag路径写XML配置文件—writreXml()
    • 最后提交Job,返回提交状态

如下图所示:
Hadoop MapReduce 框架原理 | InputFormat 数据输入

三、切片执行流程解析

Hadoop MapReduce 框架原理 | InputFormat 数据输入

四、FileInputFormat切片机制

切片机制:

  • 简单地按照文件的内容长度进行切片
  • 切片的大小默认等于Block大小
  • 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

比如输入数据有两个文件:

file1.txt			320M
file2.txt			10M

经过FileInputFormat的切片机制运算后,形成的切片信息如下:

file1.txt.split1			0~128
file1.txt.split2			128~256
file1.txt.split3			256~320
file2.txt.split1			0~19

源码中计算切片大小的公式:

Math.max(minSize,Math.max(maxSize,blockSize));
mapreduce.input.fileinputformat.split.minsize=1		默认值为1
mapreduce.input.fileinputformat.split.maxsize=Long.MAXValue		默认值Long.MAXValue

默认情况下,切片大小=blocksize

切片大小设置:

  • maxsize(切片最大值):参数如果调的比blockSize小,则会让切片变小,而且就等于配置的这个参数值
  • minsize(切片最小值):参数调的比blockSize大,则可以让切片变得比blockSize还大

获取切片信息API:

//获取切片的文件名称
String name = inputSplit.getPath().getName();
//根据文件类型获取切片信息
FileSplit inputSplit = (FileSplit) context.getInputSplit();

五、TextInputFormat

在运行MapReuce程序时,输入的文件格式包括:基于行的日志文件、二进制格式文件、数据库表等。针对不同的数据类型,MapReduce给用户提供了很多的接口

FileInputFormat常见的实现类包括:TextInputFormatKeyValueTextInputFormatNLineInputFormatCombineTextInputFormat和自定义InputFormat

TextInputFormat 是默认的 FileInputFormat 实现类。按行读取每条记录。键是存储该行在整个文件中的起始字节偏移量, LongWritable 类型。值是这行的内容,不包括任何行终止 符(换行符和回车符),Text 类型。

以下是一个示例,比如,一个分片包含了如下 4 条文本记录。

Rich learning form
Intelligent learning engine 
Learning more convenient
From the real demand for more close to the enterprise 

每条记录表示为以下键/值对:

(0,Rich learning form)
(20,Intelligent learning engine)
(49,Learning more convenient)
(74,From the real demand for more close to the enterprise)

六、CombineTextInputFormat切片机制

Hadoop MapReduce 框架原理 | InputFormat 数据输入
Hadoop MapReduce 框架原理 | InputFormat 数据输入

Hadoop MapReduce 框架原理 | InputFormat 数据输入
Hadoop MapReduce 框架原理 | InputFormat 数据输入

上一篇:检查 JavaScript 变量是否为数字的几种方式


下一篇:MapReduce的FileInputFormat实现类对比