运行本地文件系统目录作为群集中Mapper的输入

时间:2012-04-11 14:11:16

标签: hadoop mapreduce

我从本地文件系统给mapper一个输入。它从eclipse成功运行,但没有从集群运行,因为它无法找到本地输入路径说:输入路径不存在。请任何人帮忙我如何给映射器提供本地文件路径,以便它可以在集群中运行,我可以在hdfs中获得输出

7 个答案:

答案 0 :(得分:5)

这是一个非常古老的问题。最近面临同样的问题。 我不知道正确这个解决方案是如何为我工作的。如果有任何缺点,请注意。这就是我做的。

Reading a solution from the mail-archives,我意识到如果我将fs.default.namehdfs://localhost:8020/修改为file:///,它就可以访问本地文件系统。但是,我并不想要这个所有的mapreduce工作。所以我在本地系统文件夹中制作了core-site.xml的副本(与我将MR jar提交到hadoop jar的那个文件夹相同)。

Driver的{​​{1}}课程中,我添加了

MR

Configuration conf = new Configuration(); conf.addResource(new Path("/my/local/system/path/to/core-site.xml")); conf.addResource(new Path("/usr/lib/hadoop-0.20-mapreduce/conf/hdfs-site.xml")); 从本地系统获取输入并将输出写入MR

答案 1 :(得分:3)

在群集中运行需要将数据加载到分布式存储(HDFS)中。首先使用hadoop fs -copyFromLocal将数据复制到HDFS,然后尝试再次中断作业,为其提供HDFS中的数据路径

答案 2 :(得分:2)

这个问题很有意思。在运行作业之前,可以在S3上获取数据并访问此数据,而无需将明确的副本复制到HDFS。在wordcount示例中,可以按如下方式指定:

hadoop jar 示例 .jar wordcount s3n://bucket/input s3n://bucket/output

这是因为映射器直接从S3读取记录。

如果可以使用S3完成此操作,为什么不会使用此语法而不是s3n

file:///input file:///output

但是根据经验,这似乎以一种有趣的方式失败了 - 我看到Hadoop为输入目录中确实存在的文件提供了一个找不到文件的文件。也就是说,它似乎能够列出我本地磁盘上put目录中的文件,但是当需要打开它们来读取记录时,找不到(或无法访问)该文件。

答案 3 :(得分:0)

数据必须在HDFS上,以便任何MapReduce作业处理它。因此,即使您拥有本地文件系统或网络路径或基于Web的存储(例如Azure Blob存储或Amazon Block stoage)等源,您仍需要先在HDFS上复制数据,然后再运行作业。 最重要的是你需要首先将数据推送到HDFS,并且有几种方法取决于数据源,你可以执行从源到HDFS的数据传输,例如从本地文件系统,你将使用以下命令:

$ hadoop -f CopyFromLocal SourceFileOrStoragePath _HDFS__Or_directPathatHDFS _

答案 4 :(得分:0)

尝试像这样设置输入路径

FileInputFormat.addInputPath(conf,new Path(file:///本地文件系统上的目录));

如果您提供文件扩展名,则可以访问localsystem

中的文件

答案 5 :(得分:0)

我尝试了以下代码并获得了解决方案...... 请试一试,让我知道..

你需要获取本地文件系统的FileSystem对象,然后使用makequalified方法返回路径。因为我们需要传递本地文件系统的路径(没有其他方法将它传递给inputformat),我使用了make qualified, in deed仅返回本地文件系统路径..

代码如下所示..

Configuration conf = new Configuration();
FileSystem fs = FileSystem.getLocal(conf);
Path inputPath = fs.makeQualified(new Path("/usr/local/srini/"));  // local path

FileInputFormat.setInputPaths(job, inputPath);

我希望这可以满足您的要求,虽然它发布得很晚..它对我来说很好..它不需要任何配置更改我相信..

答案 6 :(得分:0)

U可能希望通过将配置设置为

来尝试此操作
Configuration conf=new Configuration();
conf.set("job.mapreduce.tracker","local");
conf.set("fs.default.name","file:///");

在此之后你可以使用本地路径设置fileinputformat并且你可以去