我正在尝试从HDFS读取和写入文件。首先,我试图阅读它并在控制台上显示它。它运行时没有给出任何错误,警告但它也没有从控制台上的文件打印数据,我的文件已经保存在hdfs中,我可以在用户界面上看到它。我认为我给出的路径存在一些问题,我不确定因为我是第一次将hadoop连接到java。我使用eclipse作为IDE。有人可以调查一下吗?
我也尝试为名称节点提供50075端口号,但这也不起作用。
编辑: 有人能告诉我如何在java中提供正确的路径来访问存储在hdfs中的文件吗?
我收到此例外
文件文件:/ localhost:54310 / user / hduser / project11 / a.txt不存在。
java.io.FileNotFoundException:文件文件:/ localhost:54310 / user / hduser / project11 / a.txt不存在。
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:397)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:251)
at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:125)
at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:283)
at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:427)
at newclassentry.main(newclassentry.java:16)
存在与路径相关的问题,但我不知道什么是正确的路径。
在localhost namenode上我在/ user / hduser / project11文件夹中访问它。 该文件不为空。 代码:
import java.io.*;
import java.util.*;
import java.net.*;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;
public class newclassentry {
public static void main(String [] args) throws Exception {
try {
Path pt = new Path("hdfs://localhost:54310/user/hduser/project11/a.txt");
FileSystem fs = FileSystem.get(new Configuration());
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
BufferedReader br = new BufferedReader(new InputStreamReader(fs.open(pt)));
String line;
line = br.readLine();
while ((line = br.readLine()) != null) {
System.out.println(line);
line = br.readLine();
}
br.close();
}
catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
解决方案:
我们需要添加core-site.xml以便通过hdfs进行访问 conf.addResource(new Path(Vars.HADOOP_HOME +&#34; /conf/core-site.xml"));
感谢大家找出最初的问题。
答案 1 :(得分:0)
由于控制台上没有显示,并且您确定文件不为空,这表示打开文件时出错是由于文件路径无效。
您需要替换空的catch块:
catch(Exception e){
}
允许打印堆栈跟踪,以便您可以看到发生的错误。
catch(Exception e){
e.printStackTrace();
}