我试图理解一个hadoop项目的例子。它有以下代码块
jconf.setOutputKeyClass(Text.class);
jconf.setOutputValueClass(Text.class);
jconf.setInputFormat(SequenceFileInputFormat.class);
从这个链接中,我了解到对于sequencefileinputformat,键和值是用户定义的。我需要为此实现recordreader吗?我不认为它在这个项目中得到实施。是否有任何默认分隔符用于将输入拆分为键、值对?
2条答案
按热度按时间nxagd54h1#
对于您的问题“是否有用于标识键的默认分隔符?”我认为您不必担心。基本上,序列文件由二进制键/值对组成。您可以使用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
svujldwt2#
读取序列文件不必实现recordreader。
但是,生成序列文件并不像生成文本文件那么简单。所有命令,例如
hadoop fs-输入
默认情况下,在hdfs中生成文本文件。
如果您想测试一个mr程序,该程序需要序列文件作为输入,那么首先需要将文本文件转换为序列文件并将其作为输入。
要从文本文件创建序列文件,可以使用identity mapper编写一个简单的mr,而不需要使用reducer。您需要将输入文件格式设置为text,并将文本文件作为输入传递;在此作业中将输出格式设置为序列文件。此作业的输出将是序列文件格式的文本文件的副本。请确保选择此作业的输出关键字和值,并记住使用序列文件的任何后续mr作业都必须接受它们作为其输入关键字和值。换句话说,序列文件中的键和值在创建时确定。
任何需要序列文件的后续mr作业(如您所引用的作业)都可以使用上述序列文件,并且Map器输入中的“key”和“value”类型将与您先前发出的相同。