Hadoop TextInputFormat
1. TextInputFortmat
TextInputFormat是默认的InputFormat。每条记录是一行输入。Key是LongWritable类型,存储该行在整个文件中的字节偏移量(不是行数),值是这行的内容,为一个Text对象。
例如输入文件为:
grunt> cat test2
12,e21,ddwq,dqw,dwqw
sfd,cda,cdsz,cdwq,qwe
12,cds,fwa,feacd,cadfa
21ede,cdsf,ca,fa,dcac
caewf,ea,cdadc,acds,acsd
12e,afs,afesd,caefd,cawc
cax,cafe,caefe,fea,ceaef
在使用默认的 Map处理后输出:
grunt> cat out
0 12,e21,ddwq,dqw,dwqw
21 sfd,cda,cdsz,cdwq,qwe
43 12,cds,fwa,feacd,cadfa
66 21ede,cdsf,ca,fa,dcac
88 caewf,ea,cdadc,acds,acsd
113 12e,afs,afesd,caefd,cawc
138 cax,cafe,caefe,fea,ceaef
可以看到Key的值并不是行数,而是字节在文件中的偏移量。一般情况下,很难获取到文件的行号,因为文件是按字节切分为分片,而不是按行切分。
在按行读文本的情况下,可能会存在超长行的情况。超长行会导致内存溢出,可以通过设置 mapreduce.input.linerecordreader.line.maxlength,指定一个最长行的字节数(在内存范围内),可以确保 recordreader 跳过超长行。
2. KeyValueTextInputFormat
TextInputFormat 将文件中的行作为Key,每行对应的文本作为Value。但是对于某些文件内容已经是 Key-Value 形式的话,使用 TextInputFormat 会显得多次一举。在这种情况下,我们可以使用KeyValueTextInputFormat,它以某个分隔符进行分割(默认为制表符):
public KeyValueLineRecordReader(Configuration conf) throws IOException {
String sepStr = conf.get("mapreduce.input.keyvaluelinerecordreader.key.value.separator", "\t");
this.separator = (byte)sepStr.charAt(0);
}
一个范例如下,使用逗号为分隔符:
grunt> cat test2
12,e21,ddwq,dqw,dwqw
sfd,cda,cdsz,cdwq,qwe
12,cds,fwa,feacd,cadfa
21ede,cdsf,ca,fa,dcac
输出为:
grunt> cat out
12 cds,fwa,feacd,cadfa
12 e21,ddwq,dqw,dwqw
12e afs,afesd,caefd,cawc
21ede cdsf,ca,fa,dcac
在任务设置中需要做的配置如下:
Configuration conf = new Configuration();
conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ",");
job.setInputFormatClass(org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat.class);
3. NLineInputFormat
在使用TextInputFormat和KeyValueInputFormat 时,每个mapper 收到的行数取决于输入的分片大小以及行的长度。如果希望 mapper 收到固定行的输入,则需要使用 NLineInputFormat。与 TextInputFormat一样,key是文件中的字节偏移量,值是行本身。
N是每个mapper收到的输入行数。N设置为1时(默认),每个mapper正好收到一行输入。同样使用之前的一共7行输入,使用NLineInputFormat:
job.setInputFormatClass(org.apache.hadoop.mapreduce.lib.input.NLineInputFormat.class);
grunt> cat out
0 12,e21,ddwq,dqw,dwqw
21 sfd,cda,cdsz,cdwq,qwe
43 12,cds,fwa,feacd,cadfa
…
查看此任务的相关指标,可以看到:
Job Counters
Launched map tasks=7
Launched reduce tasks=1
Other local map tasks=7
Mapper数一共有7个,也就是每行均生成了一个Map。可以通过设置以下参数指定NLine为多少行:
mapreduce.input.lineinputformat.linespermap
References: Hadoop权威指南第四版
Hadoop TextInputFormat的更多相关文章
- Hadoop TextInputFormat源码分析
from:http://blog.csdn.net/lzm1340458776/article/details/42707047 InputFormat主要用于描述输入数据的格式(我们只分析新API, ...
- hadoop可能遇到的问题
1.hadoop运行的原理? 2.mapreduce的原理? 3.HDFS存储的机制? 4.举一个简单的例子说明mapreduce是怎么来运行的 ? 5.面试的人给你出一些问题,让你用mapreduc ...
- hadoop面试时可能遇到的问题
面试hadoop可能被问到的问题,你能回答出几个 ? 1.hadoop运行的原理? 2.mapreduce的原理? 3.HDFS存储的机制? 4.举一个简单的例子说明mapreduce是怎么来运行的 ...
- hadoop+海量数据面试题汇总(一)
hadoop面试题 Q1. Name the most common InputFormats defined in Hadoop? Which one is default ? Following ...
- Hadoop就业面试题
----------------------------------------------------------------------------- [申明:资料来源于互联网] 本文链接:htt ...
- Tachyon在Spark中的作用(Tachyon: Reliable, Memory Speed Storage for Cluster Computing Frameworks 论文阅读翻译)
摘要: Tachyon是一种分布式文件系统,能够借助集群计算框架使得数据以内存的速度进行共享.当今的缓存技术优化了read过程,可是,write过程由于须要容错机制,就须要通过网络或者 ...
- Hadoop源码解析之: TextInputFormat如何处理跨split的行
我们知道hadoop将数据给到map进行处理前会使用InputFormat对数据进行两方面的预处理: 对输入数据进行切分,生成一组split,一个split会分发给一个mapper进行处理. 针对每个 ...
- Hadoop学习之TextInputFormat分片逻辑探究
期望 顺着上一篇文章<Hadoop学习之第一个MapReduce程序>中遗留的分片疑惑,探究TextInputFormat的分片逻辑. 第一步 上Apache官网下载实验所使用的Hadoo ...
- [Hadoop in Action] 第7章 细则手册
向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序 1.向任务传递作业定制的参数 在编写Mapper和Reducer时,通常会想让一些地方可以配 ...
随机推荐
- vim和emacs
vim和emacs 在编程界一直有两大神器的传说.这两大神器一个是emacs,一个是vim.一个是神的编辑器,一个是编辑器之神. 程序员的圈子里面也一直流传着一个段子,说是世界上的程序员分为三种.使用 ...
- 剑指offer-面试题26-树的子结构-二叉树
/* 题目: 输入两棵二叉树A和B,判断B是不是A的子树. */ /* 思路: 1.注意浮点数大小的判断. 2.判断树A的某个节点是否和树B的根节点是否相同, 若相同,则判断以A该节点为根节点是否包含 ...
- jsp+servlet和ajex中遇到的问题
软件杯的时候,我们的项目需要在手机端运行,由于本身的这个项目我们使用jsp+servlet做的一个项目,所以我们利用ajex,把eclipse作为后台运行tomcat8,,在hbuilder用weba ...
- 使用微信扫一扫时获取sign签名
private $appId = '你的APPID'; private $appSecret = '你的APPsecret'; /** * 获取签名信息 * @return array */ publ ...
- windows命令提示符常用命令
1.进入某个磁盘 c: 进入c盘 d: 进入d盘 2.返回到根目录 cd \ 3.查看当钱路径下的文件和文件夹 dir 4.清空窗口内容 cls 5.关闭窗口 exit 6.返回上一级目录 cd . ...
- Wannafly Camp 2020 Day 3I N门问题 - 概率论,扩展中国剩余定理
有一个猜奖者和一个主持人,一共有 \(n\) 扇门,只有一扇门后面有奖,主持人事先知道哪扇门后有奖,而猜奖者不知道.每一轮,猜奖者选择它认为的有奖概率最大(如果有多个最大,随机选一个)的一扇门,主持人 ...
- 1级搭建类107-Oracle 18c 单实例 FS(华为云)公开
项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列除特定项目目前不对外发布,仅作为博客记录,其他公开.如学员在 ...
- java exec python program
I find three methods, the first is using jython, the module of jython can transform the type of data ...
- CSS: inline、block和inline-block的区别
block 块级元素特点: 1.每个块级元素都从新的一行开始,并且其后的元素也另起一行.(很霸道,一个块级元素独占一行) 2.元素的高度.宽度.行高以及顶和底边距都可设置. 3.元素宽度在不设置的情况 ...
- Gauss消元模板
; //高斯消元模板 //----------------------------------------------------------------------------------- //把 ...