如何为SequenceFileInputFormat定义的映射函数的键和值输入?

时间:2013-03-08 07:33:57

标签: java hadoop

我想了解一个示例hadoop项目。它有以下代码块

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

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

2 个答案:

答案 0 :(得分:2)

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

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

hadoop fs -put

默认情况下在HDFS中生成文本文件。

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

要从文本文件创建序列文件,您可以编写一个带有标识映射器且没有reducer的简单MR。您需要将输入文件格式设置为文本并将文本文件作为输入传递;将输出格式设置为序列文件在此作业中。此作业的输出将是序列文件格式的文本文件的副本。请确保选择输出键和此作业的值,请记住,使用序列文件的任何后续MR作业都必须接受它们作为输入键和值。换句话说,序列文件中的键和值在创建时决定。

任何后续MR作业(如您所引用的那个)需要序列文件 可以使用上面的序列文件,mapper输入中的'key'和'value'类型与你之前发出的相同。

答案 1 :(得分:0)

对于您的问题,“它是否有用于识别密钥的默认分隔符?”我想你不用担心。基本上,序列文件由二进制键/值对组成。您可以使用SequenceFile.Writer#append来写入键和值。

http://hadoop.apache.org/docs/r1.1.1/api/org/apache/hadoop/io/SequenceFile.Writer.html#append%28java.lang.Object,%20java.lang.Object%29