2012-03-05 4 views
2

コマンドラインなしでJavaを使用してHadoopのからファイルを読み取る方法、私は以下のコードは、私はHadoopのシステムからファイルを読みたかった

String uri = theFilename; 
Configuration conf = new Configuration(); 
FileSystem fs = FileSystem.get(URI.create(uri), conf); 
InputStream in = null; 
try { 
    in = fs.open(new Path(uri)); 
    IOUtils.copyBytes(in, System.out, 4096, false); 
} finally { 
    IOUtils.closeStream(in); 
} 

を使用して、私はHadoopのジャーMYJARを実行する必要があり、このファイルを実行することを行うことができます。 jar com.mycompany.cloud.CatFile/filepathin_hadoop これは機能します。しかし、どうすれば他のプログラムから同じことをすることができます、私はhadoop jarコマンドを使用せずに意味します。

答えて

1

コア-site.xmlをそのConfigurationオブジェクトに追加して、HDFSインスタンスのURIを知ることができます。この方法では、HADOOP_HOMEが設定されている必要があります。

hadoop jarを使用せずに、HDFSインスタンスへの接続を開くことができます。

:conf.addResource(パス)を使用する必要があります。 String argを使用する場合は、そのファイル名をクラスパスで調べます。

+0

は、コードの同じ部分を添加し、日食からのenv変数としてHADOOP_HOMEパラメータを設定し、まだするSystem.out.println(hdfs.getHomeDirectory())を有します。ローカルのファイルシステムディレクトリを表示します。 – user1249655

+0

私は私の答えを編集しました。 Stringの代わりにcore-site.xmlへのパスを使用するのを忘れてしまった。 –

0

もう1つの設定メソッドset(parameterName、value)があります。
この方法を使用する場合は、core-site.xmlの場所を指定する必要はありません。これは、Webサーバのような遠隔地からHDFSにアクセスするのに便利です。

使用法を次のよう

String uri = theFilename; 
    Configuration conf = new Configuration(); 

    conf.set("fs.default.name","hdfs://10.132.100.211:8020/"); 
    FileSystem fs = FileSystem.get(conf); 
// Rest of the code 
関連する問題