JobConf job = new JobConf();
DistributedCache.addCacheFile(new URI("/myapp/lookup.dat#lookup.dat"), job);
mapreduce框架将确保Map者可以访问这些文件。
public void configure(JobConf job) {
// Get the cached archives/files
Path[] localFiles = DistributedCache.getLocalCacheFiles(job);
// open, read and store for use in the map phase.
}
2条答案
按热度按时间xqkwcwgp1#
应该可以像其他任务一样从mapper/reducer任务访问非hdfs文件系统。需要注意的一点是,如果有1k个Map器,并且每个Map器都试图打开非hdfs文件,那么根据外部文件系统的类型,这可能会导致瓶颈。这同样适用于从数据库中提取数据的Map器。
vd2z7a6w2#
您可以使用分布式缓存将文件分发给Map程序,他们可以在自己的缓存中打开和读取文件
configure()
方法(不要把它们读入map()
因为它会被多次调用。)编辑
为了从map reduce作业中的本地文件系统访问文件,可以在设置作业配置时将这些文件添加到分布式缓存中。
mapreduce框架将确保Map者可以访问这些文件。
完成工作后删除文件。