hadoop自定义输入格式

一个任务的开始阶段是由InputFormat来决定的!

1.在MapReduce框架中,InputFormat扮演的角色:
– 将输入数据切分成逻辑的分片(Split),一个分片将被分配给一个单独的Mapper
– 提供RecordReader的对象,该对象会从分片中读出<Key-Value>对供Mapper
处理

1.1InputFormat对Mapper的影响:
– 决定了Mapper的数量
– 决定了Mapper的map函数接收的Key和Value

1.2InputFormat:

InputFormat源码解释:

getSplits负责将输入数据进行划分,生成一组分片
createRecordReader返回的对象,负责从分片中读取<Key-Value>对

1.3InputSplit源码解释:

InputSplit是一个抽象类,分片的类都继承自它
方法getLength()用于获取分片的大小
方法getLocations()用于获取存储分片的位置列表

2.MapReduce调用RecordReader,Mapper类的run函数

Mapper通过context来获取Key-Value对,而context的nextKeyValue、
getCurrentKey、getCurrentKey方法,就是调用InputFormat返回的RecordReader对象

3.InputFormat:类层次结构

3.1FileInputFormat:

FileInputFormat是InputFormat的子类,所有使用文件为数据源的输入格式类都继承
自它
---实现了getSplits方法
---返回的分片类型是FileSplit,是InputSplit的子类,里面加入了描述文件路径,分片开始位置
的信息
---没有实现createRecordReader方法,是一个抽象类

FileInputFormat:生成分片

默认情况下为文件在HDFS上的每一个block都生成一个分片
---可通过作业的配置参数mapred.min.split.size和mapred.max.split.size来设置分片大
小的最小值和最大值,设置这两个参数后,可能会对文件连续的block生成一个分片,
使分片大小在指定的范围内。
---一个分片包含的block只来自一个文件

4. MapReduce默认的输入格式是:TextInputformat

TextInputFormat

TextInputFormat 是默认的输入格式
? 是FileInputFormat的子类,继承了它的getSplit方法
? createRecordReader返回的是lineRecordReader的对象
– 每行数据生成一条<Key, Value>记录
– Key:每个数据的记录在数据分片中字节偏移量,类型是LongWritable
– Value:每行的内容,类型是Text

如果输入文件有上万个,那么就需要调用至少上万个Mapper!

4.1自定义输入格式,来解决小文件问题:

CombineFileInputFormat

CombineFileInputFormat是针对小文件设计的输入格式
? 继承了类FileInputFormat
? 重写了getSplit方法
– 返回的分片类型是CombineFileSplit,是InputSplit的子类,可包含多个文件的路径
? 是一个抽象类,编写具体类需要实现createRecordReader方法
– 建议返回值的类型是CombineFileRecordReader,它用于处理类型为CombineFileSplit的分

– CombineFileRecordReader的构造函数中,还需指定一个RecordReader,用于处理分片内
的单个文件

CombineFileInputFormat:生成分片

输出的分片中可包含多个不同文件的block
? 文件切分原理:http://blog.sina.com.cn/s/blog_5673f78b0101etz4.html

自定义输入格式MyInputFormat:

确保文件不被分割,每个文件都只分配到一个分片
? 一个分片可包含多个文件
? 输出的每条<Key, Value>对应一个完整的文本文件
– Key: 文件所属的类别名, 类型是Text
– Value: 文件的文本内容, 类型是Text

时间: 2024-10-27 13:13:12

hadoop自定义输入格式的相关文章

干货--Hadoop自定义数据类型和自定义输入输出格式整合项目案例

正文开始前 ,先介绍几个概念 序列化 所谓序列化,是指将结构化对象转化为字节流,以便在网络上传输或写到磁盘进行永久存储. 反序列化 是指将字节流转回到结构化对象的逆过程 序列化在分布式数据处理的两个大领域经常出现:进程间通信和永久存储 在Hadoop中,系统中多个节点上进程间的通信是通过"远程过程调用"(remote procedure call,RPC)实现的 .RPC协议将消息序列化成二进制流后发送到远程节点,远程节点接着将二进制流反序列化为原始消息 Hadoop使用了自己写的序列

Hadoop 高级程序设计(二)---自定义输入输出格式

Hadoop提供了较为丰富的数据输入输出格式,可以满足很多的设计实现,但是在某些时候需要自定义输入输出格式. 数据的输入格式用于描述MapReduce作业的数据输入规范,MapReduce框架依靠数据输入格式完后输入规范检查(比如输入文件目录的检查),对数据文件进行输入分块(InputSpilt)以及提供从输入分快中将数据逐行的读出,并转换为Map过程的输入键值对等功能.Hadoop提供了很多的输入格式,TextInputFormat和KeyValueInputFormat,对于每个输入格式都有

MapReduce输入格式

文件是 MapReduce 任务数据的初始存储地.正常情况下,输入文件一般是存储在 HDFS 里面.这些文件的格式可以是任意的:我们可以使用基于行的日志文件, 也可以使用二进制格式,多行输入记录或者其它一些格式.这些文件一般会很大,达到数十GB,甚至更大.那么 MapReduce 是如何读取这些数据的呢?下面我们来学习 InputFormat 接口 1.InputFormat接口 InputFormat接口决定了输入文件如何被 Hadoop分块(split up)与接受.InputFormat

hadoop编程小技巧(5)---自定义输入文件格式类InputFormat

Hadoop代码测试环境:Hadoop2.4 应用:在对数据需要进行一定条件的过滤和简单处理的时候可以使用自定义输入文件格式类. Hadoop内置的输入文件格式类有: 1)FileInputFormat<K,V>这个是基本的父类,我们自定义就直接使用它作为父类: 2)TextInputFormat<LongWritable,Text>这个是默认的数据格式类,我们一般编程,如果没有特别指定的话,一般都使用的是这个:key代表当前行数据距离文件开始的距离,value代码当前行字符串:

Excel 2007中自定义数字格式前要了解的准则

要在Excel 2007中创建自定义数字格式,首先应了解自定义数字格式的准则,并从选择某一内置数字格式开始.然后,可以更改该格式的任意代码部分,从而创建自己的自定义数字格式. 数字格式最多可包含四个代码部分,各个部分用分号分隔.这些代码部分按先后顺序定义正数.负数.零值和文本的格式. <正数>;<负数>;<零>;<文本> 例如,可以使用这些代码部分创建以下自定义格式: [蓝色]#,##0.00_);[红色](#,##0.00);0.00;"销售额

自定义日期格式-炫酷

代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>自定义日期格式</title> 6 <style> 7 *{margin: 0;padding:0;} 8 html, body{width:100%;height:100%;} 9 body{background:

Hadoop自定义类型处理手机上网日志

job提交源码分析 在eclipse中的写的代码如何提交作业到JobTracker中的哪?(1)在eclipse中调用的job.waitForCompletion(true)实际上执行如下方法 connect(); info = jobClient.submitJobInternal(conf); (2)在connect()方法中,实际上创建了一个JobClient对象. 在调用该对象的构造方法时,获得了JobTracker的客户端代理对象JobSubmissionProtocol. JobSu

有五个学生,每个学生有3门课(语文、数学、英语)的成绩, * 写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩)

/* * 3. 有五个学生,每个学生有3门课(语文.数学.英语)的成绩, * 写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩), * 然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中. * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息 * */ import java.io.*; import java.util.*; public class Test3 { publi

C#/VB.NET Winform程序自定义输入光标

本文转载自真有意思网(http://www.zu14.cn) 作者:三角猫 DeltaCat摘要:C#/VB.NET Winform程序自定义输入光标的实现,我们可以通过调用Windows 提供的一套对输入光标进行控制的API进行操作...... Windows 提供了一套对输入光标进行控制的API, 包括:CreateCaret,SetCaretPos,DestroyCaret,ShowCaret,HideCaret.这些API的定义如下: [DllImport("user32.dll&quo