IntelliJ IDEA快速搭建Hadoop开发环境

发布于:2025-07-02 ⋅ 阅读:(24) ⋅ 点赞:(0)

HDFS Api

在这之前客户端需要下个idea软件 IntelliJ IDEA | 其他版本https://www.jetbrains.com/zh-cn/idea/download/other.html

idea有两个版本一个 为社区版本

这图如下为专业版本

安装社区版足矣,如需专业版本也可以版本自由选择 

创建一个项目


选择Maven 项目jdk版本要1.8+

然后点击Next

然后需要点击Finish

项目图例 1

然后我们配置一下这个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>org.example</groupId>
    <artifactId>HadoopDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>

    <!--hadoop基础依赖 版本为3.1.4-->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>3.1.4</version>
    </dependency>
    <!--添加hadoop的HDFS依赖-->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>3.1.4</version>
    </dependency>
    <!--添加hadoop的Client依赖-->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>3.1.4</version>
    </dependency>
    <!--Junit依赖-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
                <!--编写mapreduce程序的核心依赖库-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>3.1.4</version>
        </dependency>

    </dependencies>
</project>

首次下载可能比较慢

可以在本地配置maven环境可参考往期发布内容 如何在 IntelliJ IDEA 中配置 Maven 项目并使用 Java 8_idea配置java8-CSDN博客https://blog.csdn.net/qq_57629629/article/details/143734290?spm=1001.2014.3001.5501

在项目图例 1中我们点击java右击新建包

输入你的包名 我这选择包名 是cn.itcast.hdfsdemo

然后在cn.itcast.hdfsdemo新建类  我这边类名是HDFS_Test

package cn.itcast.hdfsdemo;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.*;

import org.junit.Before;

import org.junit.Test;

import java.io.IOException;


/**

 * @author 小周

 */

public class HDFS_Test {

//    private FileSystem fs;

    FileSystem fs=null;

    @Before

    //初始化

    public void init() throws IOException {

        //固定方法 获取获取客户端对象构建参数对象

        // 指定HDFS配置信息

        Configuration conf = new Configuration();

        // 指定HDFS中NameNode节点的通信地址,连接HDFS

        conf.set("fs.defaultFS", "hdfs://master:8020");

        // 指定具有操作HDFS权限的用户root

        System.setProperty("HADOOP_USER_NAME", "root");

        // 调用FileSystem类的get方法获取conf对象指定的配置信息,并创建HDFS的对象fs

        fs = FileSystem.get(conf);

        System.out.println("HDFS客户端初始化成功");

    }



    @Test  //在Junit单元测试框架方法

    public void testAddFileToHDFS() throws Exception {

        // 本地文件系统上传的文件

        Path src = new Path("I:\\HadoopDemo\\upload\\test.txt");

            //指定将文件上传到HDFS的目录

        Path dst = new Path("/testFile");

            //put   对象 上传 实现上传文件功能  如果目录被创建 会重命名

        fs.copyFromLocalFile(src, dst);

        System.out.println("文件上传到HDFS成功");

        //关闭资源

        fs.close();

    }



    @Test

    public void testDownloadFileToLocal() throws Exception {

        //get方法

        // hdfs路径

        fs.copyToLocalFile(new Path("/testFile/test.txt"),

                //目录路径 windows路径

                new Path("I:\\HadoopDemo\\download"));

        System.out.println("文件从HDFS下载到本地成功");

        //释放资源

        fs.close();

    }


    @Test

    public void testMkdirAndDeleteAndRename() throws IOException {

        // 在hdfs 创建目录

        fs.mkdirs(new Path("/a/b/c"));

        //Path pa1=new Path("/a/b/c"); fs.mkdirs(pa1);

        System.out.println("在HDFS创建目录成功");

        fs.mkdirs(new Path("/a2/b2/c2"));

        System.out.println("创建目录成功");

         //重命名目录

        fs.rename(new Path("/a"), new Path("/a3"));

        System.out.println("重命名成功");

         //递归删除目录

        fs.delete(new Path("/a2/b2"), true);

        System.out.println("删除成功");

        fs.close();

    }



    @Test          //查看文件中的目录信息

    public void  testListFiles() throws IOException {

        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/data"),true );

        while (listFiles.hasNext()) {

            //fs.listFiles方法,返回LocatedFileStatus的迭代器

            LocatedFileStatus fileStatus =listFiles.next();

            //LocaledFileStatus只能列出文件

            System.out.println("文件名:"+fileStatus.getPath().getName() + ",长度为:"+fileStatus.getLen());

            System.out.println("文件的副本数"+fileStatus.getReplication());

            System.out.println("文件的修改时间"+fileStatus.getModificationTime());

            System.out.println("文件的权限"+fileStatus.getPermission());

            System.out.println("文件的大小"+fileStatus.getLen()+"字节");

            System.out.println("文件的主机地址"+fileStatus.getPath());

            BlockLocation[]blocks = fileStatus.getBlockLocations();

            //getBlockLocations()方法获取文件的块位置信息,

            // 将其存储在一个BlockLocation数组中。块位置信息包括块所在的数据节点

            for (BlockLocation bl:blocks){

                String[]hosts = bl.getHosts();

                System.out.println("文件的Block所在虚拟机的主机名");

                for (String host: hosts) {

                    System.out.println(host);

                }

                System.out.println("-----------------------------");

            }

        }

    }

}