java—在hadoop mapreduce应用程序中访问来自其他文件系统的文件以及hdfs文件

deikduxw  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(373)

我知道我们可以从普通java应用程序调用map reduce作业。现在,map reduce作业必须处理hdfs上的文件以及其他文件系统上的文件。在hadoop中,我们可以访问其他文件系统中的文件,同时使用hdfs上的文件吗。有可能吗?
所以基本上我的意图是,我有一个大文件,我想把它放在hdfs中进行并行计算,然后把这个文件的块与其他一些文件(我不想放在hdfs中,因为它们需要作为全长文件一次访问)。

xqkwcwgp

xqkwcwgp1#

应该可以像其他任务一样从mapper/reducer任务访问非hdfs文件系统。需要注意的一点是,如果有1k个Map器,并且每个Map器都试图打开非hdfs文件,那么根据外部文件系统的类型,这可能会导致瓶颈。这同样适用于从数据库中提取数据的Map器。

vd2z7a6w

vd2z7a6w2#

您可以使用分布式缓存将文件分发给Map程序,他们可以在自己的缓存中打开和读取文件 configure() 方法(不要把它们读入 map() 因为它会被多次调用。)
编辑
为了从map reduce作业中的本地文件系统访问文件,可以在设置作业配置时将这些文件添加到分布式缓存中。

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.
}

完成工作后删除文件。

相关问题