1.讀取HDFS内容的java客戶端代碼:
1 package Hdfs; 2 3 import java.io.InputStream; 4 import java.net.URI; 5 6 import org.apache.hadoop.conf.Configuration; 7 import org.apache.hadoop.fs.FileSystem; 8 import org.apache.hadoop.fs.Path; 9 import org.apache.hadoop.io.IOUtils; 10 /** 11 * FileSystem类的实例是通过工厂方法,其中Configuration对象封装了HDFS客户端或者HDFS集群的配置 12 * 该方法通过给定的URI方案和权限确定使用的文件系统。得到FileSystem实例之后,调用open()函数 13 * 获得文件的输入流,open方法返回FSDataInputStream对象 14 * @param args 15 * @throws Exception 16 */ 17 public class FilesystemCat { 18 public static void main(String[] args) throws Exception { 19 String url = "hdfs://neusoft-master:9000/user/root/test/demo1"; 20 Configuration conf = new Configuration(); 21 FileSystem fs = FileSystem.get(URI.create(url), conf); 22 InputStream in = null; 23 try { 24 in = fs.open(new Path(url)); 25 IOUtils.copyBytes(in, System.out, 4096, false); 26 } catch (Exception e) { 27 IOUtils.closeStream(in); 28 } 29 } 30 }
2.將上述代碼打成har包傳輸到linux中運行,結果如下。
總結:
访问hdfs的两种方式各有不同:首先利用Java.net.URL对象打开数据流。第二种方法是利用FileSystem方法的get方法完成配置,利用IOUtils的copyBytes方法读取数据。