资源简介

这是山东大学大数据实验二,用Hadoop实现文档的倒排索引

资源截图

代码片段和文件信息

package cn.edu.zucc.mapreduce;
import java.io.BufferedReader;  
import java.io.FileReader;  
import java.io.IOException;  
import java.net.URI;  
import java.util.List;  
import java.util.Set;  
import java.util.StringTokenizer;  
import java.util.ArrayList;  
import java.util.TreeSet;  
  
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.filecache.DistributedCache;  
import org.apache.hadoop.fs.Path;  
import org.apache.hadoop.io.IntWritable;  
import org.apache.hadoop.io.Text;  
import org.apache.hadoop.mapreduce.RecordReader;  
import org.apache.hadoop.mapreduce.lib.input.LineRecordReader;  
import org.apache.hadoop.mapreduce.InputSplit;  
import org.apache.hadoop.mapreduce.lib.input.FileSplit;  
import org.apache.hadoop.mapreduce.TaskAttemptContext;  
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;  
import org.apache.hadoop.mapreduce.Job;  
import org.apache.hadoop.mapreduce.Mapper;  
import org.apache.hadoop.mapreduce.Reducer;  
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  

/**
 * mapper
 * input:
 * output:
 * 
 * partitioner
 * 只根据word哈希
 * 
 * Combiner
 * input:
 * output:
 * 
 * reducer
 * intput:
 * output:;<..>;...>
 * 
 **/
  
public class indexinverted {  
     
    /*
     * 因为重写了RecordReader类,这里要重写FileInputFormat类来使用自定义FileNameRecordReader.
     * 这个类的主要作用就是返回一个FileNameRecordReader类的实例。
     */
    public static class FileNameRecordReader extends RecordReader {  
        String fileName;  
        LineRecordReader lrr = new LineRecordReader();  
  
        @Override  
        //返回key
        public Text getCurrentKey() throws IOException InterruptedException {  
            return new Text(fileName);  
        }  
  
        @Override  
        //返回value
        public Text getCurrentValue() throws IOException InterruptedException {  
            return lrr.getCurrentValue();  
        }  
  
        @Override  
        public void initialize(InputSplit arg0 TaskAttemptContext arg1) throws IOException InterruptedException {  
            lrr.initialize(arg0 arg1);  
            fileName = ((FileSplit) arg0).getPath().getName();  //获得文件名
        }  
  
        public void close() throws IOException {  
            lrr.close();  
        }  
  
        public boolean nextKeyValue() throws IOException InterruptedException {  
            return lrr.nextKeyValue();  
        }  
  
        public float getProgress() throws IOException InterruptedException {  
            return lrr.getProgress();  
        }  
    } 
    
    /*
 *  FileNameRecordReader类继承自RecordReader,是RecordReader类的自定义实现.
 *  主要作用是将记录所在的文件名作为key,而不是记录行所在文件的偏移,获取文件名所用的语句为:
     *  fileName = ((FileSplit) arg0).getPath().getName();
 */
    public static class FileName

评论

共有 条评论