我想从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命令。
答案 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