首页 > 编程语言 >JAVA连接HDFS使用案例

JAVA连接HDFS使用案例

时间:2024-09-27 22:24:07浏览次数:9  
标签:HDFS fs JAVA 案例 outputStream conf FileSystem new

JAVA连接HDFS使用案例

一、引言

Hadoop分布式文件系统(HDFS)是大数据存储的基础。对于Java开发者来说,能够通过Java代码操作HDFS是处理大数据任务的关键技能。本文将通过几个简单的示例,展示如何使用Java连接HDFS并执行一些基本的文件操作。

二、连接HDFS

1、第一步:添加依赖

在Maven项目中,需要添加Hadoop客户端依赖:

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

2、第二步:创建连接

创建HDFS连接的基本代码如下:

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://localhost:9000"), conf);

三、操作HDFS

1、检查文件是否存在

public static boolean test(Configuration conf, String path) {
    try (FileSystem fs = FileSystem.get(conf)) {
        return fs.exists(new Path(path));
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

2、在文件开头或末尾插入内容

public static void insertContent(String filePath, String content, boolean insertAtBeginning) throws URISyntaxException {
    try {
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://localhost:9000"), conf);
        Path path = new Path(filePath);
        if (fs.exists(path)) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(fs.open(path)));
            StringBuilder originalContent = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                originalContent.append(line).append("\n");
            }
            reader.close();
            FSDataOutputStream outputStream = fs.create(path, true);
            if (insertAtBeginning) {
                outputStream.write(content.getBytes());
                outputStream.write(originalContent.toString().getBytes());
            } else {
                outputStream.write(originalContent.toString().getBytes());
                outputStream.write(content.getBytes());
            }
            outputStream.close();
        } else {
            FSDataOutputStream outputStream = fs.create(path);
            outputStream.write(content.getBytes());
            outputStream.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

3、删除文件

public static void main(String[] args) throws IOException, URISyntaxException {
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(new URI("hdfs://localhost:9000"), conf);
    String name = "hdfs://localhost:9000/a/a.txt";
    boolean res = fs.delete(new Path(name), false);
    if (res) {
        System.out.println("File deleted successfully.");
    } else {
        System.out.println("File deletion failed.");
    }
}

4、移动文件

public static void moveFile(String sourcePath, String destinationPath) {
    try {
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://localhost:9000"), conf);
        Path src = new Path(sourcePath);
        Path dst = new Path(destinationPath);
        if (!fs.exists(src)) {
            System.out.println("Source file does not exist.");
            return;
        }
        if (!fs.exists(dst.getParent())) {
            fs.mkdirs(dst.getParent());
        }
        boolean success = fs.rename(src, dst);
        if (success) {
            System.out.println("File moved successfully.");
        } else {
            System.out.println("File move failed.");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

四、总结

通过上述示例,我们可以看到Java连接HDFS并执行基本文件操作的过程相对直接。这些操作包括检查文件是否存在、在文件开头或末尾插入内容、删除文件以及移动文件。掌握这些基本操作对于处理大数据任务至关重要。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

标签:HDFS,fs,JAVA,案例,outputStream,conf,FileSystem,new
From: https://blog.csdn.net/NiNg_1_234/article/details/142603582

相关文章

  • 三篇文章速通JavaSE到SpringBoot框架 (中) IO 进程线程 网络编程 XML MySQL JDBC相关
    文章目录IOfile类的作用I/O的作用将上篇文章综合项目使用IO流升级所需知识点进程线程创建线程的三种方式网络编程网络编程介绍IP地址端口号网络通信协议网络通信协议的分层演示代码XMLXML的作用是什么?xml特点注解什么是注解?注解的使用注解的重要性注解的使用实例M......
  • keepalived+nginx实现高可用的案例详解(主主模式)
    文章目录前言keepalived主备模式和主主模式有什么区别1.主备模式(Master-BackupMode)2.主主模式(Active-ActiveMode或DualMasterMode)主备模式vs主主模式的区别总结:环境案例实现具体步骤ngx1ngx2验证前言keepalived主备模式和主主模式有什么区别Keepali......
  • java的类加载机制
    java的类加载机制  Java的类加载机制通过动态加载、内存管理、安全性和代码隔离等功能,为开发者提供了强大的支持,适应了现代应用的需求  一、类的生命周期  类的生命周期包括:加载、链接、初始化、使用和卸载,其中加载、链接、初始化,属于类加载的过程,我们下面仔细讲解。......
  • [Java手撕]生产者消费者模型
    importjava.util.LinkedList;importjava.util.Queue;importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.ReentrantLock;publicclassMain{publicstaticfinalQueue<Integer>message=newLinkedList<>();......
  • Java中的时间序列分析:从ARIMA到LSTM的应用
    Java中的时间序列分析:从ARIMA到LSTM的应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在机器学习和数据科学领域,时间序列分析是一项重要的技术。它广泛应用于金融、预测分析、传感器数据处理等多个场景。在本文中,我们将重点探讨两种常用的时间......
  • 如何在Java中实现图神经网络进行社交网络分析
    如何在Java中实现图神经网络进行社交网络分析图神经网络(GraphNeuralNetworks,GNNs)是处理图数据的强大工具,尤其在社交网络分析中非常有效。社交网络本质上是一个复杂的图结构,节点代表用户,边表示用户之间的互动或关系。通过GNN,能够捕获节点的局部与全局信息,从而分析社交网......
  • Java中常用类之Object类
    Object类中的常用方法:1.hashCode方法,是对象地址值的另一种表现形式classStudent{Stringname;intage;publicStudent(){}publicStudent(Stringname,intage){this.name=name;this.age=age;}}测试类中是这样进......
  • Javascript 一题搞懂 var 变量提升 & 函数声明提升!
    前置知识:在JavaScript中,“变量提升”(Hoisting)是指在代码执行之前,变量和函数声明会被提升到其所在作用域的顶部。对于使用var关键字声明的变量,会发生变量提升现象。一、声明提升1.变量声明提升:无论var变量在代码中的何处声明,它都会被提升到其所在的函数作用域......
  • Java中浮点数运算存在的精度问题以及解决方法
    观察以下一段代码,相信小朋友都可以一眼看出答案,但是计算机给出的答案是这样吗?publicclassTestDouble{publicstaticvoidmain(Stringargs[]){System.out.println("0.05+0.01="+(0.05+0.01));System.out.println("1.0-0.42="+(1.0-0.42));System.out.pr......
  • +在Java中的使用
    阅读以下代码,输出结果是什么?`publicclassTest{publicstaticvoidmain(String[]args){intX=100;intY=200;System.out.println("X+Y="+X+Y);System.out.println(X+Y+"=X+Y");}}`运行结果:为什么会有这样的输出结......