我搜索了很多,但没有找到这个问题的解决方案。事实上,我想访问的文件在HDFS中,但不在输入路径(映射/减少作业的输入路径)中。我想从mapper访问它。输入路径中指定的hdfs路径完全可以从mapper访问,但其他hdfs文件则无法访问。
内侧映射器:-
FileSystem FS1=FileSystem.get(conf);
Path path=new Path(""+FS1.getHomeDirectory());
FSDataInputStream fsdis=FS1.open(path);
导致以下错误:java.io.io异常:无法打开filename/user/hadoop
提前感谢,刺耳的
我记得使用本教程可以获得类似的效果。你可以试试看,它和你写的只有一些区别,但它可能会有所帮助。。。
@编辑:啊,我刚刚注意到(看完评论),你正在尝试打开FS1.getHomeDirectory()
,那是一个目录。我认为,您应该指向文件,而不是目录(您可以在链接教程的"从文件读取数据"下查看)。
你能尝试一次吗
try {
FileSystem fs = FileSystem.get (new Configuration ());
FileStatus[] status = fs.listStatus (new Path ("hdfs://jp.seka.com:9000/user/jeka/in"));
for (int i=0;i < status.length;i++) {
BufferedReader br = new BufferedReader (new InputStreamReader (fs.open (status[i].getPath())));
String line;
line = br.readLine();
while (line != null) {
System.out.println (line);
line=br.readLine ();
}
}
} catch (Exception e) {
System.out.println("File not found");
}