在hadoop mapreduce的TextInputFormat中,什么是字节偏移?以及如何将键作为字节偏移量和值作为行的内容?

时间:2015-08-16 17:58:22

标签: hadoop

在浏览CustomInputFormat主题时,我发现我们有一些默认的输入格式,如TextInputFormat,KeyValueInputFormat,SequencefileInputFormat和NlineInputFormat。

对于TextInputFormat,从记录中读取行,并将行的字节偏移用作键,并将内容用作值。什么是Byte Offset以及如何将线的内容视为值,请建议。

1 个答案:

答案 0 :(得分:4)

TextInputFormat 是默认的InputFormat。每条记录都是一行输入。关键,a LongWritable,是行开头文件中的字节偏移量。价值是 该行的内容,不包括任何行终止符(例如换行符或回车符), 并打包为Text对象。所以包含以下文本的文件:

On the top of the Crumpetty Tree
The Quangle Wangle sat,
But his face you could not see,
On account of his Beaver Hat.

分为四个记录的一个分割。记录被解释为以下

键值对:

(0, On the top of the Crumpetty Tree)
(33, The Quangle Wangle sat,)
(57, But his face you could not see,)
(89, On account of his Beaver Hat.)

显然,密钥不是行号。一般来说,这是不可能实现的, 因为文件在字节而不是行边界处被分成了分裂。拆分处理 独立。行号实际上是一个连续的概念。你必须保持计数 消耗它们时的行数,因此知道拆分中的行号 可能,但不在文件中

但是,每行的文件中的偏移量是独立于每个分割的 其他拆分,因为每个拆分都知道前面拆分的大小,只是添加了这个 分割内的偏移量产生全局文件偏移量。通常是偏移量 足以满足每行需要唯一标识符的应用程序。结合 文件的名称,在文件系统中是唯一的。当然,如果所有的线都是固定的 宽度,计算行数只是将偏移量除以宽度。