Fork me on GitHub

Hadoop Hdfsへのアクセス

  • May 28, 2008

categoryプラグインは存在しません。

環境

Java APIからの利用

HDFSへの接続

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create("hdfs://hoge:9000/"), conf);

としてやると、FileSystemが取得できるので、これに対して、

FileStatus status = fs.getFileStatus(new Path("work/input"))

などとする。

ファイルの一覧取得

一覧は、listStatusを使って、

FileStatus[] statusList = fs.listStatus(new Path("work"))

という感じでリストを取得して、

for (FileStatus status: statusList) \{
 if (status.isDir()) \{
  // ディレクトリの処理
 \} else \{
  // ファイルの処理
 \}

という感じで処理する。

ファイルの読み込み

読み込みは、

InputStream is = fs.open(new Path("work/hoge"))

というようにInputStream経由で行う。

SequenceFileの読み込み

SequenceFileはMapReduceの結果をそのままオブジェクトで出力できるので重宝しますが、これの読み込みの場合は、

SequenceFile.Reader reader = new SequenceFile.Reader(fs, path, fs.getConf());
Writable key = new KeyWritable()
Writable value = new ValueWritable()
while (reader.next(key, value)) \{
 ..
\}

という感じで行う。