应使用mapper类的哪种方法来读取分布式缓存中的文件

时间:2013-12-30 04:40:22

标签: java hadoop

您希望填充关联数组以执行地图侧连接。你决定了 将此信息放在文本文件中,将该文件放入DistributedCache并在您的文件中读取 处理任何记录之前的映射器。 确定您应该使用Mapper中的哪个方法来实现用于读取文件的代码 填充关联数组?

映射还是配置?

2 个答案:

答案 0 :(得分:1)

我相信你正在寻找setup()方法。

http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/Mapper.html#setup%28org.apache.hadoop.mapreduce.Mapper.Context%29

在每个映射器任务的初始化时调用一次。因此,如果在地图任务开始通过map方法读取键/值对之前有任何想要做的事情(例如,在您的问题中,要从分布式缓存中读取文件并使用信息填充某些成员变量),那就是去做的地方。

答案 1 :(得分:1)

class IndexMapperExample implements Mapper {
  void configure(JobConf conf) {
  try {
     String stopwordCacheName = new Path(HDFS_STOPWORD_LIST).getName();
  Path [] cacheFiles = DistributedCache.getLocalCacheFiles(conf);
  if (null != cacheFiles && cacheFiles.length > 0) {
    for (Path cachePath : cacheFiles) {
      if (cachePath.getName().equals(stopwordCacheName)) {
        loadStopWords(cachePath);
        break;
      }
    }
  }
} catch (IOException ioe) {
  System.err.println("IOException reading from distributed cache");
  System.err.println(ioe.toString());
  }
}

在上面的代码片段中,分配缓存的文件在configure方法中被读取。 这意味着分布式缓存在configure方法中被读取。