Hi Udaya,
The following code uses already existing cache files as part of the map to process incoming data. I apologize on the naming conventions, but the code had to be stripped. I also removed several variable assignments, etc..

public class MySpecialJob {
public static class MyMapper extends MapReduceBase implements Mapper<LongWritable, MyMapInputValueClass, MyMapOutputKeyClass, BigIntegerWritable> {

    private Path[] dcfiles;
    ...
                
    public void configure(JobConf job) {
      // Load cached files
      dcfiles = new Path[0];
      try {
        dcfiles = DistributedCache.getLocalCacheFiles(job);
      } catch (IOException ioe) {
System.err.println("Caught exception while getting cached files: " + StringUtils.stringifyException(ioe));
      }
    }

    public void map(LongWritable key, MyMapInputValueClass value,
      OutputCollector<MyMapOutputKeyClass, BigIntegerWritable> output,
      Reporter reporter) throws IOException {
      ...
      for (Path dcfile : dcfiles) {
        if(dcfile.getName().equalsIgnoreCase(file_match)) {
          readbuffer = new BufferedReader(
            new FileReader(dcfile.toString()));
          ...
          while((raw_line = readbuffer.readLine()) != null) {
            ...

  public static void main(String[] args) throws Exception {
    JobConf conf = new JobConf(MySpecialJob.class);
    ... 
    DistributedCache.addCacheFile(new URI("/path/to/file1.txt"), conf);
    DistributedCache.addCacheFile(new URI("/path/to/file2.txt"), conf);
    DistributedCache.addCacheFile(new URI("/path/to/file3.txt"), conf);
    ...
  }
}

Nick Jones


Udaya Lakshmi wrote:
Hi,
   As a newbie to hadoop, I am not able to figure out how to use
DistributedCache class. Can someone give me a small code which
distributes file to the cluster and the show how to open and use the
file in the map or reduce task.
Thanks,
Udaya


Reply via email to