JAVA操作HDFS集群

这篇具有很好参考价值的文章主要介绍了JAVA操作HDFS集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


HDFS安全模式

注意:只有安全模式关闭时,上传下载文件才会生效

java hdfs,hdfs,java,hadoop

如果Safemode is on

执行

hdfs dfsadmin -safemode leave

提交文件

java hdfs,hdfs,java,hadoop

在此可对文件进行操作

创建Maven项目

java hdfs,hdfs,java,hadoop

在pom.xml注入依赖

java hdfs,hdfs,java,hadoop

<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.3</version>
</dependency>

创建两个类

java hdfs,hdfs,java,hadoop

获取hdfs连接对象

在HDFSUTIL创建连接对象,并输出进行测试

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


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

public class HDFSUTILS {
    static FileSystem fileSystem;
   
   //获取HDFS连接对象
    static {
        Configuration conf = new Configuration();
        try {
           fileSystem = FileSystem.get(URI.create("hdfs://192.168.117.128:9000"), conf, "root");                              //参数1是链接参数,2是配置项,3是用户名
            System.out.println(fileSystem);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

//让外部可访问到连接对象
public static FileSystem getFileSystem(){
        return fileSystem;
}

    public static void main(String[] args) {

    }
}

可以看到连接成功

java hdfs,hdfs,java,hadoop

实现各种方法

创建目录

在HDFSAPI创建mkdir方法,并测试是否创建成功

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

import java.io.IOException;

public class HDFSAPI {

    //创建目录
    public static void mkdir(String fileName){
        //获取连接对象
        FileSystem fileSystem = HDFSUTILS.getFileSystem();
        //创建
        try {
            boolean mkdir = fileSystem.mkdirs(new Path(fileName));
            if(mkdir){
                System.out.println("成功");
            }else{
                System.out.println("失败");
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


    public static void main(String[] args) {
        mkdir("/hello world!");     //代表根目录下文件夹
    }
}

输出成功:

java hdfs,hdfs,java,hadoop

库里也有文件

java hdfs,hdfs,java,hadoop

删除

增加方法

//删除
    public static void deletefile(String fileName){
        FileSystem fileSystem = HDFSUTILS.getFileSystem();
        try {
            boolean delete = fileSystem.delete(new Path(fileName), true);
            if (delete){
                System.out.println("删除成功");
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

调用

public static void main(String[] args) {
       // mkdir("/hello world!");
        deletefile("/goodjib");
    }

打印的结果

java hdfs,hdfs,java,hadoop

库:

java hdfs,hdfs,java,hadoop

移动与重命名

可用于移动也可用于重命名

增加方法

//移动目录

    public static void renameFile(String path1, String path2){
        FileSystem fileSystem = HDFSUTILS.getFileSystem();

        try {
            boolean rename = fileSystem.rename(new Path(path1), new Path(path2));
            if (rename){
                System.out.println("修改成功");
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

调用方法进行测试

public static void main(String[] args) {
       // mkdir("/hello world!");
        //deletefile("/goodjib");
        renameFile("/hello world!", "/new world!");
    }

打印的结果

java hdfs,hdfs,java,hadoop

java hdfs,hdfs,java,hadoop

查询

FileStatus:FileStatus对象封装了文件系统中文件和目录的元数据,包括文件的长度、块大小、备份数、修改时间、所有者以及权限等信息。

递归查询:查询当前目录下文件,且查询当前目录文件夹内的文件,层层递归

时间戳:定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。

当前目录查询
//查询当前路径下,不显示当前目录下文件夹里面的内容

    public static void findFiles(String fileName){
        FileSystem fileSystem = HDFSUTILS.getFileSystem();

        try {
            FileStatus[] fileStatus = fileSystem.listStatus(new Path(fileName));

            //遍历
            for (FileStatus fs : fileStatus){
                System.out.println("文件路径:"+fs.getPath());
                System.out.println("文件大小:"+fs.getLen());
                System.out.println("文件副本数:"+fs.getReplication());
                System.out.println("文件上传时间:"+fs.getModificationTime());
                //之后可自行进行转换					System.out.println("***************************************************");
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

成功显示

java hdfs,hdfs,java,hadoop

查询所有目录

此时需要使用迭代器,参考:

海量数据在处理过程中可能占用大量的内存空间,而使用迭代器(Iterator)可以有效地节省内存开销。下面是一些关键原因:

  1. 内存效率:集合(例如列表、集、字典)在内存中存储所有数据。如果数据集非常庞大,一次性将所有数据加载到内存中可能导致内存溢出。相比之下,迭代器每次只会加载并处理一部分数据,这样可以避免将整个数据集一次性加载到内存中。
  2. 延迟计算:迭代器使用惰性计算的方式,只在需要时逐个生成数据项。这对于处理海量数据非常有用,因为它允许你在数据生成的同时进行其他操作,而无需等待整个数据集加载完毕。
  3. 时间效率:当处理大规模数据集时,迭代器可以在每次迭代中只处理当前数据项,而不需要对整个集合进行遍历。这样可以减少不必要的计算时间和遍历开销。
  4. 存储效率:迭代器通常只需要存储单个数据项的引用或状态信息,而不需要为整个数据集分配额外的内存空间。相比之下,集合需要为每个数据项都分配内存,导致额外的存储开销。

需要注意的是,迭代器并不适用于所有场景。如果需要在数据处理过程中进行多次随机访问或需要在不同阶段对数据进行多次遍历,集合可能更适合。此外,使用迭代器也可能增加代码的复杂性,因为你需要手动管理迭代过程和处理迭代器的状态。

增加方法

public static void findAlls(String filePath){
        FileSystem fileSystem = HDFSUTILS.getFileSystem();
        //海量数据用迭代器
        try {
            RemoteIterator<LocatedFileStatus> iterator = fileSystem.listFiles(new Path(filePath), true);

            while(iterator.hasNext()){
                LocatedFileStatus fs = iterator.next();

                System.out.println("文件路径:"+fs.getPath());
                System.out.println("文件大小:"+fs.getLen());
                System.out.println("文件副本数:"+fs.getReplication());
                System.out.println("文件上传时间:"+fs.getModificationTime());
                System.out.println("***************************************************");
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

结果

java hdfs,hdfs,java,hadoop

上传文件

path1是源,path2是目的地址

//上传文件
    public static void upload(String path1, String path2){
        FileSystem fileSystem = HDFSUTILS.getFileSystem();

        try {
            fileSystem.copyFromLocalFile(new Path(path1), new Path(path2));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

调用测试

public static void main(String[] args) {
        upload("C:\\Users\\32600\\Pictures\\紫罗兰永恒花园3.png", "/hei");
    }

可以看到已经上传成功

java hdfs,hdfs,java,hadoop

文件下载

path1是源即HDFS,path2是目标路径

//下载文件
    public static void download(String path1, String path2){
        FileSystem fileSystem = HDFSUTILS.getFileSystem();

        try {
            fileSystem.copyToLocalFile(new Path(path1), new Path(path2));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

调用测试

public static void main(String[] args) {
        download("/hei/R.jpg", "C:\\Users\\32600\\Desktop");
    }

结果:

java hdfs,hdfs,java,hadoop文章来源地址https://www.toymoban.com/news/detail-774684.html

到了这里,关于JAVA操作HDFS集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hadoop——HDFS的Java API操作(文件上传、下载、删除等)

    1、创建Maven项目 2、修改pom.xml文件 3、添加四个配置文件 为避免运行的一些错误,我们将Hadoop的四个重要配置文件添加到resources中 4、创建测试文件JavaAPI 5、初始化 因为对文件的操作我们都需要获取hdfs对象和关闭对象,所以为避免重复编写,将两个操作对立成单独方法,分别

    2024年02月06日
    浏览(69)
  • hadoop调用HDFS java api实现在HDFS上创建文件夹

    目录 一、前期准备 1、Hadoop集群已配置完毕 2、Linux系统安装jdk 3、安装并破解IntelliJ IDEA 二、通过JAVA API操纵HDFS 1.在IDEA中创建项目  2.在hdfs项目的src-main-java路径下创建一个包,然后在包下创建一个java类实现hdfs的文件操作  3.java类的代码 4.对JAVA程序传入参数后运行程序  5

    2024年02月08日
    浏览(74)
  • 使用Hadoop 的 Java API 操纵 HDFS 文件系统

    使用 Java 操作 HDFS 文件系统可以使用其对应的Java API,即对应三个 jar 依赖包: hadoop-common.jar (该文件在 hadoop-2.10.1.tar.gz 压缩包中的 sharehadoopcommon 目录下) hadoop-hdfs.jar (该文件在 hadoop-2.10.1.tar.gz 压缩包中的 sharehadoophdfs 目录下) hadoop-client.jar (该文件在 hadoop-2.10.1.tar.gz 压缩包

    2023年04月25日
    浏览(40)
  • 【Hadoop】-HDFS集群环境部署[2]

    目录 一、VMware虚拟机中部署 1、安装包下载 2、集群规划 3、上传解压 3.1.上传hadoop安装包到node1节点中 3.2.解压缩安装包到/export/server/中 3.3.构建软连接 4、进入hadoop安装包内 4.1Hadoop安装包目录结构 4.2修改配置文件,应用自定义设置 4.2.1.配置workers文件 4.2.2.配置hadoop-env.sh文件

    2024年04月27日
    浏览(50)
  • Hadoop 3.1.1 HDFS 集群部署

    JDK 1.8.0_133 ZooKeeper 3.5.5:https://blog.csdn.net/weixin_42598916/article/details/135726572?spm=1001.2014.3001.5502 每个节点都需进行如下优化 每个节点都需创建如下路径 每个节点都需配置如下环境变量 以便于后续启停及使用 HDFS 相关脚本和命令 将 /data/service/hadoop 分发至所有节点 HDFS Web UI:10.1

    2024年02月21日
    浏览(45)
  • 0201hdfs集群部署-hadoop-大数据学习

    下面我们配置下单namenode节点hadoop集群,使用vmware虚拟机环境搭建。vmware虚拟机的配置,在下面链接2有,或者自行查阅文档。hadoop安装包可到官网下载,当前相关软件环境如下: 软件 版本 说明 hadoop 3.3.4 jar包 vmware 15.5 虚拟机 centos 7.6 服务器操作系统 xshell 6 远程连接 jdk 1.8

    2024年02月11日
    浏览(47)
  • HDFS 跨集群数据同步(hive,hadoop)

    两个不同的HDFS 集群数据迁移( A集群的数据 - B 集群) 采用的是 SHELL 脚本  按表进行; 日期分区进行; #!/bin/bash ##################### #创建人:DZH #创建日期: 2020-04 #内容: 数据迁移 ##################### ##################################### [ \\\"$#\\\" -ne 0 ] FILE=$1 path=$(cd `dirname $0`; pwd) ############## 获取执

    2024年04月27日
    浏览(58)
  • HDFS Java API 操作

    Hadoop是使用Java语言编写的,因此使用Java API操作Hadoop文件系统,HDFS Shell本质上就是对Java API的应用,通过编程的形式,操作HDFS,其核心是使用HDFS提供的Java API构造一个访问客户端对象,然后通过客户端对象对HDFS上的文件进行操作(增,删,改,查) 1、hdfs 常见类与接口 Hadoop

    2023年04月12日
    浏览(41)
  • Java Api操作HDFS

    链接:https://pan.baidu.com/s/1yUnJh-j9EKmL2hPF8biAtg?pwd=dv12 提取码:dv12 之前配置的 Hadoop 的 core-site.xml 文件中的配置的 fs.defaultFS 地址是 hdfs://localhost:9000 ,然后后面 Java 连不上 hdfs 9000 端口也是打开了,但就是连不上 9870 端口也能正常访问 防火墙也关闭了,也不行 查阅诸多资料发现问

    2024年04月28日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包