如何为sequencefileinputformat定义Map函数的键和值输入?

polhcujo  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(244)

我试图理解一个hadoop项目的例子。它有以下代码块

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

从这个链接中,我了解到对于sequencefileinputformat,键和值是用户定义的。我需要为此实现recordreader吗?我不认为它在这个项目中得到实施。是否有任何默认分隔符用于将输入拆分为键、值对?

nxagd54h

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

svujldwt

svujldwt2#

读取序列文件不必实现recordreader。
但是,生成序列文件并不像生成文本文件那么简单。所有命令,例如
hadoop fs-输入
默认情况下,在hdfs中生成文本文件。
如果您想测试一个mr程序,该程序需要序列文件作为输入,那么首先需要将文本文件转换为序列文件并将其作为输入。
要从文本文件创建序列文件,可以使用identity mapper编写一个简单的mr,而不需要使用reducer。您需要将输入文件格式设置为text,并将文本文件作为输入传递;在此作业中将输出格式设置为序列文件。此作业的输出将是序列文件格式的文本文件的副本。请确保选择此作业的输出关键字和值,并记住使用序列文件的任何后续mr作业都必须接受它们作为其输入关键字和值。换句话说,序列文件中的键和值在创建时确定。
任何需要序列文件的后续mr作业(如您所引用的作业)都可以使用上述序列文件,并且Map器输入中的“key”和“value”类型将与您先前发出的相同。

相关问题