zoukankan      html  css  js  c++  java
  • HDFS手动拷贝某个特定的数据块(比如某个文件的第二个数据块)

    代码呈现

    package api;
    
    
    import java.io.File;
    import java.io.FileOutputStream;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.BlockLocation;
    import org.apache.hadoop.fs.FSDataInputStream;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IOUtils;
    
    /**
     * 手动拷贝某个特定的数据块(比如某个文件的第二个数据块)
     * @author potter
     *
     */
    public class TestCat {
    
        public static void main(String[] args) throws Exception {
            
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://potter2:9000");
            System.setProperty("HADOOP_USER_NAME", "potter");
            FileSystem fs = FileSystem.get(conf);
            
            FSDataInputStream in = fs.open(new Path("/111.zip"));
            System.out.println(in+",1111111");
            //获取文件信息
            FileStatus[] listStatus = fs.listStatus(new Path("/111.zip"));
            System.out.println(listStatus.length+",2222222");
            //获取文件块的信息
            BlockLocation[] blockLocations = fs.getFileBlockLocations(listStatus[0], 0L, listStatus[0].getLen());
            System.out.println(blockLocations.length+",3333333");
            
            //获取第二个块的长度
            Long lenght = blockLocations[1].getLength();
            System.out.println(lenght+",444444444");
            //获取第二个块的起始偏移量
            Long offset = blockLocations[1].getOffset();
            System.out.println(offset+",5555555");
            in.seek(offset);
            FileOutputStream os = new FileOutputStream(new File("D:/block2"));
            
            //获取第二个块的写入输出流
            IOUtils.copyBytes(in, os, lenght, true);
            
            in.close();
            os.close();
        }
    }
  • 相关阅读:
    'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set.
    flask os.environ 的作用
    flask 中xx.init_app(app)方法
    win10安装ubuntu双系统遇到的问题
    福大软工 · 最终作业
    福大软工 · 第十二次作业
    Beta 冲刺(7/7)
    Beta 冲刺(6/7)
    常用正则
    使用elementUI动态增减表单项 且 使用自定义校验
  • 原文地址:https://www.cnblogs.com/sangumaolu/p/8545900.html
Copyright © 2011-2022 走看看