我想了解一个示例hadoop项目。它有以下代码块
jconf.setOutputKeyClass(Text.class);
jconf.setOutputValueClass(Text.class);
jconf.setInputFormat(SequenceFileInputFormat.class);
从this link开始,我读到了SequenceFileInputFormat,键和值是用户定义的。我需要为此实现RecordReader吗?我没有看到它在项目中实现。是否有任何默认分隔符用于将输入拆分分成键值对?
答案 0 :(得分:2)
您不必实现RecordReader来读取序列文件。
但是,生成序列文件并不像生成文本文件那么简单。 所有命令,如
hadoop fs -put
默认情况下在HDFS中生成文本文件。
如果要测试需要序列文件作为输入的MR程序,首先需要将文本文件转换为序列文件并将其作为输入。
要从文本文件创建序列文件,您可以编写一个带有标识映射器且没有reducer的简单MR。您需要将输入文件格式设置为文本并将文本文件作为输入传递;将输出格式设置为序列文件在此作业中。此作业的输出将是序列文件格式的文本文件的副本。请确保选择输出键和此作业的值,请记住,使用序列文件的任何后续MR作业都必须接受它们作为输入键和值。换句话说,序列文件中的键和值在创建时决定。
任何后续MR作业(如您所引用的那个)需要序列文件 可以使用上面的序列文件,mapper输入中的'key'和'value'类型与你之前发出的相同。
答案 1 :(得分:0)
对于您的问题,“它是否有用于识别密钥的默认分隔符?”我想你不用担心。基本上,序列文件由二进制键/值对组成。您可以使用SequenceFile.Writer#append来写入键和值。