hadoop_hdfs03-java-IO流操作

hadoop_hdfs03-java-IO流操作

注:仅作笔记.

api操作是hdfs系统封装好的,如果想自己实现api操作,可以使用IO流的方式实现数据的上传和下载.

  1. hdfs文件上传

  2. hdfs文件下载

  3. 指定下载起始位置

package com.onhadoop.hdfs;

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;

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 java.sql.SQLOutput;

/*
  api操作是hdfs系统封装好的,如果想自己实现api操作,可以使用IO流的方式实现数据的上传和下载
 */
public class HDFSIO {
    /**
     * tartget1:把本地txt文件上传到hdfs
     */
    @Test
    public void putFileToHdfs() throws URISyntaxException, IOException, InterruptedException {
        // 1.获取文件系统

        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"),conf,"user02");

        // 2.获取输入流 源端:本地
//        FileInputStream fis = new FileInputStream(new File("/Users/linux01/Desktop/fromHdfs.txt")) ;
        FileInputStream fis = new FileInputStream(new File("/Users/linux01/Documents/hadoop-2.7.2.zip")) ;

        // 3.获取输出流 目的端:hdfs
        FSDataOutputStream fos = fs.create(new Path("/IO/hadoop-2.7.2.zip"));

        // 4.流的对烤
        IOUtils.copyBytes(fis,fos,new Configuration());

        // 5.关闭流
        IOUtils.closeStream(fis);
        IOUtils.closeStream(fos);
        fs.close();

    }

    /**
     * target2:文件的下载
     * @throws URISyntaxException
     * @throws IOException
     * @throws InterruptedException
     */
    @Test
    public void loadFilefromHdfs() throws URISyntaxException, IOException, InterruptedException {

        // 1.获取文件系统
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), conf, "user02");
        // 2.获取输入流
            // 源端:hdfs
        FSDataInputStream fis = fs.open(new Path("/IO/iphh.txt"));

        // 3.获取输出流
            // 目的端:本地
        FileOutputStream fos = new FileOutputStream(new File("/Users/linux01/Desktop/iohhh.txt"));

        // 4.流的对烤
        IOUtils.copyBytes(fis,fos,new Configuration());

        // 5.关闭流和文件系统
        IOUtils.closeStream(fis);
        IOUtils.closeStream(fos);
        fs.close();
    }

    /**
     * target3:分块下载hdfs上的大文件
     * 3.1 下载第一块:遍历
     * 3.2 下载第二块:指定位置开始读
     */
    // 3.1
    @Test
    public void readFileSeek1() throws URISyntaxException, IOException, InterruptedException {
        // 1.获取文件系统
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), conf, "user02");

        // 2.获取输入流
        FSDataInputStream fis = fs.open(new Path("/IO/hadoop-2.7.2.zip"));

        // 3.获取输出流
        FileOutputStream fos = new FileOutputStream(new File("/Users/linux01/Desktop/hadoop-2.7.2.zip.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);
        fs.close();
    }

    //3.2
    @Test
    public void readFileSeek2() throws URISyntaxException, IOException, InterruptedException {
        // 1.获取文件系统
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), conf, "user02");

        // 2.获取输入流
        FSDataInputStream fis = fs.open(new Path("/IO/hadoop-2.7.2.zip"));
        // 定位输入流读取的位置,单位byte(*)
        fis.seek(1024*1024*128); //

        // 3.获取输出流
        FileOutputStream fos = new FileOutputStream(new File("/Users/linux01/Desktop/hadoop-2.7.2.zip.part2"));

        // 4.流的拷贝
        IOUtils.copyBytes(fis,fos,new Configuration());

        // 5.关闭流和文件系统
        IOUtils.closeStream(fis);
        IOUtils.closeStream(fos);
        fs.close();
    }

    /*
     查看结果在本地执行:cat hadoop-2.7.2.zip.part2 >> hadoop-2.7.2.zip.part1
     */

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值