这是Hadoop MapReduce V1中可用的Gridmix代码的一个片段,但我有以下问题。
他们将org.apache.hadoop.mapred.SequenceFileInputFormat
和org.apache.hadoop.mapred.SequenceFileOutputFormat
分别设置为inFormat
和outFormat
,还将org.apache.hadoop.io.Text
设置为outKey
和outValue
。对我来说,这个示例似乎接受文本文件作为序列文件。如何使用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等。