Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学

如果还没有配置好Hadoop的可以点击链接查看如何配置

各大技术基础教学、实战开发教学(正在持续更新中······)

首先,启动Hadoop集群服务

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第1张图片

然后在浏览器访问Hadoop,点击Browse the file system 查看HDFS文件系统的目录

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第2张图片

 可以看到目前HDFS文件系统的目录是空的,没有任何的文件和文件夹,下面开始今天的API操作

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第3张图片

 一、创建Maven项目

首先,打开IDEA,点击新建项目,在左侧中选择Maven,然后直接点击next

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第4张图片

 设置项目名称,点击Finish 

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第5张图片

点击右下角的 Enable Auto-Import(自动导入Jar包文件),一个空的Maven项目就创建完毕啦

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第6张图片

 二、导入依赖

首先编辑pom.xml(Maven项目的核心文件)文件,添加如下内容,导入依赖(所需jar包)


        
        
            org.apache.hadoop
            hadoop-common
            2.7.4
        
        
            org.apache.hadoop
            hadoop-hdfs
            2.7.4
        
        
            org.apache.hadoop
            hadoop-client
            2.7.4
        

        
        
            junit
            junit
            4.12
        
    

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第7张图片

IDEA会自动保存文件并且导入依赖包,点击右侧的Maven,展开Dependencies,可以看到四个依赖包以及导入进来了

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第8张图片

 三、初始化

我们通过junit来进行测试,首先创建一个类,添加如下内容

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第9张图片

public class JavaAPI {
    // 可操作HDFS文件系统的对象
    FileSystem hdfs = null;

    // 测试方法执行前执行,用于初始化操作,避免频繁初始化
    @Before
    public void init() throws IOException {
        // 构造一个配置参数对象,设置一个参数:要访问的HDFS的URI
        Configuration conf = new Configuration();
        // 指定使用HDFS访问
        conf.set("fs.defaultFS","hdfs://hadoop01:9000");
        // 进行客户端身份的设置(root为虚拟机的用户名,hadoop集群节点的其中一个都可以)
        System.setProperty("HADOOP_USER_NAME","root");
        // 通过FileSystem的静态get()方法获取HDFS文件系统客户端对象
        hdfs = FileSystem.get(conf);
    }

    // 测试方法执行后执行,用于处理结尾的操作,关闭对象
    @After
    public void close() throws IOException {
        // 关闭文件操作对象
        hdfs.close();
    }
}

注意,上面代码中的参数"hdfs://hadoop01:9000"是hadoop配置文件中core-site.xml的配置信息,不记得的可以翻看我以往的hadoop配置文章

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第10张图片

四、HDFS代码操作

(1)上传文件到HDFS文件系统

@Test
public void testUploadFileToHDFS() throws IOException {
    // 待上传的文件路径(windows)
    Path src = new Path("F:/HDFS/test.txt");
    // 上传之后存放的路径(HDFS)
    Path dst = new Path("/test.txt");
    // 上传
    hdfs.copyFromLocalFile(src,dst);
    System.out.println("上传成功");
}

我在F盘的HDFS文件夹下面创建了个test.txt文本

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第11张图片

 运行一下测试方法,文件上传成功了

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第12张图片

 (2)从HDFS下载文件到本地

@Test
public void testDownFileToLocal() throws IOException {
    // 待下载的路径(HDFS)
    Path src = new Path("/test.txt");
    // 下载成功之后存放的路径(windows)
    Path dst = new Path("F:/HDFS/test1.txt");
    // 下载
    hdfs.copyToLocalFile(false,src,dst,true);
    ystem.out.println("下载成功");
}

运行一下,下载成功

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第13张图片(3)创建目录

@Test
public void testMkdirFile() throws IOException {
    // 待创建目录路径
    Path src = new Path("/HDFS");
    // 创建目录
    hdfs.mkdirs(src);
    System.out.println("创建成功");
}

运行测试方法,创建成功

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第14张图片

(4)重命名

@Test
public void testRenameFile() throws IOException {
    // 重命名之前的名字
    Path src = new Path("/HDFS");
    // 重命名之后的名字
    Path dst = new Path("/HDFS1");
    // 重命名
    hdfs.rename(src,dst);
    System.out.println("重命名成功");
}

运行测试方法,重命名成功 

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第15张图片

(5)删除目录

@Test
public void testDeleteFile() throws IOException {
    // 待删除目录路径(HDFS)
    Path src = new Path("/HDFS1");
    // 删除
    hdfs.delete(src,true);
    System.out.println("删除成功");
}

运行测试方法,成功删除了HDFS1目录 

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第16张图片

(6)查看HDFS目录中的文件信息

为了方便查看,多创建几个文件

@Test
public void testCheckFile() throws IOException {
    // 获取迭代器对象("/"表示获取全部目录下的文件)
    RemoteIterator listFiles = hdfs.listFiles(new Path("/"), true);
    while (listFiles.hasNext()) {
        LocatedFileStatus fileStatus = listFiles.next();
        // 打印当前文件名
        System.out.println("文件名:" + fileStatus.getPath().getName());
        // 打印当前文件块大小
        System.out.println("文件块大小:" + fileStatus.getBlockSize());
        // 打印当前文件权限
        System.out.println("文件权限:" + fileStatus.getPermission());
        // 打印当前文件内容的长度
        System.out.println("文件内容长度:" + fileStatus.getLen());
        // 获取该文件块的信息(包含长度,数据块,DataNodes的信息)
        BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            for (BlockLocation bl : blockLocations) {
            System.out.println("block-length:" + bl.getLength());
            System.out.println("block-offset:" + bl.getOffset());
            // 获取DataNodes的主机名
            String[] hosts = bl.getHosts();
            for (String host : hosts) {
                 System.out.println(host);
            }
        }
        System.out.println("-----------------分割线-----------------");
    }
}

运行测试方法

Hadoop——HDFS文件系统的Java API操作(上传、下载、查看、删除、创建文件)详细教学_第17张图片

你可能感兴趣的