用JAVA API实现HDFS常用shell命令的功能(新建文件夹,上传文件,下载文件,判断文件是否存在)

本文详细介绍了如何使用Java API来实现HDFS上的常见shell命令,包括创建文件夹、上传文件、下载文件以及检查文件是否存在,为HDFS操作提供了编程接口的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 新建文件夹
package hdfs.files;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;

public class HDFSMKdir {
    public static void main(String[] args) throws IOException {
        //设置root权限
        System.setProperty("HADOOP_USER_NAME", "root");
        //创建HDFS连接对象client
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://yy001:9000");
        FileSystem client = FileSystem.get(conf);
        //在HDFS的根目录下创建aadir
        client.mkdirs(new Path("/aadir"));
        //关闭连接对象
        client.close();
        //输出"successful!"
        System.out.println("successfully!");
    }
}

  • 上传文件
package hdfs.files;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class HDFSUpload {
    //声明输入流、输出流
    private static InputStream input;
    private static OutputStream output;

    public static void main(String[] args) throws IOException {
        //设置root权限
        System.setProperty("HADOOP_USER_NAME", "root");
        //创建HDFS连接对象client
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://yy001:9000");
        FileSystem client = FileSystem.get(conf);
        //创建本地文件的输入流
        input = new FileInputStream("D:\\aa.txt");
        //创建HDFS的输出流
        output = client.create(new Path("/a.txt"));
        //写文件到HDFS
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = input.read(buffer)) != -1) {
            output.write(buffer, 0, len);
        }
        //防止输出数据不完整
        output.flush();
        //使用工具类IOUtils上传或下载
        //IOUtils.copy(input, output);
        //关闭输入输出流
        input.close();
        output.close();
        System.out.println("成功!");
    }
}
  • 下载文件
package hdfs.files;

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;

import java.io.*;

public class HDFSDownload {
    //声明输入流、输出流
    private static InputStream input;
    private static OutputStream output;

    public static void main(String[] args) throws IOException {
        //设置root权限
        System.setProperty("HADOOP_USER_NAME", "root");
        //创建HDFS连接对象client
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://yy001:9000");
        FileSystem client = FileSystem.get(conf);
        //创建本地文件的输出流
        output = new FileOutputStream("d:\\cccout.txt");
        //创建HDFS的输入流
        input = client.open(new Path("/aadir/aaout.txt"));
        //写文件到HDFS
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = input.read(buffer)) != -1) {
            output.write(buffer, 0, len);
        }
        //防止输出数据不完整
        output.flush();
        //使用工具类IOUtils上传或下载
        //IOUtils.copy(input, output);
        //关闭输入输出流
        input.close();
        output.close();
        System.out.println("成功!");
    }
}


  • 判断文件是否存在
package hdfs.files;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
public class HDFSFileIfExist {
    public static void main(String[] args) throws IOException {
        //设置root权限
        System.setProperty("HADOOP_USER_NAME", "root");
        //创建HDFS连接对象client
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://yy001:9000");
        FileSystem client = FileSystem.get(conf);
        //声明文件对象
        String fileName = "/aadir/aaout.txt";
        //判断文件是否存在
        if (client.exists(new Path(fileName))) {
            System.out.println("文件存在!");
        } else {
            System.out.println("文件不存在!");
        }
    }
    
}
在Ubuntu系统上配置Hadoop环境并操作HDFS文件,是学习大数据技术不可或缺的一个环节。首先,你需要按照《厦门大学林子雨:HDFS操作实验详解及教程》中的指导进行环境搭建,确保你的系统满足Hadoop运行的基本要求,例如安装Ubuntu 16.04或18.04版本,配置好Java开发环境以及安装Hadoop 3.1.3版本。 参考资源链接:[厦门大学林子雨:HDFS操作实验详解及教程](https://wenku.youkuaiyun.com/doc/1oc4iz2msv?spm=1055.2569.3001.10343) 接下来,通过Shell命令,你可以进行文件上传下载、查看权限管理等操作。例如,使用`hdfs dfs -put localfile /path/hdfsfile`命令可以上传本地文件HDFS;`hdfs dfs -get /path/hdfsfile localfile`命令则用于下载HDFS上的文件到本地系统。此外,检查文件是否存在可以使用`hdfs dfs -test -e /path/hdfsfile`命令,而删除HDFS上的文件则通过`hdfs dfs -rm /path/hdfsfile`命令来完成。 除了Shell命令使用Java API操作HDFS是另一种常用的方法,特别是在进行复杂的数据处理任务时。你可以利用Hadoop的Java接口,比如`org.apache.hadoop.conf.Configuration`来设置配置,以及`org.apache.hadoop.fs.FileSystem`来进行文件系统的操作。例如,创建一个FileSystem实例并检查一个目录是否存在可以这样实现: ```java Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path path = new Path( 参考资源链接:[厦门大学林子雨:HDFS操作实验详解及教程](https://wenku.youkuaiyun.com/doc/1oc4iz2msv?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值