6.Hadoop IDEA API操作

接上文————>
基于hadoop2.7.x centos7.x idea2020.3

一.API操作配置

项目结构:
在这里插入图片描述

1.给idea项目添加hadoop中的jar包

jar包点击下载
在这里插入图片描述

2.导入jar包

在这里插入图片描述
选择hadoop安装包share下的整个hadoop包里面的jar文件全部导入
在这里插入图片描述
将hadoop.dll文件拷贝到C:/Windows/System32目录下,最后重启电脑。(这里在安装配置Windows的hadoop的时候已经拷贝)

二.Io操作(上传/下载)

记得项目内配置Maven,这里之前已经配置

1.上传

hadoop依赖(把下列代码放入pom.xml中)

    <dependencies>
    <!--        测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

点击刷新一下依赖:
在这里插入图片描述
新建java文件,写入以下代码:
第一种方式:

package com.qingtaishuju.zrt;
//依赖可手自己导入
import org.apache.hadoop.conf.Configuration;
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.net.URI;

public class Io {
    //    全局变量
    Configuration configuration = new Configuration();
    //    定义IP,指定自己的HDFS IP
    private static String IP = "hdfs://hy:9000";

    //    TODO:2022/5/27 上传
    @Test
    public void upload() throws Exception {
//        1.获取文件系统
        FileSystem fs = FileSystem.get(new URI(IP), configuration, "admin");
//        2.创建输入流,上传idea本地的文件到HDFS
        FileInputStream inputStream = new FileInputStream(new File("D:\\IDEA\\tomcat\\HDFS1\\wenjian\\1.txt"));
//        3.创建输出流,将本地文件输出到HDFS的指定文件夹
        FSDataOutputStream outputStream = fs.create(new Path("/tmp/0000000.txt"));
//        4.对拷
        IOUtils.copyBytes(inputStream, outputStream, configuration);
//        5.关流
        IOUtils.closeStream(inputStream);
        IOUtils.closeStream(outputStream);
    }
}

第二种方式:

//文件上传
    @Test
    public void upload() throws Exception{
        //1.创建配置信息对象
        configuration.set("fs.defaultFS",IP);
        FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
        //2.上传,将本地文件上传到HDFS的指定位置
        fs.copyFromLocalFile(new Path("D:\\IDEA\\tomcat\\HDFS1\\wenjian\\1.txt"),new Path("/tmp/test001.txt"));
        //3.关闭资源
        fs.close();
    }
}

查看:
在这里插入图片描述
运行结果:
在这里插入图片描述

2.下载

代码接上
第一种方式:

@Test
    public void getFileToConsle()throws Exception{
        //1.获取文件系统
    FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
    //2.获取输入流,hdfs里面要有这个文件
    FSDataInputStream fis = fs.open(new Path("/tmp/0000000.txt"));
    //3.打印到控制台
    IOUtils.copyBytes(fis,System.out,configuration);
    //4.关闭资源
    IOUtils.closeStream(fis);
}

第二种方式:

    //这个方式没运行成功
    @Test
    public void getFile() throws Exception{
        //1.获取文件系统
        FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
        //2.下载
        fs.copyToLocalFile(false,new Path("/tmp/test001.txt"),
                new Path("D:\\IDEA\\tomcat\\HDFS1\\wenjian\\test001.txt"));
        //3.关闭资源
        fs.close();
    }

运行结果:
在这里插入图片描述

三.其他操作

1.获取文件系统

创建新java文件,填入如下代码:

package com.qingtaishuju.zrt;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.junit.Test;

import java.net.URI;

public class Connection {
    //全局变量
    Configuration configuration = new Configuration();
    //定义IP,自己的hadoop IP
    private static String IP = "hdfs://hy:9000";
    
    //获取文件系统
    @Test
public void init()throws Exception{
        //1.创建配置信息对象
        configuration.set("fs.defaultFS",IP);
        //2.获取文件系统
        FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
        //3.打印文件系统
        System.out.println(fs.toString());
    }
}

运行结果:
在这里插入图片描述

2.创建目录

代码接上,共用引入的类就行,省的新建java文件,方便。

    @Test
    public void mkdir() throws Exception{
        //1.获取文件系统
        FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
        //2.创建目录(这里在tmp目录下创建zrt666目录)
        fs.mkdirs(new Path("/tmp/zrt666"));
        //3.关闭资源
        fs.close();
    }

运行结果:
在这里插入图片描述

3.删除目录

代码接上,共用引入的类就行,省的新建java文件,方便。

   @Test
    public void delete() throws Exception{
        //1.获取文件系统
        FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
        //2.删除目录(删除在tmp目录下的zrt666目录)
        fs.delete(new Path("/tmp/zrt666"),true);
        //3.关闭资源
        fs.close();
    }

运行结果:
在这里插入图片描述

4.更改文件名

代码接上,共用引入的类就行,省的新建java文件,方便。

    @Test
    public void update() throws Exception{
        //1.获取文件系统
        FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
        //2.让一个文件名重命名(让1.txt改为111.txt)
        fs.rename(new Path("/tmp/userzrt/1.txt"),new Path("/tmp/userzrt/111.txt"));
        //3.关闭资源
        fs.close();
    }

运行结果:
在这里插入图片描述

5.查看文件内容

代码接上,共用引入的类就行,省的新建java文件,方便。

 @Test
    public void show() throws Exception{
        //1.获取文件系统
        FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");
        //2.获取文件详情,找到HDFS里面的某个文件
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/tmp/userzrt/111.txt"),true);
        //3.遍历
        while (listFiles.hasNext()){
            LocatedFileStatus status = listFiles.next();
            //文件名
            System.out.println(status.getPath().getName()+"");
            //获取长度
            System.out.println(status.getLen()+"");
            //组别
            System.out.println(status.getGroup());
            System.out.println("************************");
            //关闭资源
            fs.close();
        }
    }

运行结果:
在这里插入图片描述

6.判断是文件还是目录

代码接上,共用引入的类就行,省的新建java文件,方便。

   @Test
    public void teat() throws Exception{
        //1.获取文件系统
        FileSystem fs = FileSystem.get(new URI(IP),configuration,"zrt");

        //2.判断是目录还是文件
        FileStatus[] listStatus = fs.listStatus(new Path("/tmp"));
        for (FileStatus status : listStatus){
            if (status.isFile()) {
                System.out.println("文件" + status.getPath().getName());
            }else {
                System.out.println("目录" + status.getPath().getName());
            }
        }
        //3.关闭资源
        fs.close();
    }

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_胡杨_

感谢打赏,会多多更新的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值