java代码实现hadoop的HDFS连接操作-编写API

步骤一:在虚拟机上安装好hadoop并启动,在本地Windows配置好本地hadoop插件。(篇幅过长略可自行查询有关操作)。

步骤二:启动IDEA新建Maven工程。配置pom.xml文件(导入相关依赖)具体如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.qiang.hdfs</groupId>
    <artifactId>HdfsClient</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.3</version>
        </dependency>
    </dependencies>

</project>

步骤三:编写java代码如下:

package com.qiang.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;


public class HdfsClientTest {
    private FileSystem fs;

    @Before
    public void init() throws IOException, InterruptedException {
        //HDFS访问路径
        URI uri = URI.create("hdfs://hadoop1:9000");
        //conf配置对象
        Configuration conf = new Configuration();
        //conf.set("dfs.replication","1");
        //操作用户
        String user="root";
        //获取HDFS的客户端连接对象(文件系统对象)
        fs= FileSystem.get(uri, conf, user);
    }


    @After
    public void close() throws IOException {
    fs.close();
    }

    //上传文件
    @Test
    public void testCopyFromLocal() throws IOException {
        fs.copyFromLocalFile(false,true,
                new Path("D:\\a.txt"),
                new Path("/wen"));
    }
    //下载文件
    @Test
    public void testCopyToLocal() throws IOException {
        fs.copyToLocalFile(false,
                new Path("/wen/a.txt"),
                new Path("C:\\Users\\23996\\Desktop\\新建文件夹 (2)"),
                true);
    }
    //删除文件和目录
    @Test
    public void testDelete() throws IOException {
        fs.delete(new Path("/wen/a.txt"),
                true);
    }
    //移动文件或更名
    @Test
    public void testRename() throws IOException {
        fs.rename(new Path("/user/wen/wordcount.txt"),
                new Path("/user/"));
    }
    //查看文件
    @Test
    public void testListFiles() throws IOException {
        RemoteIterator<LocatedFileStatus> locatedFile =
                fs.listFiles(new Path("/"), true);
        while (locatedFile.hasNext()){
            LocatedFileStatus fileStatus = locatedFile.next();
            System.out.println("文件名:" + fileStatus.getPath().getName());
            System.out.println("块大小:" + fileStatus.getBlockSize());
            System.out.println("副本数:" + fileStatus.getReplication());
            System.out.println("权限信息:" + fileStatus.getPermission());
        }
    }
    //判断是文件还是文件夹
    @Test
    public void testListStatus() throws IOException {
        FileStatus[] fileStatuses = fs.listStatus(new Path("/user"));
        for (FileStatus status : fileStatuses){
            if (status.isDirectory()){
                System.out.println("文件夹:" + status);
            }
            else {
                System.out.println("文件:" + status);
            }
        }
    }
}

以上仅供初学者参考:不喜勿喷!!!


版权声明:本文为m0_62642719原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。