• HDFS Java API 详解


    Hadoop版本:  Hadoop 2.6.0

     连接HDFS

    String URL="hdfs://hadoop001:9000";
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS", URL);
    FileSystem fs = FileSystem.get(conf);

    上传文件到HDFS

    //获取本地文件的输入流
    FileInputStream in=new FileInputStream("d://aaa.mp3");
    //获取hdfs的输出流,默认是覆盖已存在的同名文件
    //上传到hdfs根目录/
    FSDataOutputStream output = fs.create(new Path("/bbb.mp3"));
    //通过commons中的工具类copy文件到hdfs
    IOUtils.copy(in, output);

    简单方法

    /*
    * copyFromLocalFile(Path src, Path dst)
    * 该方法对上面的过程进行了封装,使操作更加简单。
    */
    fs.copyFromLocalFile(new Path("d://abc.mp3"), new Path("/bcd.mp3"));

    读取HDFS文件

     Path inHdfs=new Path("/bbb.mp3");
    if(fs.exists(inHdfs)){
        //获取hdfs的输入流
        FSDataInputStream in = fs.open(inHdfs);
        //获取本地文件的输出流
        FileOutputStream out=new FileOutputStream("d://aaa.mp3");
        //写文件到本地磁盘
        //或使用IOUtils.copy(in, output);
        byte[] buf=new byte[1024];
        int next=0;
        while((next=in.read(buf))!=-1){
            out.write(buf, 0, next);
        }
    }

    简单方法

    //copyToLocalFile(Path src, Path dst)
    fs.copyToLocalFile(inHdfs, new Path("c://aaa.mp3"));

    注意:如果要从hdfs复制文件到windows系统,需要设置useRawLocalFileSystem的值为true。否则会抛出空指针异常。

    默认是使用HDFS的文件系统,如果是windows系统,需要使用原生的本地文件系统。

    (???这里不是很明白,没读懂源码。)

    /*
    * delSrc:是否删除原文件
    * Path src:源文件
    * Path dst:目的文件
    * useRawLocalFileSystem:是否使用原生本地文件系统
    */
    fs.copyToLocalFile(false,new Path("/f1/bbb.pdf"), new Path("c://abc.pdf"),true);

    删除HDFS文件

    /*
    *  delete(Path f, boolean recursive)
    *  当删除非空目录时,recursive必须为true
    */
    fs.delete(new Path("/file1), true);

    创建目录

    //在hdfs的根目录下创建文件夹
    foofs.mkdirs(new Path("/foo"));
    //文件夹的默认权限是755,也可以通过第二个参数设置权限mkdirs(Path, FsPermission)

    如果文件夹的目录是相对路径,hdfs会做如下处理:

    源码位置:FileSystem#fixRelativePart()

    if (p.isUriPathAbsolute()) { //如果是绝对路径(/开始的路径),直接使用
          return p;
    } else {//如果是相对路径,在当前用户的home目录下创建该目录
          return new Path(getWorkingDirectory(), p);
    }

    例如你在windows系统中执行的操作,假设当前windows的账户名是Administrator(管理员账户登陆),那么在hdfs中的home目录即:/user/Administrator

    fs.mkdirs(new Path("foo"));

    执行完上面的代码,就会在hdfs中创建目录结构: /user/Administrator/foo

    Thanks a lot!

        END!

            

  • 相关阅读:
    Asp.Net Core Web MVC 调用Grpc,采用依赖注入
    .Net Core框架下 Grpc四种处理方法
    信息系统项目管理师高频考点(第二章)
    系统集成项目管理工程师高频考点(第二章)
    .Net Core框架下实现Grpc客户端和服务端
    .Net Framework框架下实现Grpc客户端和服务端
    Asp.Net Core Mvc项目登录IdentityServer4验证无法跳转问题
    IdentityServer4(五)
    MVC项目登录IdentityServer4报错, The cookie '.AspNetCore.Correlation has set 'SameSite=None' and must also set 'Secure'
    IdentityServer4(二)
  • 原文地址:https://www.cnblogs.com/lukeguo/p/8824772.html
Copyright © 2020-2023  润新知