如何从hadoop的Hdfs上查询文件

打算设计一个基于Hadoop的网络硬盘,包含文件搜索功能。Hadoop会在namenode创建整个文件系统的索引,问题:1如何查看该索引并对该索引进行操作(api);2有没有专门的api可以对hdfs上的文件进行查找
先给50分,问题解决再给200分。
希望大家帮忙

第1个回答  2012-06-05
A1.该索引叫FsImage, 但没有对外提供api, 参考 附录的链接1
整个文件系统的名字空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为FsImage的文件中,这个文件也是放在Namenode所在的本地文件系统上。

A2. FS Shell, 详细请参考链接2
1)hadoop fs -ls
功能跟shell 的 ls 命令相同
2)hadoop fs -lsr
ls命令的递归版本。类似于Unix中的ls -R。

如果要实现复杂的查找功能,可以考虑用下述方式
hadoop fs -lsr / | awk/sed/grep .....

链接1:FsImage/EditLog的官方说明
http://hadoop.apache.org/common/docs/r0.21.0/cn/hdfs_design.html#%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%85%83%E6%95%B0%E6%8D%AE%E7%9A%84%E6%8C%81%E4%B9%85%E5%8C%96

链接2:HDFS shell
http://hadoop.apache.org/common/docs/r0.21.0/cn/hdfs_shell.html#ls追问

脚本命令我知道用法,但不知道API,http://hadoop.apache.org/common/docs/r1.0.2/api/里面的org.apache.hadoop.contrib.index.lucene是否提供了index的api呢?我查了好多次但也没看出个所以然,你可以帮我查一下吗?

本回答被提问者和网友采纳
第2个回答  2012-06-12
java API:
FileStatus[] status = fs.listStatus(paths);
Path[] listedPaths = FileUtil.stat2Paths(status);
for(Path p : listedPaths) {
System.out.println(p);
}追问

这个我会 就是请教一下有没有直接从Hadoop的索引文件(FsImage)里检索的API

相似回答