HDFS Java接口操作

x33g5p2x  于2021-03-14 发布在 HDFS  
字(2.7k)|赞(0)|评价(0)|浏览(179)

一、环境准备

本示例使用IDEA开发工具进行演示,也可以选择使用Eclipse

[info] (1)打开IDEA开发工具,新建一个Java项目(命名为HadoopDemo)

统一建立以下项目包目录

创建项目方式

:-:

:-:

:-:

:-:

:-:

[info] (2)Hadoop的jar包选择

  • (1)hadoop-2.7.3/share/hadoop/common下面的三个jar包,以及hadoop-2.7.3/share/hadoop/common/lib下的所有jar包

:-:

  • (2)hadoop-2.4.1/share/hadoop/hdfs下面的3个jar包

:-:

  • (3)把所有jar都先拷贝在一个文件夹里,然后再IDEA里面一次性加载jar包

:-:

:-:

:-:

:-:

:-:

[info] (3)创建一个Java类

:-:

:-:

:-:

[info] (4)使用Junit Test 来进行代码调试,IDEA默认集成Junit测试插件

(1)把源代码目录标记成测试类目录

:-:

[info] (5)实验代码

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;


/**
 * @author Macx
 * @since 2020/4/6 23:04
 */
public class HDFSDemo {
    private static int BUFFER_SIZE = 4096;
    FileSystem fileSystem = null;

    /**
     * 定义一个通用的初始化hdfs文件系统的方法
     *
     * @throws URISyntaxException
     * @throws IOException
     */
    @Before
    public void init() throws URISyntaxException, IOException {
        System.out.println("准备获取hdfs文件系统......");
        //获取hdfs文件系统
        URI uri = new URI("hdfs://192.168.3.100:9000");
        Configuration configuration = new Configuration();
        fileSystem = FileSystem.get(uri, configuration);
        System.out.println("成功获取hdfs文件系统......");
    }

    /**
     * 本地上传至HDFS
     *
     * @throws IOException
     */
    @Test
    public void testUpload() throws IOException {
        System.out.println("准备本地文件上传至HDFS......");
        //指定输出:HDFS
        FSDataOutputStream out = fileSystem.create(new Path("/testHdfs.txt"));
        //指定输入:当前系统
        FileInputStream in = new FileInputStream(new File("/Users/Macx/Desktop/testHdfs.txt"));
        //执行拷贝
        IOUtils.copyBytes(in, out, BUFFER_SIZE);
        System.out.println("成功将本地文件上传至HDFS......");
    }

    /**
     * HDFS文件下载至本地
     *
     * @throws IOException
     */
    @Test
    public void testDownload() throws IOException {
        System.out.println("准备HDFS文件下载至本地......");
        //下载文件
        FSDataInputStream in = fileSystem.open(new Path("/testHdfs.txt"));
        FileOutputStream out = new FileOutputStream(new File("/Users/Macx/Desktop/demo/download/testHdfs.txt"));
        IOUtils.copyBytes(in, out, BUFFER_SIZE);
        System.out.println("成功将HDFS文件下载至本地......");
    }

    /**
     * 文件列表查看
     * @throws IOException
     */
    @Test
    public void listFiles() throws IOException {
        Path path = new Path("/");
        FileStatus[] fileStatuses = fileSystem.listStatus(path);
        System.out.println("展示HDFS目录的所有文件:");
        for (int i = 0; i < fileStatuses.length; i++) {
            System.out.println(fileStatuses[i].getPath().toString());
        }
    }

    /**
     * 文件删除
     *
     * @throws IOException
     */
    @Test
    public void deleteFile() throws IOException {
        Path path = new Path("/testHdfs.txt");
        boolean isExists = fileSystem.exists(path);
        if (isExists) {
            boolean result = fileSystem.delete(path, true);
            System.out.println("HDFS的文件是否已经删除:" + result);
        } else {
            System.out.println("HDFS的文件是否存在:" + isExists);
        }
    }

}

相关文章

热门文章

更多