client 通过io操作hdfs 文件上传下载

本文提供了一个HDFS文件操作的Java示例代码,包括文件上传到HDFS、从HDFS下载文件及从HDFS读取大文件并进行分段处理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.zbb.hdfs;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;

public class HdfsIO {
    
    @Test
    public void putFileToHDFS() throws Exception{
        Configuration conf = new Configuration();
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://hadoop102:9000"), conf, "zbb");
        //创建输入流
        FileInputStream fis = new FileInputStream(new File("e:/hello.txt"));
        //创建输出流
        FSDataOutputStream fos = fileSystem.create(new Path("/hello4.txt"), true);
        
        //拷贝
        IOUtils.copyBytes(fis, fos, conf);
        //关闭资源
        IOUtils.closeStream(fis);
        IOUtils.closeStream(fos);
        
    }
    @Test
    public void getFileFromHdfs()throws Exception{
        Configuration configuration = new Configuration();
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://hadoop102:9000"),configuration,"zbb");
        FSDataInputStream fis = fileSystem.open(new Path("/hello4.txt"));
        //创建输出流
        FileOutputStream fos = new FileOutputStream(new File("e:/hello3.txt"));
        IOUtils.copyBytes(fis, fos,configuration);
        fis.close();
        fos.close();    
    }
    @Test
    public void readFileSeek1() throws IOException, InterruptedException, URISyntaxException {
        // 1 获取文件系统   
        Configuration configuration = new Configuration();   
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "zbb"); 
        // 2 获取输入流 
        FSDataInputStream fis = fs.open(new Path("/user/zbb/softwark/hadoop-2.7.2.tar.gz"));     
        // 3 创建输出流  
        FileOutputStream fos = new FileOutputStream(new File("e:/hadoop-2.7.2.tar.gz.part1"));   
        // 4 流的拷贝  
        byte[] buf = new byte[1024];
        for (int i = 0; i < 1024*128; i++) {
            fis.read(buf);
            fos.write(buf);
            
        }
        // 5 关闭资源   
        IOUtils.closeStream(fis);   
        IOUtils.closeStream(fos); 
    }
    @Test 
    public void readFileSeek2() throws IOException, InterruptedException, URISyntaxException{      
        // 1 获取文件系统  
        Configuration configuration = new Configuration();  
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "zbb");    
        // 2 打开输入流   
        FSDataInputStream fis = fs.open(new Path("/user/zbb/softwark/hadoop-2.7.2.tar.gz"));    
        // 3 定位输入数据位置   
        fis.seek(1024*1024*128);     
        // 4 创建输出流  
        FileOutputStream fos = new FileOutputStream(new File("e:/hadoop-2.7.2.tar.gz.part2")); 
        // 5 流的对拷   
        IOUtils.copyBytes(fis, fos, configuration);     
        // 6 关闭资源   
        IOUtils.closeStream(fis);   
        IOUtils.closeStream(fos); 
    }
        
}

大文件可在cmd中使用 type 文件名>>文件名,合并文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值