数据小站
数据科学成长之路

客户端io流操作hdfs

使用到的hdfs的包文件:

org.apache.hadoop.fs.FSDataInputStream:hdfs文件系统输入流

io流方式上传文件

当数据在系统中不是以文本形式存在时,可以通过io流对接的方式写入hdfs,省去了将数据流先本地持久化后再在上传hdfs。

public static void main(String[] args) throws Exception {
    //获取文件系统,在本地配置core后,就不需要在代码中配置hdfs地址和用户名
    Configuration configuration = new Configuration();
    FileSystem fs =  FileSystem.get(configuration); 

    //确定输出流
    FSDataOutputStream fos = fs.create(new Path("/test/abc"));

    //输入流,没有生产数据流的环境,就从文件读取,如果是文件上传不必要使用流,这里用作演示
    FileInputStream fis = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\统计学.txt"));

    //对接流,org.apache.hadoop.io.IOUtils; 然后关闭流
    IOUtils.copyBytes(fis, fos, configuration);
    IOUtils.closeStream(fis);
    IOUtils.closeStream(fos);

io流方式上传下载

...
 FSDataInputStream fis = fs.open(new Path("/test/abc")); //输入流
 FileOutputStream  fos = new FileOutputStream(new    
 File("C:\\Users\\Administrator\\Desktop\\acr"));        //输出流
    IOUtils.copyBytes(fis, fos, configuration);          //流对接
... 

io分块读取hdfs实现大文件下载

fs.seek(1024*1024*128)

hadoop3中,一个块大小默认是128m, 一个块大小等于 128*1204*1024B ,大文件时逐块读取,用seek定位遍历读取

赞(0) 打赏
未经允许不得转载:技术文档分享 » 客户端io流操作hdfs

评论 抢沙发