Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hadoop mapreduce应用程序中访问来自其他文件系统的文件以及hdfs文件_Java_Hadoop - Fatal编程技术网

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

Java 在hadoop mapreduce应用程序中访问来自其他文件系统的文件以及hdfs文件,java,hadoop,Java,Hadoop,我知道我们可以从普通java应用程序调用MapReduce作业。现在,在我的例子中,map-reduce作业必须处理hdfs上的文件以及其他文件系统上的文件。在hadoop中,我们可以从其他文件系统访问文件,同时使用hdfs上的文件吗。可能吗 所以基本上我的意图是,我有一个大文件,我想把它放在HDFS中进行并行计算,然后将这个文件的块与其他一些文件进行比较(我不想将其放在HDFS中,因为它们需要立即作为全长文件进行访问。您可以使用将文件分发给您的映射程序,他们可以在其configure()方法中

我知道我们可以从普通java应用程序调用MapReduce作业。现在,在我的例子中,map-reduce作业必须处理hdfs上的文件以及其他文件系统上的文件。在hadoop中,我们可以从其他文件系统访问文件,同时使用hdfs上的文件吗。可能吗

所以基本上我的意图是,我有一个大文件,我想把它放在HDFS中进行并行计算,然后将这个文件的块与其他一些文件进行比较(我不想将其放在HDFS中,因为它们需要立即作为全长文件进行访问。

您可以使用将文件分发给您的映射程序,他们可以在其
configure()
方法中打开并读取文件(不要在
map()
中读取,因为它将被多次调用。)

编辑

为了从map reduce作业中的本地文件系统访问文件,可以在设置作业配置时将这些文件添加到分布式缓存中

JobConf job = new JobConf();
DistributedCache.addCacheFile(new URI("/myapp/lookup.dat#lookup.dat"), job);
MapReduce框架将确保映射者可以访问这些文件

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

并在您的工作完成后删除文件。

应该可以像其他任何任务一样从mapper/reducer任务访问非HDFS文件系统。需要注意的是,如果存在1K映射器,并且每个映射器都将尝试打开非HDFS文件,这可能会导致基于外部文件系统类型的瓶颈。T他同样适用于从数据库中提取数据的映射程序。

是的,这是可能的。我想每个tasktracker都必须提供您的非hdfs文件。就像网络共享一样。您能告诉我我们是如何做到这一点的吗?我在谷歌上搜索到,我在hadoop中找不到可以处理非hdfs文件的示例。非常感谢您的回复我们担心的是,您的文件正在被拆分,您应该将它们放在HDFS上,但在启动MapReduce作业时使用不会拆分它们的子类。因此,我想做的是,映射的输入将是一个大文件的一大块,并且此文件的内容将与我计划将其保留为非HDFS文件系统的文件进行比较。你的回答让我想到了另一个问题,我可以在map功能中直接访问hdfs中的文件,并且该文件不会被拆分吗?我想我没有明确地阐述我的问题。我希望在hdfs中有一个文件,在普通文件系统中有其他三个文件,并从map reduce应用程序访问普通文件系统中的文件。非常感谢。这是正确的,如果我尝试这样做,它肯定会导致瓶颈。你有什么建议。就我的想法而言,我认为最好将所有这些存储在hdfs中,并将大文件作为输入,当我从mapper函数访问一个文件时,我可以访问整个文件吗?你可以将两个文件都放在hdfs中。如果你认为如果有太多的maps/Reducer正在访问HDFS中的文件进行读取,则可以适当增加该文件的复制系数。如果不了解详细要求,则无法解决该问题。请更正我,但我了解map reduce作业可能只有一种inputformat。但必须拆分大文件,然后使用小的则不需要,这需要两种输入格式。