在使用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);
1条答案
按热度按时间vlju58qv1#
发现了问题。hdfs中的文件对mapreduce任务节点不可用。因此,必须通过将文件压缩为单个tar文件,通过archive标记将文件传递到分布式缓存。也可以通过编写自定义inputformat类并在输入参数中提供文件来实现这一点。