6

私は Hadoop などのアマチュアです。現在、Hadoop クラスター (HDFS) にアクセスして、クライアント Eclipse からファイルのリストを取得しようとしています。Hadoop Java クライアントで必要な構成をセットアップした後、次の操作を実行できます。

クライアントから HDFS にアクセスするcopyFromLocalFilecopyToLocalFile操作を実行できます。これが私が直面しているものです。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 ディレクトリに反復するときにファイル名を取得する可能性はありますか?指定したディレクトリ パス内のファイルの名前のみを取得できるように、これを手伝ってください、ありがとう。

4

1 に答える 1

5

実際にこれを使用すると、ファイルの名前を照会できるオブジェクト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

于 2012-07-09T11:49:11.033 に答える