如何使用`org.apache.hadop.io.Text`创建SequenceFiles



这是Hadoop MapReduce V1中可用的Gridmix代码的一个片段,但我有以下问题。

他们将org.apache.hadoop.mapred.SequenceFileInputFormatorg.apache.hadoop.mapred.SequenceFileOutputFormat分别设置为inFormatoutFormat,还将org.apache.hadoop.io.Text设置为outKeyoutValue。对我来说,这个示例似乎接受文本文件作为序列文件。如何使用org.apache.hadoop.io.Text创建SequenceFiles?

WEBDATASCAN("webdataScan") {
public void addJob(int numReducers, boolean mapoutputCompressed,
    boolean outputCompressed, Size size, JobControl gridmix) {
  final String prop = String.format("webdataScan.%sJobs.inputFiles", size);
  final String indir = getInputDirsFor(prop, size.defaultPath(VARCOMPSEQ));
  final String outdir = addTSSuffix("perf-out/webdata-scan-out-dir-" + size);
  StringBuffer sb = new StringBuffer();
  sb.append("-keepmap 0.2 ");
  sb.append("-keepred 5 ");
  sb.append("-inFormat org.apache.hadoop.mapred.SequenceFileInputFormat ");
  sb.append("-outFormat org.apache.hadoop.mapred.SequenceFileOutputFormat ");
  sb.append("-outKey org.apache.hadoop.io.Text ");
  sb.append("-outValue org.apache.hadoop.io.Text ");
  sb.append("-indir ").append(indir).append(" ");
  sb.append("-outdir ").append(outdir).append(" ");
  sb.append("-r ").append(numReducers);
  String[] args = sb.toString().split(" ");
  clearDir(outdir);
  try {
    JobConf jobconf = GenericMRLoadJobCreator.createJob(
        args, mapoutputCompressed, outputCompressed);
    jobconf.setJobName("GridmixWebdatascan." + size);
    Job job = new Job(jobconf);
    gridmix.addJob(job);
  } catch (Exception ex) {
    System.out.println(ex.getStackTrace());
  }
}
}

您混淆了文件格式和键值类型。要读取纯文本数据,我们有TextFileInputFormat。键值类型处于单个记录级别。序列输出文件格式采用Text格式的键和值,并在存储到HDFS之前将数据内部序列化为二进制格式。在内部,它维护键和值的元数据。

旧的mapreduce api有org.apache.hadoop.mapred包有输入和输出格式,org.apache.hadoop.io包有键和值类型。键和值类型包括Text、IntWritable、FloatWritable等。

最新更新