第一种办法:使用hadoop url读取数据(这种方法在一个java虚拟机中只能调用一次,因此需要放在一个静态方法中)
static{
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
}
public static void readHdfs(String url){
InputStream in=null;
try{
in=new URL(url).openStream();
IOUtils.copyBytes(in, System.out, 4096,false);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
IOUtils.closeStream(in);
}
}
public static void main(String[] args) {
String url="hdfs://master:9000/sogou.500w.utf8";
ReadHdfs.readHdfs(url);
}
第二种方法:使用FileSystem API读取数据
public static void readHdfsFile(String url){
Configuration conf=new Configuration();
InputStream in=null;
try {
FileSystem fs=FileSystem.get(URI.create(url),conf);
in=fs.open(new Path(url));
IOUtils.copyBytes(in, System.out, 4096, false);
} catch (IOException e) {
e.printStackTrace();
}finally{
IOUtils.closeStream(in);
}
}
public static void main(String[] args) {
String url="hdfs://master:9000/sogou.500w.utf8";
ReadHdfsFile.readHdfsFile(url);
}