验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Java API操作HDFS方法是什么

阅读:907 来源:乙速云 作者:代码code

Java API操作HDFS方法是什么

一、判断Path指向目录还是文件

net.xxr.hdfs包里创建PathToFileOrDir

Java API操作HDFS方法是什么

package net.xxr.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
/**
 * 功能:判断路径指向目录还是文件
 */
public class PathToFileOrDir {
    public static void main(String[] args) throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象,指向目录
        Path path2 = new Path("/ied01");
        if (fs.isDirectory(path2)) {
            System.out.println("[" + path2 + "]指向的是目录!");
        } else {
            System.out.println("[" + path2 + "]指向的是文件!");
        }
        // 创建路径对象,指向文件
        Path path3 = new Path("/lzy01/test2.txt");
        if (fs.isFile(path3)) {
            System.out.println("[" + path3 + "]指向的是文件!");
        } else {
            System.out.println("[" + path3 + "]指向的是目录!");
        }
    }
}

结果

Java API操作HDFS方法是什么

二、删除目录或文件

net.xxr.hdfs包里创建DeleteFileOrDir

Java API操作HDFS方法是什么

1、删除文件

  • 删除/lzy/hello.txt文件

  • 编写deleteFile()方法

package net.xxr.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import java.net.URI;
/**
 * 功能:删除目录或文件
 */
public class DeleteFileOrDir {
    @Test
    public void deleteFile() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向文件)
        Path path = new Path(uri + "/lzy01/hello.txt");
        // 删除路径对象指向的文件(第二个参数表明是否递归,删除文件,不用递归)
        boolean result = fs.delete(path, false);
        // 根据返回结果提示用户
        if (result) {
            System.out.println("文件[" + path + "]删除成功!");
        } else {
            System.out.println("文件[" + path + "]删除失败!");
        }
    }
}

结果

Java API操作HDFS方法是什么

利用Hadoop WebUI界面查看

Java API操作HDFS方法是什么

再运行deleteFile()测试方法,查看结果

Java API操作HDFS方法是什么

可以在删除文件之前,判断文件是否存在,需要修改代码

package net.xxr.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import java.net.URI;
/**
 * 功能:删除目录或文件
 */
public class DeleteFileOrDir {
    @Test
    public void deleteFile() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向文件)
        Path path = new Path(uri + "/lzy01/hi.txt");
        // 判断路径对象指向的文件是否存在
        if (fs.exists(path)) {
            // 删除路径对象指向的文件(第二个参数表明是否递归,删除文件,不用递归)
            boolean result = fs.delete(path, false);
            // 根据返回结果提示用户
            if (result) {
                System.out.println("文件[" + path + "]删除成功!");
            } else {
                System.out.println("文件[" + path + "]删除失败!");
            }
        } else {
            System.out.println("文件[" + path + "]不存在!");
        }
    }
}

结果

Java API操作HDFS方法是什么

2、删除目录

  • 删除/ied01目录

  • 编写deleteDir()方法

@Test
    public void deleteDir() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向目录)
        Path path = new Path(uri + "/ied01");
        // 判断路径对象指向的目录否存在
        if (fs.exists(path)) {
            // 删除路径对象指向的目录(第二个参数表明是否递归,删除文件,要递归)
            boolean result = fs.delete(path, true);
            // 根据返回结果提示用户
            if (result) {
                System.out.println("目录[" + path + "]删除成功!");
            } else {
                System.out.println("目录[" + path + "]删除失败!");
            }
        } else {
            System.out.println("目录[" + path + "]不存在!");
        }
    }

Java API操作HDFS方法是什么

再运行deleteDir()方法,查看结果

Java API操作HDFS方法是什么

3、删除目录或文件

  • 进行三个层面的判断:判断类型(目录或文件)、判断是否存在、判断删除是否成功

  • 删除/ied03/exam.txt文件和/ied02目录

  • 编写delete()方法

@Test
    public void delete() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 定义随机对象
        Random random = new Random();
        // 产生随机整数 - [0, 1]
        int choice = random.nextInt(100) % 2;
        // 定义路径字符串
        String[] strPath = {"/ied03/exam.txt", "/ied02"};
        // 创建路径对象(指向目录或文件)
        Path path = new Path(uri + strPath[choice]);
        // 判断类型:目录或文件
        String type = "";
        if (fs.isDirectory(path)) {
            type = "目录";
        } else {
            type = "文件";
        }
        // 判断存在性
        if (fs.exists(path)) {
            // 删除路径对象指向的目录或文件
            boolean result = fs.delete(path, true);
            // 判断删除是否成功
            if (result) {
                System.out.println(type + "[" + path + "]删除成功!");
            } else {
                System.out.println(type + "[" + path + "]删除失败!");
            }
        } else {
            System.out.println(type + "[" + path + "]不存在!");
        }
    }
分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>