2013-03-08 111 views
0

我想了解一个示例hadoop项目。它具有以下的代码块如何为SequenceFileInputFormat定义映射函数的键和值输入?

jconf.setOutputKeyClass(Text.class); 
jconf.setOutputValueClass(Text.class); 
jconf.setInputFormat(SequenceFileInputFormat.class); 

this link,我读到为SequenceFileInputFormat,键和值是用户定义的。我需要为此实现RecordReader吗?我没有看到它在项目中实施。是否有任何默认分隔符用于将输入分割分割为键值对?

回答

1

您不必实现RecordReader来读取序列文件。

但是,生成序列文件并不像生成文本文件那么简单。 所有命令如

Hadoop的FS -put

默认生成HDFS的文本文件。

如果您想测试一个需要序列文件作为输入的MR程序,首先需要将您的文本文件转换为序列文件并将其作为输入。

要从文本文件创建序列文件,可以编写带有标识映射器且不含reducer的简单MR。您需要将输入文件格式设置为文本并将该文本文件作为输入;将输出格式设置为序列文件。这项工作的输出将是您的文本文件的顺序文件格式的副本。请确保您选择此作业的输出键和值,同时牢记使用序列文件的任何后续MR作业将具有接受它们作为输入键和值。换句话说,序列文件中的键和值在创建时决定。

任何后续的MR作业(如您所引用的那个作业)需要一个序列文件 可以使用上述序列文件,并且映射器输入中的'key'和'value'类型与您之前发送的相同。

+0

谢谢Esawara! “序列文件中的键和值在创建时决定。”问题是如何?有没有一个默认的分隔符用于识别密钥,我没有用于项目运行的样本输入,但是从我在代码中看到的内容看来,期望密钥成为文件的路径。 – learningtocode 2013-03-08 11:17:00

+0

这里没有分隔符的概念。无论作为创建序列文件的作业的输出发出的输出键和值都将自动用作后续作业中的输入键和值。 – 2013-03-10 10:14:08

相关问题