c++ - 使用C++运行Hadoop管道时不存在此类文件

标签 c++ hadoop mapreduce

使用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/

相关文章:

java - 所有 map task 的 Hadoop 缓存文件

c++ - 无法使用 istringstream 从 .txt 文件中读取

c++ - 为什么这里需要一个拷贝构造函数?

c++ - 输出 float 进行调试

scala - Spark 斯卡拉 : JniBasedUnixGroupsMapping: Error getting groups for XXX: The user name could not be found

Hadoop,Hbase - 列及对应值提取

c# - SWIG 中的委托(delegate) - C#

hadoop - hadoop 是否需要运行 mahout-in-action 示例?

java - Hadoop Reducer - 在新 API 中获取输入目录?

java - hadoop fs -mkdir 没有创建所需的文件夹