1

在使用 hadoop 管道运行 hadoop map reduce 程序时,map reduce 找不到 hdfs 中存在的文件。如果程序在没有 hadoop 管道的情况下执行,则 libhdfs 库很容易找到该文件,但是在运行程序时使用

hadoop pipes -input i -ouput o -program p 

命令,libhdfs 找不到该文件,并抛出 java.io.exception。已尝试在命令中包含 -fs 参数,但结果仍然相同。我还在文件中包含了 hdfs://localhost:9000/ ,但仍然没有结果。文件参数在c代码中为:

file="/path/to/file/in/hdfs" or "hdfs://localhost:9000/path/to/file"
hdfsFS fs = hdfsConnect("localhost", 9000);
hdfsFile input=hdfsOpenFile(fs,file,O_RDONLY,0,0,0);
4

1 回答 1

0

发现了问题。hdfs 中的文件对 mapreduce 任务节点不可用。因此,必须通过将文件压缩为单个 tar 文件,通过归档标签将文件传递到分布式缓存。也可以通过编写自定义 inputformat 类并在输入参数中提供文件来实现这一点。

于 2020-07-13T18:23:32.667 回答