您当前的位置: 首页 >  hdfs

梁云亮

暂无认证

  • 2浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

HDFS上传下载文件的基本流程

梁云亮 发布时间:2019-12-04 11:21:26 ,浏览量:2

写文件(上传文件) 示例:使用IO流实现文件上传
@Test
public void uploadFile2() throws IllegalArgumentException, IOException {
    FileInputStream fis = new FileInputStream(new File("E:/test/core-site.xml"));  //输入流
    FSDataOutputStream fos = fs.create(new Path("/b.xml"));  //输出流
    IOUtils.copyBytes(fis, fos, cfg);   //从本地写入文件到HDFS  复制流
    IOUtils.closeStream(fis);   //关闭流
    IOUtils.closeStream(fos);   //关闭流
}
流程:

在这里插入图片描述

  1. client端发送写文件请求,NameNode 检查文件是否存在,如果已存在,直接返回错误信息,否则,发送给client一些可用DataNode 节点
  2. client将文件分块,并行存储到不同节点上的DataNode中,发送完成后,client同时发送信息给NameNode 和DataNode
  3. NameNode 收到的client信息后,发送确信信息给DataNode
  4. DataNode 同时收到NameNode 和DataNode 的确认信息后,提交写操作。
读文件(下载文件) 示例:使用IO流实现文件下载
@Test
public void downloadFile() throws IOException {
    FSDataInputStream fis = fs.open(new Path("/a.xml"));
    FileOutputStream fos = new FileOutputStream(new File("E:/xqj.txt"));
    IOUtils.copyBytes(fis, fos, cfg);//从HDFS中读取文件到本地
    IOUtils.closeStream(fos);
    IOUtils.closeStream(fis);
}
流程:

在这里插入图片描述

  1. client端发送读文件请求给NameNode ,如果文件不存在,返回错误信息,否则,将该文件对应的block及其所在DataNode 位置发送给client
  2. client收到文件位置信息后,与不同DataNode 建立socket连接并行获取数据。
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0424s