1、读取文件:
1、客户端首先创建DistributedFileSystem对象
2、向NameNode发出下载请求
3、NameNode根据举例优先选择合适的节点以及数据块信息响应给客户端
4、客户端根据响应创建输出流下载数据,此时会先读取nn1数据,读取结束如果数据不够再建立下一个通道读取下一个节点数据,直到读取完毕。
案例:从hdfs上截取方式下载数据
@Test //文件截取,下载块文件(比如查日志的时候只查看最后一块) //查第一块 public void readFileSeek1() throws URISyntaxException, IOException, InterruptedException { //获取对象 Configuration conf = new Configuration (); FileSystem fs = FileSystem.get (new URI ("hdfs://hadoop01:9000"), conf, "root"); //获取输入流 FSDataInputStream fis = fs.open (new Path ("/hadoop-2.9.2.tar.gz")); //获取输出流 FileOutputStream fos = new FileOutputStream (new File ("D:/hadoop-2.9.2.part1")); //文件拷贝(此时只拷128M)