如何在没有命令行的情况下使用Java从Hadoop读取文件

时间:2012-03-05 11:09:01

标签: 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 jar myjar.jar com.mycompany.cloud.CatFile / filepathin_hadoop 这样可行。但我怎么能从其他程序那样做,我的意思是不使用hadoop jar命令。

2 个答案:

答案 0 :(得分:1)

您可以将 core-site.xml 添加到该Configuration对象,以便它知道您的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,则在类路径中查找该文件名。

答案 1 :(得分:0)

还有另一种配置方法集(parameterName,value)。
如果使用此方法,则无需指定core-site.xml的位置。这对于从远程位置访问HDFS非常有用,例如webserver。

用法如下:

    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