使用javaAPI对HDFS进行文件上传,下载,新建文件及文件夹删除,遍历所有文件

这篇具有很好参考价值的文章主要介绍了使用javaAPI对HDFS进行文件上传,下载,新建文件及文件夹删除,遍历所有文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录文章来源地址https://www.toymoban.com/news/detail-519234.html

//通过工具类来操作hdfs   hdfs dfs -put d:user_info.txt  /user_info.txt 

// 将文件放入到hdfs中

@Test
    public void test1() throws IOException {  //  构建方法的时候,不要加 static 加了之后@Test就不能用了
        //操作hdfs
        //1. 初始化配置对象 需要new出来
        Configuration conf = new Configuration();
        //2. 添加配置 (其实就是提供一个key - value)
        conf.set("fs.defaultFS","hdfs://hadoop10:8020");
        //3. 构建操作hdfs的具体工具类
        FileSystem fileSystem = FileSystem.get(conf);
        //通过工具类来操作hdfs   hdfs dfs -put d:user_info.txt  /user_info.txt
        // 将文件放入到hdfs中
        fileSystem.copyFromLocalFile(new Path("d:\\user_info.txt"),new Path("/"));
        // Permission denied: 看到这个就一定要想到权限问题
        // hdfs dfs -chmod -R 777 /
        /*
          运行结果中有如下的信息,可以忽略
          SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
          SLF4J: Defaulting to no-operation (NOP) logger implementation
          SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
         */


        //关闭hdfs的连接工具
        if (fileSystem != null) {
            fileSystem.close();
        }

 2.通过工具类来操作hdfs   hdfs dfs -get hdfs路径   本地路经  将文件放入到本地Windows中

@Test
    public void test2() throws IOException {
        //操作hdfs
        //1. 初始化配置对象 需要new出来
        Configuration conf = new Configuration();
        //2. 添加配置 (其实就是提供一个key - value)
        conf.set("fs.defaultFS","hdfs://hadoop10:8020");
        //3. 构建操作hdfs的具体工具类
        FileSystem fileSystem = FileSystem.get(conf);
        //通过工具类来操作hdfs   hdfs dfs -get hdfs路径   本地路径
        // 将文件放入到本地Windows中(或者说,你的代码运行在哪里,你的本地就是哪里)
        fileSystem.copyToLocalFile(new Path("/user_info.txt"),new Path("D:\\BD2209太湖"));

        // 关闭操作工具类
        fileSystem.close();
    }

3.通过工具类来操作hdfs   hdfs dfs -mkdir -p  hdfs路径

@Test
    public void test3() throws IOException {
        //操作hdfs
        //1. 初始化配置对象 需要new出来
        Configuration conf = new Configuration();
        //2. 添加配置 (其实就是提供一个key - value)
        conf.set("fs.defaultFS","hdfs://hadoop10:8020");
        //3. 构建操作hdfs的具体工具类
        FileSystem fileSystem = FileSystem.get(conf);
        //通过工具类来操作hdfs   hdfs dfs -mkdir -p  hdfs路径
        boolean mkdir_flag = fileSystem.mkdirs(new Path("/dir_from_java/dir1/dir2"));
        System.out.println(mkdir_flag);

        // 关闭操作工具类
        fileSystem.close();
    }

4.通过工具类来操作hdfs  查看一个文件是否存在

@Test
    public void test4() throws IOException {
        //操作hdfs
        //1. 初始化配置对象 需要new出来
        Configuration conf = new Configuration();
        //2. 添加配置 (其实就是提供一个key - value)
        conf.set("fs.defaultFS","hdfs://hadoop10:8020");
        //3. 构建操作hdfs的具体工具类
        FileSystem fileSystem = FileSystem.get(conf);
        //通过工具类来操作hdfs  查看一个文件是否存在
        boolean exists = fileSystem.exists(new Path("/suibian"));
        System.out.println(exists);

        boolean exists1 = fileSystem.exists(new Path("/test1"));
        System.out.println(exists1);

        // 关闭操作工具类
        fileSystem.close();
    }

5.删除一个hdfs中的文件

@Test
    public void test5() throws IOException {
        //操作hdfs
        //1. 初始化配置对象 需要new出来
        Configuration conf = new Configuration();
        //2. 添加配置 (其实就是提供一个key - value)
        conf.set("fs.defaultFS","hdfs://hadoop10:8020");
        //3. 构建操作hdfs的具体工具类
        FileSystem fileSystem = FileSystem.get(conf);
        //通过工具类来操作hdfs  hdfs dfs -rm hdfs绝对路径
        // 删除一个hdfs中的文件
        //  delete 方法自带 -r 参数,也就是直接调用的时候,就会递归删除
        // 如果想要避免直接递归删除,可以使用第二个参数, false 来进行控制
        boolean delete = fileSystem.delete(new Path("/test"),false);
        System.out.println(delete);

        // 关闭操作工具类
        fileSystem.close();
    }

6.查看某一个路径下的所有文件以及文件夹

@Test
    public void test6() throws IOException {
        //操作hdfs
        //1. 初始化配置对象 需要new出来
        Configuration conf = new Configuration();
        //2. 添加配置 (其实就是提供一个key - value)
        conf.set("fs.defaultFS","hdfs://hadoop10:8020");
        //3. 构建操作hdfs的具体工具类
        FileSystem fileSystem = FileSystem.get(conf);
        //通过工具类来操作hdfs  hdfs dfs -ls hdfs绝对路径
        // 查看某一个路径下的所有文件以及文件夹
        // listStatus 返回值是一个对象数组,那么为什么要返回一个对象数组呢?直接给一个String 数组不就行了吗?
        // 对象中可以拥有属性和方法,一个对象里面可以存储大量的信息
        FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/"));
        for (FileStatus fileStatus : fileStatuses) {
            System.out.println(fileStatus.getPath());
            System.out.println("是不是一个文件夹:"+fileStatus.isDirectory());
            System.out.println("文件大小是:"+fileStatus.getLen());
            System.out.println("副本数:"+fileStatus.getReplication());
            System.out.println("------------------");
        }

        // 关闭操作工具类
        fileSystem.close();
    }

7.通过工具类来操作hdfs  查看关于数据块的信息

@Test
    public void test7() throws IOException {
        //操作hdfs
        //1. 初始化配置对象 需要new出来
        Configuration conf = new Configuration();
        //2. 添加配置 (其实就是提供一个key - value)
        conf.set("fs.defaultFS","hdfs://hadoop10:8020");
        //3. 构建操作hdfs的具体工具类
        FileSystem fileSystem = FileSystem.get(conf);
        //通过工具类来操作hdfs  查看关于数据块的信息
        // 文件本身对于 hdfs来说,是一个逻辑上的概念
        // listFiles 方法可以返回一个存放对象的迭代器,这个对象中有 数据块的信息
        // 查看一个迭代器中的内容时,使用while循环,while循环的刹车踏板:hasNext()
        // hasNext()返回的值是false的时候,就算是读完了迭代器,返回true的时候,就是还有下一个元素需要读取
        RemoteIterator<LocatedFileStatus> iterator = fileSystem.listFiles(new Path("/"), true);
        while (iterator.hasNext()){
            LocatedFileStatus fileStatus = iterator.next();
            System.out.println(fileStatus.getLen());
            System.out.println(fileStatus.getPath());
            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            //  这个循环会循环几次,是根据一个文件被拆成了多少个块决定的
            for (BlockLocation blockLocation : blockLocations) {
                String[] hosts = blockLocation.getHosts();
                String strHosts = Arrays.toString(hosts);
                String names = Arrays.toString(blockLocation.getNames());
                long offset = blockLocation.getOffset();
                long length = blockLocation.getLength();
                System.out.println("所在的DataNode是:"+names+" 所在主机:"+strHosts+" 偏移量是:"+offset+" 块的大小是:"+length);
            }
            System.out.println("--------------");
        }
        // 关闭操作工具类
        fileSystem.close();
    }

8.查看所有文件

 @Test
    public void test3() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://hadoop10:8020");
        FileSystem fileSystem = FileSystem.get(conf);
            //2:调用方法listFiles 获取 /目录下所有的文件信息,,参数true代表递归遍历
            RemoteIterator<LocatedFileStatus> iterator = fileSystem.listFiles(new Path("/"), true);
            //3:遍历迭代器
            while (iterator.hasNext()){
                LocatedFileStatus fileStatus = iterator.next();
                //getPath()方法就是获取绝对路径
                System.out.println(fileStatus.getPath() + "----" +fileStatus.getPath().getName());

                //文件的block信息
                BlockLocation[] blockLocations = fileStatus.getBlockLocations();
                for (BlockLocation blockLocation : blockLocations) {
                    String[] hosts = blockLocation.getHosts();
                    String strHosts = Arrays.toString(hosts);
                    String names = Arrays.toString(blockLocation.getNames());
                    long offset = blockLocation.getOffset();
                    long length = blockLocation.getLength();
                    System.out.println("所在的DataNode是:"+names+" 所在主机:"+strHosts+" 块的大小是:"+length);
                }

            }
        // 关闭操作工具类
        fileSystem.close();

    }

到了这里,关于使用javaAPI对HDFS进行文件上传,下载,新建文件及文件夹删除,遍历所有文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序文件相关操作(新建文件夹、下载、解压、读取等)

    wx.downloadFile()  //下载 wx.getFileSystemManager()  //获取小程序的文件管理器 FileSystemManager.unzip() //解压 FileSystemManager.readdir()  //读取文件夹 FileSystemManager.readFile()  //读取文件 FileSystemManager.access() //判断文件/目录是否存在 FileSystemManager.mkdir()  //创建文件夹 index.js 在 onload 中获取 F

    2024年02月15日
    浏览(50)
  • Github仓库中怎么新建文件夹、Github的项目中如何上传图片

    在Github仓库中创建新文件夹的步骤如下: 首先进入您的Github仓库页面。 在仓库页面中,点击“Add file”按钮,然后选择“Create new file”。 在文件名输入框里输入文件夹名称,例如“my_folder/”,注意末尾要加上“/”来表示这是一个文件夹。 然后在文件名后面按回车键,Gith

    2024年02月04日
    浏览(51)
  • MobaXterm上传下载文件、文件夹到服务器上

      首先通过SSH与服务器建立连接,不懂的可查阅相关资料,CSDN里有很多介绍。 1、上传下载文件 可以在命令输入窗口,无需输入命令,按ctrl单击的同时鼠标右键出现以下左图,选择receive file using Z-modem或者send file using Z-modem来上传或者下载文件。 也可以通过mobaxterm左侧的导

    2024年02月11日
    浏览(50)
  • 使用hutool进行ftp文件下载和上传

    2024年02月11日
    浏览(43)
  • Linux中使用SCP命令进行上传或者下载文件

    SCP(Secure Copy Protocol)是一种基于SSH的在网络上安全传输文件的文件传输协议,使用SSH(Secure Shell)加密技术来保证数据在传输过程中的安全性。SCP 命令是Linux主机之间进行上传或者下载文件的最常用的命令,这是一个功能非常强大的工具,可以在任意二个主机之间快速的上传与

    2024年02月16日
    浏览(50)
  • 【Java】对Minio指定Bucket大量文件的批量下载与本地文件夹的批量上传

    需要批量下载一个bucket下的内容,bucket下文件有19GB+,且文件夹结构复杂,使用官方的Console无法完成这么大量文件的下载,而且也不支持文件夹的分享,所以自己写个工具下载,顺便把上传的也写了。 使用官方的打包下载,由于文件太多,一直转,而且session一失效,或者刷

    2024年02月09日
    浏览(55)
  • linux系统使用命令rz、sz进行文件的上传、下载

      目录 1、安装: 2、使用rz上传文件 第三步:使用sz下载文件 使用 tar 压缩当前文件夹下所有文件 : rz :本地上传文件 sz :Linux服务器上的文件下载到本地。 用法:在linux中直接输入 rz 然后回车 用法:sz 路径文件名 下载多个文件: sz 文件1 文件2  无法下载的文件夹,先进

    2024年02月05日
    浏览(45)
  • Hadoop——HDFS的Java API操作(文件上传、下载、删除等)

    1、创建Maven项目 2、修改pom.xml文件 3、添加四个配置文件 为避免运行的一些错误,我们将Hadoop的四个重要配置文件添加到resources中 4、创建测试文件JavaAPI 5、初始化 因为对文件的操作我们都需要获取hdfs对象和关闭对象,所以为避免重复编写,将两个操作对立成单独方法,分别

    2024年02月06日
    浏览(68)
  • 使用element-ui的el-upload进行excel文件上传与下载

    需求:前端上传文件后,后端接受文件进行处理后直接返回处理后的文件,前端直接再将文件下载下来。 通常我们都是直接使用el-upload的action属性来直接完成文件上传的操作,如果要进行后续文件的直接下载,可以在on-success中用代码进行操作,若存在401权限问题也可以直接

    2024年02月11日
    浏览(44)
  • 使用Git将文件夹上传到Github以及使用Git LFS上传大文件

    使用Git将文件夹上传到Github以及使用Git LFS上传大文件

    2024年04月14日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包