HDFS 的java-常用API

package com.cetc55.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;

/**
 * 以下代码均为本人练习代码
 * 代码功能:连接hdfs,对hdfs的文件进行操作
 */
public class HdfsClient {
    private FileSystem fs;

    @Before
    public void inif() throws URISyntaxException, IOException, InterruptedException {
//        连接集群的namenode的地址
        URI uri = new URI("hdfs://master:8020");
//        创建一个配置文件
        Configuration configuration = new Configuration();
//        用户信息
        String user = "root";
//        获取客户端对象
        fs = FileSystem.get(uri, configuration, user);
    }

    @After
    public void close() throws IOException {
        //       关闭客户端连接
        fs.close();
    }

    @Test
//    创建目录
    public void testMkdir() throws URISyntaxException, IOException, InterruptedException {

//        创建目录的路径
        Path path = new Path("/xiyou/longgong");
//        创建文件
        fs.mkdirs(path);
    }

    //    上传文件
    @Test
    public void testPut() throws IOException {
//        参数解读:参数1:表示删除源数据  参数2:表示是否允许覆盖
//        参数3:源数据路径   参数4:目的地路径
//        源数据路径
        Path path1 = new Path("D:\\test\\santaizi.txt");
        Path path2 = new Path("/xiyou/longgong");
        fs.copyFromLocalFile(false, true, path1, path2);
    }

    //    下载文件
    @Test
    public void testGet() throws IOException {
//        参数解读:参数1:表示是否删除源文件   参数2:原文件路径(HDFS)
//        参数3:目标地址路径(win)   参数4:是否关闭文件校验
        Path pathHDFS = new Path("/xiyou/longgong/donghailongwang.txt");
        Path pathWin = new Path("D:\\test\\");
        fs.copyToLocalFile(false, pathHDFS, pathWin, true);
//        fs.copyFromLocalFile(false,false,pathHDFS,pathWin);
    }

    //    删除文件
    @Test
    public void testRm() throws IOException {
//        参数解读:参数1:要删除的路径  参数2:是否递归删除
        Path pathHdfs = new Path("/xiyou/longgong/donghailongwang.txt");
        fs.delete(pathHdfs, false);
//    删除空目录
        fs.delete(new Path("/xiyou"), false);
//    删除非空目录
        fs.delete(new Path("/xiyou"), true);
//        备注:删除空目录和非空目录的区别在于 是否递归删除
    }

    //  文件的更名和移动
    @Test
    public void testMv() throws IOException {
        Path path1 = new Path("/input");
        Path path2 = new Path("/output");
        fs.rename(path1, path2);
    }

    //  获取文件详细信息
    @Test
    public void testFileDetail() throws IOException {
//          获取所以文件信息
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/xiyou/longgong/"), true);
//    遍历文件
        while (listFiles.hasNext()) {
            LocatedFileStatus fileStatus = listFiles.next();
            System.out.println("===============" + fileStatus.getPath() + "================");
            System.out.println("===============" + fileStatus.getBlockLocations() + "===============");
            System.out.println(fileStatus.getPermission());
            System.out.println(fileStatus.getOwner());
            System.out.println(fileStatus.getGroup());
            System.out.println(fileStatus.getLen());
            System.out.println(fileStatus.getModificationTime());
            System.out.println(fileStatus.getReplication());
            System.out.println(fileStatus.getBlockSize());
            System.out.println(fileStatus.getPath().getName());
            // 获取块信息
            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            System.out.println(Arrays.toString(blockLocations));
        }
//      3 关闭资源
        fs.close();
    }
//    HDFS文件和文件夹的判断
    @Test
    public void testListStatus() throws IOException {
//  判断是目录还是文件
        FileStatus[] listStatus = fs.listStatus(new Path("/"));
        for (FileStatus Status : listStatus) {
            if (Status.isDirectory()) {
                System.out.println("目录:"+Status.getPath().getName());
            }else{
                System.out.println("文件:"+Status.getPath().getName());
            }
        }

    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值