我是hadoop和东西的业余爱好者。现在,我正在尝试访问hadoop集群(HDFS)并从客户端eclipse中检索文件列表。在hadoop java客户端上设置所需的配置后,我可以执行以下操作。
我可以执行从客户端访问HDFS的 copyFromLocalFile , copyToLocalFile 操作。 这就是我所面对的。当我给listFiles()方法我得到
org.apache.hadoop.fs.LocatedFileStatus@d0085360
org.apache.hadoop.fs.LocatedFileStatus@b7aa29bf
MainMethod
Properties props = new Properties();
props.setProperty("fs.defaultFS", "hdfs://<IPOFCLUSTER>:8020");
props.setProperty("mapreduce.jobtracker.address", "<IPOFCLUSTER>:8032");
props.setProperty("yarn.resourcemanager.address", "<IPOFCLUSTER>:8032");
props.setProperty("mapreduce.framework.name", "yarn");
FileSystem fs = FileSystem.get(toConfiguration(props)); // Setting up the required configurations
Path p4 = new Path("/user/myusername/inputjson1/");
RemoteIterator<LocatedFileStatus> ritr = fs.listFiles(p4, true);
while(ritr.hasNext())
{
System.out.println(ritr.next().toString());
}
我还尝试过FileContext,最后只得到了filestatus对象字符串或其他东西。当我迭代到远程hdfs目录时是否有可能获取文件名,有一个名为getPath()的方法,这是我们使用hadoop API检索文件名的完整路径的唯一方法,还是有任何其他方法这样我只能检索指定目录路径中文件的名称,请帮我解决这个问题,谢谢。
答案 0 :(得分:4)
你确实可以使用getPath()
这会返回一个Path
对象,让你查询文件的名称。
Path p = ritr.next().getPath();
// returns the filename or directory name if directory
String name = p.getName();
您获得的FileStatus
对象可以告诉您这是一个文件还是目录。
以下是更多API文档:
http://hadoop.apache.org/common/docs/r1.0.0/api/org/apache/hadoop/fs/Path.html
http://hadoop.apache.org/common/docs/r1.0.0/api/org/apache/hadoop/fs/FileStatus.html