JAVA(maven + IDEA)操作HDFS

一. maven在Windows中的安装配置

① 把apache-maven-3.6.3解压到D盘

② 修改conf目录下的settings.xml

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>H:\Maven_Program</localRepository>

settings 表示maven自动下载的链接,默认是国网的网站,下载很慢,改为国内的镜像网站要好很多

localRepository 表示maven下载的包的存放位置

③ 添加环境变量

M2_HOME=D:\apache-maven-3.6.3

PATH里添加 %M2_HOME%\bin

④ 在IDEA里编辑Maven位置

二.JAVA操作HDFS

① 引入包

    <dependencies>
        <!-- hadoop的依赖 -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.2.0</version>
        </dependency>

        <!-- log后缀的依赖 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.30</version>
        </dependency>
    </dependencies>

② 上代码

package com.imooc.hdfs;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


/**
 * Java 代码操作HDFS
 * 文件操作:上传文件,下载文件,删除文件
 *
 */
public class HdfsOp {
    public static String serverIP = "192.168.247.5" ;
    public static String serverPort = "9000" ;

    public  static void main(String[] args) throws Exception {
        String windowsFile = "C:\\Users\\Me\\Desktop\\user.txt" ;
        String hdfsFile = "/user.txt" ;
        //上传文件
        //1: 测试本地文件不存在   2.测试HDFS文件存在   3.测试正常
        PutFile(windowsFile,hdfsFile);

        //下载文件
        //1: 测试本地文件存在   2.测试HDFS文件不存在   3.测试正常
        //GetFile(windowsFile, hdfsFile);

        //删除文件
        //1. 测试HDFS文件不存在  2.测试DHFS文件存在
        //DeleteFile( hdfsFile);
    }

    /**
     * 删除HDFS文件
     */
    private static void DeleteFile(String hdfsFile) throws IOException {
        //创建一个配置对象
        Configuration conf = new Configuration();
        String confString = "hdfs://" + serverIP + ":" + serverPort ;
        //core-site.xml 里面的内容
        conf.set("fs.defaultFS", confString);
        //获取操作HDFS的对象
        FileSystem fileSystem = FileSystem.get(conf);
        //如果要删除目录,第二个参数应设置为true,表示允许递归删除
        boolean deleteFlag = fileSystem.delete(new Path(hdfsFile),true);
        if(deleteFlag) {
            System.out.println("删除成功!");
        }
        else{
            System.out.println("删除失败!");
        }
    }

    /**
     * 从Windws上下载HDFS文件
     */
    private static void GetFile(String windowsFile, String hdfsFile) throws IOException {
        //创建一个配置对象
        Configuration conf = new Configuration();
        String confString = "hdfs://" + serverIP + ":" + serverPort ;
        //core-site.xml 里面的内容
        conf.set("fs.defaultFS", confString);
        //获取操作HDFS的对象
        FileSystem fileSystem = FileSystem.get(conf);
        //判断HDFS是否存在,如果不存在则抛出异常
        if (!fileSystem.exists(new Path(hdfsFile))) {
            // 文件不存在
            throw new RuntimeException("HDFS文件不存在!<错误来自:HdfsOP.GetFile函数>");
        }
        File file = new File(windowsFile);
        //判断windowsfile是否存在,如果存在删除它
        if(file.exists()) {
            // 文件存在,删除
            file.delete();
        }
        //获取HDFS文件系统中的输入流
        FSDataInputStream fis = fileSystem.open(new Path(hdfsFile));
        //获取本地文件输出流
        FileOutputStream fos = new FileOutputStream(windowsFile);
        IOUtils.copyBytes(fis,fos,1024,true);
    }

    /**
     * 从Windows上传HDFS文件
     */
    private static void PutFile(String inputFile,String hdfsFile) throws IOException {
        //创建一个配置对象
        Configuration conf = new Configuration();
        String confString = "hdfs://" + serverIP + ":" + serverPort ;
        //core-site.xml 里面的内容
        conf.set("fs.defaultFS", confString);
        //获取操作HDFS的对象
        FileSystem fileSystem = FileSystem.get(conf);
        //首先判断本地文件是否存在
        File file = new File(inputFile);
        if(!file.exists()) {
            // 文件不存在
            throw new RuntimeException("Windows文件不存在!<错误来自:HdfsOP.PutFile函数>");
        }
        //判断HDFS是否存在,如果存在则删除它
        if (fileSystem.exists(new Path(hdfsFile))) {
            //调用类自身方法删除已存在文件
            fileSystem.delete(new Path(hdfsFile),true);
        }
        //开始上传文件
        //获取本地文件的输入流
        FileInputStream fis = new FileInputStream(inputFile) ;
        //获取HDFS的输出流
        FSDataOutputStream fos = fileSystem.create(new Path(hdfsFile));
        //通过Hadoop IO工具类把本地文件流拷贝到 HDFS文件系统里去
        IOUtils.copyBytes(fis,fos,1024,true);
    }

    public void setServerIP(String ip){
        this.serverIP = ip ;

    }
    public void setServerPort(String port){
        this.serverPort = port ;

    }
    public String getServerIP(String ip){
        return this.serverIP;

    }
    public String getServerPort(String port){
        return this.serverPort;

    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值