使用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 /包含在文件中,但仍然没有结果。 file参数在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);
最佳答案
找到了问题。 hdfs中的文件不可用于mapreduce任务节点。因此,必须将文件压缩到单个tar文件中,从而通过存档标签将文件传递到分布式缓存。也可以通过编写自定义inputformat类并在input参数中提供文件来实现。
关于c++ - 使用C++运行Hadoop管道时不存在此类文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62863153/