2012-03-05 14 views
2

我想讀取Hadoop的系統文件中讀取文件,我能做到這一點使用下面的代碼如何從Hadoop的使用Java不帶命令行

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

您可以將您的core-site.xml添加到該配置對象,以便它知道您的HDFS實例的URI。此方法需要設置HADOOP_HOME

Configuration conf = new Configuration(); 
Path coreSitePath = new Path(System.getenv("HADOOP_HOME"), "conf/core-site.xml"); 
conf.addResource(coreSitePath); 
FileSystem hdfs = FileSystem.get(conf); 
// rest of code the same 

現在,無需使用hadoop jar你可以打開你的HDFS實例的連接。

編輯:必須使用conf.addResource(Path)。如果使用String arg,則在類路徑中查找該文件名。

+0

已經添加了相同的一段代碼,並設置HADOOP_HOME參數作爲從蝕環境變量,但仍然的System.out.println(hdfs.getHomeDirectory());打印本地文件系統目錄。 – user1249655 2012-03-07 10:20:26

+0

我編輯了我的答案;忘了使用一個到core-site.xml而不是String的路徑。 – 2012-03-07 15:50:57

0

還有另一個配置方法集(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