大数据学习之javaAPI远程操作hadoop

前言:

本篇文章针对于2020秋季学期的复习操作,一是对该学期的巩固,二是让老师知道他的努力没有白费,同时,在此感谢徐老师对我们的精心教导…

本文所需材料

IntelliJ IDEA
官网→https://www.jetbrains.com/idea/
我的网盘→https://pan.baidu.com/s/1LPU4H0OcmH8NELdCwWOtIA
→t123

实操

前提:
打开hadoop集群
打开IDEA
①创建maven工程之javaAPI操作hadoop
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的setting.xml里面可以定制成阿里云的,国内的服务器嘛,下载更快!
接着会下载maven项目的‘架子’
好了之后是这样的
在这里插入图片描述
接下来导入我们需要的jar包
在pom文件添加

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <!--    xml配置文件中, hdfs.version称之为“标签”, 2.7.6 称之为“标签体” →-->
    <hdfs.version>2.7.6</hdfs.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- 导入hdfs api所需要的jar包对应的依赖-->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>${hdfs.version}</version>
    </dependency>

    <!--hadoop-client hadoop的客户端,借助该模块下的api,操作远程的hadoop分布式文件系统  -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <!--  $:el表达式,expression language的缩写  读取properties节点下指定的子节点的标签体的值-->
      <version>${hdfs.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <version>${hdfs.version}</version>
    </dependency>

  </dependencies>

添加好了我们刷新它会自动从远程仓库下载依赖包jar到本地
或者点击download sources and documentation也可以
在这里插入图片描述
出现以下依赖包且没有报红说明成功了!!!
在这里插入图片描述
配置log4j
resources
log4j.properties
在这里插入图片描述

log4j.rootLogger=WARN,stdout,file,R

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n


log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = ./logs/log-infos.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=./logs/log-infos.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

创建测试Java文件
在这里插入图片描述

查看

/**
 * Copyright (C), 2021-01-23
 *
 * @author 田信坤
 * Author:   TianXinKun
 * Date:     2021/1/23 19:35
 * Description: 测试JavaAPI操作远程hadoop集群
 */
package org.example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

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

/**
 * <功能简要> <br>
 * <测试JavaAPI操作远程hadoop集群>
 *
 * @Author TianXinKun
 * @createTime 2021/1/23 19:35
 * This program is protected by copyright laws. <br/>
 * @version : 1.0
 */
public class TestHadoop {
    /**
     * FileSystem就是对HDFS的抽取和封装
     */
    private FileSystem fileSystem;

    /**
     * 对hdfs核心配置文件的抽取和封装,如:cores-site.xml,hdfs-site.xml
     */
    Configuration conf;

    /**
     * 进行初始化
     */
    @Before
    public void init() {
        //对全局变量进行初始化
        conf = new Configuration();
        try {
            //URI: uniform resource indentifer, 统一资源标识符,如:hdfs,http,ftp等等协议所标注的远程资源
            //URL: uniform resource locator, 统一资源定位符,一般指的是http所标识的网络资源,如:https://fanyi.baidu.com/#en/zh/artifact
            //URL是URI的子集
            URI uri = new URI("hdfs://Mymaster:8020/");

            fileSystem = FileSystem.get(uri,conf);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

    }

    /**
     * 测试环境→ 用来验证java客户端能够正常连接远程的hadoop分布式集群
     *
     * [root@master ~]# hdfs dfs -cat /input/a.txt
     * hello you
     *
     * hello kitty
     *
     * are you ok
     * 最近可好
     * 感觉如何?
     * [root@master ~]#
     */
    @Test
    public void testEnv() {
        System.out.println("fileSystem = " + fileSystem);

        try (FSDataInputStream in = fileSystem.open(new Path("hdfs://Mymaster:8020/input/Test.txt"))) {
            byte[] bytes = new byte[1024];
            int len = -1;
            while ((len = in.read(bytes)) != -1) {
                String content = new String(bytes, 0, len);
                System.out.print(content);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 进行资源释放
     */
    @After
    public void releaseResource() {
        if (fileSystem != null) {
            try {
                fileSystem.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

进程确认
在这里插入图片描述
资源确定
在这里插入图片描述
在测试类中执行
在这里插入图片描述
结果正确,maven项目创建成功!!

hdfs文件移动+重命名

/**
 * Copyright (C), 2023/3/27 9:55
 *
 * @author 田信坤
 * Author:   TianXinKun
 * Date:     2023/3/27 9:55
 */

package org.example;

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

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

/**
 * @Description hdfs文件移动+重命名
 * @createTime 2023/3/27 9:55 
 *             This program is protected by copyright laws.
 * @version : 1.0
 *@Author TianXinKun
 */
public class HdfsReName {
    /**
     * FileSystem就是对HDFS的抽取和封装
     */
    private FileSystem fileSystem;

    /**
     * 对hdfs核心配置文件的抽取和封装,如:cores-site.xml,hdfs-site.xml
     */
    Configuration conf;

    /**
     * 进行初始化
     */
    @Before
    public void init() {
        //对全局变量进行初始化
        conf = new Configuration();
        try {
            //URI: uniform resource indentifer, 统一资源标识符,如:hdfs,http,ftp等等协议所标注的远程资源
            //URL: uniform resource locator, 统一资源定位符,一般指的是http所标识的网络资源,如:https://fanyi.baidu.com/#en/zh/artifact
            //URL是URI的子集
            URI uri = new URI("hdfs://hadoop100:8020/");

            fileSystem = FileSystem.get(uri,conf);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

    }

    @Test
    public void testGet() {
        Path renamepath = new Path("hdfs://hadoop100:8020/input02/data02");
        Path hdfspath = new Path("hdfs://hadoop100:8020/input/data");
        try {
            fileSystem.rename(hdfspath,renamepath);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


    /**
     * 进行资源释放
     */
    @After
    public void releaseResource() {
        if (fileSystem != null) {
            try {
                fileSystem.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

文件上传

/**
 * Copyright (C), 2023/3/27 9:19
 *
 * @author 田信坤
 * Author:   TianXinKun
 * Date:     2023/3/27 9:19
 */

package org.example;

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

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

/**
 * @Description hdfs 上传
 * @createTime 2023/3/27 9:19 
 *             This program is protected by copyright laws.
 * @version : 1.0
 *@Author TianXinKun
 */
public class HdfsPut {
    /**
     * FileSystem就是对HDFS的抽取和封装
     */
    private FileSystem fileSystem;

    /**
     * 对hdfs核心配置文件的抽取和封装,如:cores-site.xml,hdfs-site.xml
     */
    Configuration conf;

    /**
     * 进行初始化
     */
    @Before
    public void init() {
        //对全局变量进行初始化
        conf = new Configuration();
        try {
            //URI: uniform resource indentifer, 统一资源标识符,如:hdfs,http,ftp等等协议所标注的远程资源
            //URL: uniform resource locator, 统一资源定位符,一般指的是http所标识的网络资源,如:https://fanyi.baidu.com/#en/zh/artifact
            //URL是URI的子集
            URI uri = new URI("hdfs://hadoop100:8020/");

            fileSystem = FileSystem.get(uri,conf);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

    }
    /**
     * 上传本地文件到hdfs
     *
     * [root@master ~]# hdfs dfs -put /opt/input/a.txt
     */
    @Test
    public void testEnv() {
        Path localfeilpath = new Path("G:\\mavenproject\\Myhadoop\\data");
        Path hdfspath = new Path("hdfs://hadoop100:8020/input/");
        try {
            fileSystem.copyFromLocalFile(localfeilpath,hdfspath);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


    /**
     * 进行资源释放
     */
    @After
    public void releaseResource() {
        if (fileSystem != null) {
            try {
                fileSystem.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

文件下载

/**
 * Copyright (C), 2023/3/27 9:46
 *
 * @author 田信坤
 * Author:   TianXinKun
 * Date:     2023/3/27 9:46
 */

package org.example;

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

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

/**
 * @Description 下载hdfs文件
 * @createTime 2023/3/27 9:46 
 *             This program is protected by copyright laws.
 * @version : 1.0
 *@Author TianXinKun
 */
public class HdfsGet {
    /**
     * FileSystem就是对HDFS的抽取和封装
     */
    private FileSystem fileSystem;

    /**
     * 对hdfs核心配置文件的抽取和封装,如:cores-site.xml,hdfs-site.xml
     */
    Configuration conf;

    /**
     * 进行初始化
     */
    @Before
    public void init() {
        //对全局变量进行初始化
        conf = new Configuration();
        try {
            //URI: uniform resource indentifer, 统一资源标识符,如:hdfs,http,ftp等等协议所标注的远程资源
            //URL: uniform resource locator, 统一资源定位符,一般指的是http所标识的网络资源,如:https://fanyi.baidu.com/#en/zh/artifact
            //URL是URI的子集
            URI uri = new URI("hdfs://hadoop100:8020/");

            fileSystem = FileSystem.get(uri,conf);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

    }

    /**
     * 测试环境→ 用来验证java客户端能够正常连接远程的hadoop分布式集群
     *
     * [root@master ~]# hdfs dfs -get /input/test.txt
     */
    @Test
    public void testGet() {
        Path localfeilpath = new Path("G:\\mavenproject\\Myhadoop\\get");
        Path hdfspath = new Path("hdfs://hadoop100:8020/input/test.txt");
        try {
            fileSystem.copyToLocalFile(false,hdfspath,localfeilpath,true);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


    /**
     * 进行资源释放
     */
    @After
    public void releaseResource() {
        if (fileSystem != null) {
            try {
                fileSystem.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

删除文件

/**
 * Copyright (C), 2023/3/27 10:10
 *
 * @author 田信坤
 * Author:   TianXinKun
 * Date:     2023/3/27 10:10
 */

package org.example;

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

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

/**
 * @Description 删除文件
 * @createTime 2023/3/27 10:10 
 *             This program is protected by copyright laws.
 * @version : 1.0
 *@Author TianXinKun
 */
public class HdfsDelete {
    /**
     * FileSystem就是对HDFS的抽取和封装
     */
    private FileSystem fileSystem;

    /**
     * 对hdfs核心配置文件的抽取和封装,如:cores-site.xml,hdfs-site.xml
     */
    Configuration conf;

    /**
     * 进行初始化
     */
    @Before
    public void init() {
        //对全局变量进行初始化
        conf = new Configuration();
        try {
            //URI: uniform resource indentifer, 统一资源标识符,如:hdfs,http,ftp等等协议所标注的远程资源
            //URL: uniform resource locator, 统一资源定位符,一般指的是http所标识的网络资源,如:https://fanyi.baidu.com/#en/zh/artifact
            //URL是URI的子集
            URI uri = new URI("hdfs://hadoop100:8020/");

            fileSystem = FileSystem.get(uri,conf);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

    }

    @Test
    public void testGet() {
        Path namepath = new Path("hdfs://hadoop100:8020/input02/data02");
        try {
            fileSystem.delete(namepath,true);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


    /**
     * 进行资源释放
     */
    @After
    public void releaseResource() {
        if (fileSystem != null) {
            try {
                fileSystem.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值