Java操作HDFS

一、创建Java并使用maven在依赖hdfs所需要的jar文件

创建过程:略

pom.xml如下:

    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>

二、JAVA代码

对hdfs的操作都依附于FileSystem类hdfs客户端

1)初始化FileSystem fs

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

import java.io.IOException;
import java.net.URI;
//定义连接HDFS的客户端
    public FileSystem fs = null;

    //初始化fs避免每次测试时重复代码
    @Before
    public void init() throws Exception {
        //创建配置类
        //方法一:引入配置文件
        //方法二:使用set方法设置
        Configuration conf = new Configuration();
        //此处设置即为搭建环境时候hdfs-core.xml文件中的配置信息
        conf.set("fs.defaultFS", "hdfs://192.168.6.117:9000/");
        //使用静态方法创建客户端
        /**
         * 方法一:直接FileSystem.get(conf)  这种方法需要配置JVM参数-DHADOOP_USER_NAME=hadoop
         * "hadoop"为安装HDFS的Linux用户名
         */
        fs = FileSystem.get(new URI("hdfs://192.168.6.117:9000"),conf,"hadoop");
    }

2)文件上传

代码:

    /**
     * 文件上传
     */
    @Test
    public void upload() throws IOException {
        //本地文件
        Path localFile = new Path("d:/hdfstest.txt");
        //hdfs存放位置
        Path remoteFile = new Path("/hdfsTest.txt");
        fs.copyFromLocalFile(localFile, remoteFile);
    }

验证:

3)文件下载

代码:

    /**
     * 文件下载
     */
    @Test
    public void download() throws IOException{
        Path remoteFile = new Path("/hdfsTest.txt");
        Path localFile = new Path("d:/hdfstest1.txt");
        //这里面的false和true很重要
        //不用这俩参数很容易出现空指针异常
        fs.copyToLocalFile(false,remoteFile, localFile, true);
    }

验证:

4)创建文件夹

代码:

    /**
     * 创建文件夹
     */
    @Test
    public void mkdir() throws IllegalArgumentException, Exception {
        fs.mkdirs(new Path("/aaa/bbb/ccc"));
    }

验证:

5)删除文件

代码:

    /**
     * 删除文件或者文件夹
     */
    @Test
    public void rm() throws IllegalArgumentException, IOException {
        //true代表递归删除相当于 rm -r命令
        fs.delete(new Path("/aaa"), true);

    }

6)查看文件信息

准备基础数据:

文件、空文件夹、有文件的文件夹、多层文件夹

a-b-c-file.txt为多层文件夹下的文件

nullDir为空文件夹

aaa-file.txt为在aaa文件夹下的文件

代码:

    /**
     * 查看文件信息
     */
    @Test
    public void getFileInfo() throws Exception{
        //查看文件如果是文件夹则递归打开
        RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true);
        while(files.hasNext()){

            LocatedFileStatus file = files.next();
            Path filePath = file.getPath();
            String fileName = filePath.getName();
            System.out.println(fileName);

        }
        //只查看指定目录下的文件或者文件夹信息
        System.out.println("---------------------------------");
        FileStatus[] listStatus = fs.listStatus(new Path("/"));
        for(FileStatus status: listStatus){

            String name = status.getPath().getName();
            System.out.println(name + (status.isDirectory()?" is dir":" is file"));

        }
    }

结果:

 

本人QQ/Wechat : 806751350

该代码已经上传至gitbub上

地址为:https://github.com/linminlm/hadoop.git

有兴趣的人可以下载看看。其中包括了我之前的springboot以及springCloud的代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值