mapreduce—在hadoop作业中保存和读取复杂的可写值

rjjhvcjd  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(425)

我需要将复杂值(实现可写)从第一个map reduce作业的输出移到另一个map reduce作业的输入。第一个作业的结果保存到文件。文件可以存储文本数据或字节可写(使用默认的输出\输入格式)。所以我需要一些简单的方法来将我的可写文件转换成文本,或者转换成字节可写文件。它存在吗?有别的办法吗?谢谢

uqdfh47h

uqdfh47h1#

用户irw正确,请使用sequencefileoutputformat。sequencefile解决了这个问题,无需转换为可写文本。设置作业时,请使用job.setoutputkeyclass和job.setoutputvalueclass设置正在使用的可写子类:

job.setOutputKeyClass(MyWritable1.class);
job.setOutputValueClass(MyWritable2.class);
job.setOutputFormatClass(SequenceFileOutputFormat.class);

这将使用hadoop sequencefile格式来存储可写内容。然后在下一个作业中,使用sequencefileinputformat:

job.setInputFormatClass(SequenceFileInputFormat.class);

然后,此作业中Map器的输入键和值将是您最初在上一个作业中指定为输出的两个可写类。
注意,正确实现复杂的可写子类是至关重要的。除了必须具有空构造函数之外,还必须实现write和readfields方法,以便类中的任何可写字段也可以写入和读取它们的信息。

相关问题