大数据学习:使用Java API操作HDFS

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

一、创建Maven项目

hdfs的javaapi,大数据,java,hdfs,大数据文章来源地址https://www.toymoban.com/news/detail-714381.html

二、添加依赖

  • pom.xml文件里添加hadoopjunit依赖
    hdfs的javaapi,大数据,java,hdfs,大数据
<dependencies>
        <dependency>
            <!--hadoop客户端-->
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.4</version>
        </dependency>
        <!--单元调试框架-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
    </dependencies>

三、创建日志属性文件

  • resources目录里创建log4j.properties文件
    hdfs的javaapi,大数据,java,hdfs,大数据
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 代码
log4j.rootLogger=stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/hdfs.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

四、在HDFS上创建文件

  • /ied01目录创建hadoop2.txt文件
  • 创建net.xxr.hdfs包,在包里创建CreateFileOnHDFS
    hdfs的javaapi,大数据,java,hdfs,大数据
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 编写create1()方法
package net.xxr.hdfs;

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

import java.net.URI;

public class CreateFileOnHDFS {
    public void create1() throws Exception{
        // 创建配置对象
        Configuration conf = new Configuration();
        // 定义统一资源标识符
        String uri = "hdfs://master:9000";
        // 创建文件系统对象(基于HDFS的文件系统)
        FileSystem fs = FileSystem.get(new URI(uri), conf);
        // 创建路径对象(指向文件)
        Path path = new Path(uri + "/ied01/hadoop2.txt");
        // 基于路径对象创建文件
        boolean result = fs.createNewFile(path);
        // 根据返回值判断文件是否创建成功
        if (result) {
            System.out.println("文件[" + path + "]创建成功!");
        }else {
            System.out.println("文件[" + path + "]创建失败!");
        }
    }
}


  • 结果
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 利用HDFS集群WebUI查看
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 编写create2()方法,实现判断文件是否存在
 @Test
    public void create2() throws Exception{
        // 创建配置对象
        Configuration conf = new Configuration();
        // 定义统一资源标识符
        String uri = "hdfs://master:9000";
        // 创建文件系统对象(基于HDFS的文件系统)
        FileSystem fs = FileSystem.get(new URI(uri), conf);
        // 创建路径对象(指向文件)
        Path path = new Path(uri + "/ied01/hadoop2.txt");
        // 判断路径对象指向的文件是否存在
        if (fs.exists(path)) {
            // 提示用户文件已存在
            System.out.println("文件[" + path + "]已存在!");
        }else{
            // 基于路径对象创建文件
            boolean result = fs.createNewFile(path);
            // 根据返回值判断文件是否创建成功
            if (result) {
                System.out.println("文件[" + path + "]创建成功!");
            }else {
                System.out.println("文件[" + path + "]创建失败!");
            }

        }
    }
  • 结果
    hdfs的javaapi,大数据,java,hdfs,大数据

五、写入HDFS文件

  • net.xxr.hdfs包里创建WriteFileOnHDFS
    hdfs的javaapi,大数据,java,hdfs,大数据
1、将数据直接写入HDFS文件
package net.xxr.hdfs;

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

import java.net.URI;

/*
功能:写入HDFS文件
作者:小小榕
日期:2022年11月30日
 */

public class WriteFileOnHDFS {
    @Test
    public void write1() throws Exception{
        // 创建配置对象
        Configuration conf = new Configuration();
        conf.set("dfs.client.use.datanode.hostname","true");
        // 定义统一资源标识符
        String uri = "hdfs://master:9000";
        // 创建文件系统对象(基于HDFS的文件系统)
        FileSystem fs = FileSystem.get(new URI(uri), conf,"root");
        // 创建路径对象(指向文件)
        Path path = new Path(uri + "/ied01/hadoop2.txt");
        // 创建文件系统数据字节输出流
        FSDataOutputStream out = fs.create(path);
        // 通过字节输出流向文件写数据
        out.write("Hello Hadoop World".getBytes());
        // 关闭输出流
        out.close();
        // 关闭文件系统对象
        fs.close();
        System.out.println("文件[" + path + "]写入成功");
    }
}

  • 结果
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 利用HDFS集群WebUI查看
    hdfs的javaapi,大数据,java,hdfs,大数据
2、将本地文件写入HDFS文件
  • 在项目根目录创建一个文本文件test.txt
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 创建create2()方法
@Test
    public void write2() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向目录或文件)
        Path path = new Path(uri + "/ied01/exam2.txt");
        // 创建文件系统数据字节输出流对象
        FSDataOutputStream out = fs.create(path);
        // 创建文件字符输入流对象
        FileReader fr = new FileReader("test.txt");
        // 创建缓冲字符输入流对象
        BufferedReader br = new BufferedReader(fr);
        // 定义行字符串
        String nextLine = "";
        // 通过循环读取缓冲字符输入流
        while ((nextLine = br.readLine()) != null) {
            // 在控制台输出读取的行
            System.out.println(nextLine);
            // 通过文件系统数据字节输出流对象写入指定文件
            out.write(nextLine.getBytes());
        }
        // 关闭文件系统字节输出流
        out.close();
        // 关闭缓冲字符输入流
        br.close();
        // 关闭文件字符输入流
        fr.close();
        // 提示用户写入文件成功
        System.out.println("本地文件[test.txt]成功写入[" + path + "]!");
    }
  • 结果
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 其实这个方法的功能就是将本地文件复制(上传)到HDFS,有没有更简单的处理方法呢?有的,通过使用一个工具类IOUtils来完成文件的相关操作
  • 编写create2_()方法
@Test
    public void write2_() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向目录或文件)
        Path path = new Path(uri + "/ied01/test2.txt");
        // 创建文件系统数据字节输出流对象
        FSDataOutputStream out = fs.create(path);
        // 创建文件字节输入流对象
        FileInputStream in = new FileInputStream("test.txt");
        // 利用IOUtils类提供的字节拷贝方法来复制文件
        IOUtils.copyBytes(in, out, conf);
        // 关闭文件字节输入流
        in.close();
        // 关闭文件系统数据字节输出流
        out.close();
        // 关闭文件系统
        fs.close();
        // 提示用户写入文件成功
        System.out.println("本地文件[test.txt]成功写入[" + path + "]!");
    }
  • 结果
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 查看/ied01/test.txt内容
    hdfs的javaapi,大数据,java,hdfs,大数据

六、读取HDFS文件

  • net.xxr.hdfs包里创建ReadFileOnHDFS
    hdfs的javaapi,大数据,java,hdfs,大数据
1、读取HDFS文件直接在控制台显示
  • 编写read1()方法
package net.xxr.hdfs;

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

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;

/*
功能:读取HDFS文件
作者:小小榕
日期:2022年11月30日
 */

public class ReadFileOnHDFS {
    @Test
    public void read1() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向目录或文件)
        Path path = new Path(uri + "/ied01/test2.txt");
        // 创建文件系统数据字节输入流对象
        FSDataInputStream in = fs.open(path);
        // 创建缓冲字符输入流对象,提高读取效率(字节流-->字符流-->缓冲流)
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        // 定义行字符串
        String nextLine = "";
        // 通过循环读取缓冲字符输入流
        while ((nextLine = br.readLine()) != null) {
            // 在控制台输出读取的行内容
            System.out.println(nextLine);
        }
        // 关闭缓冲字符输入流
        br.close();
        // 关闭文件系统数据字节输入流
        in.close();
        // 关闭文件系统
        fs.close();
    }
}


  • 结果
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 利用IOUtils类简化代码
  • 创建read1_()测试方法
    hdfs的javaapi,大数据,java,hdfs,大数据
2、读取HDFS文件,保存为本地文件
  • 任务:将/ied01/test2.txt下载到项目下download目录里
  • 创建download目录
    hdfs的javaapi,大数据,java,hdfs,大数据
  • 创建read2()方法
@Test
    public void read2() throws Exception {
        // 创建配置对象
        Configuration conf = new Configuration();
        // 设置数据节点主机名属性
        conf.set("dfs.client.use.datanode.hostname", "true");
        // 定义uri字符串
        String uri = "hdfs://master:9000";
        // 创建文件系统对象
        FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
        // 创建路径对象(指向目录或文件)
        Path path = new Path(uri + "/ied01/test2.txt");
        // 创建文件系统数据字节输入流对象
        FSDataInputStream in = fs.open(path);
        // 创建文件字节输出流
        FileOutputStream out = new FileOutputStream("download/exam.txt");
        // 读取HDFS文件(靠输入流),写入本地文件(靠输出流)
        IOUtils.copyBytes(in, out, conf);
        // 关闭文件系统数据字节输入流
        in.close();
        // 关闭文件字节输出流
        out.close();
        // 关闭文件系统
        fs.close();
        // 提示用户文件下载成功
        System.out.println("文件[" + path + "]下载到本地文件[download/exam.txt]!");
    }
  • 结果
    hdfs的javaapi,大数据,java,hdfs,大数据
    hdfs的javaapi,大数据,java,hdfs,大数据

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

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

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

相关文章

  • Java 8:Stream API 流式操作(学习)

    Java 8 中的 Stream API 是一组用于对集合数据进行处理的新特性;提供一种以声明式风格对集合进行操作的方式,简化集合的处理,使得代码更加简洁、优雅,并且能够更高效地处理数据; 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进

    2024年02月10日
    浏览(35)
  • ZooKeeper Java API 使用教程 - 同步与异步操作示例

    本教程详细介绍了如何使用ZooKeeper Java API进行节点数据的同步和异步获取。通过具体代码示例,展示了如何连接ZooKeeper服务器,获取子节点列表,以及如何处理节点数据变化的事件。

    2024年04月22日
    浏览(26)
  • HBase Java API 开发:批量操作 第2关:批量删除数据

    删除单行数据 删除一行数据很简单,我们来看个示例: 这段代码就可以删除行键为 row1 的行。 删除多行数据 如何删除多行数据呢? 相信你已经猜到了,既然 get() 方法有重载方法,那应该 delete() 方法也有,确实: 这样就可以删除多行数据啦。 编程要求 还等啥,亲自试一试

    2024年02月05日
    浏览(46)
  • 【ES使用】Java API操作ES宝典(8.x版本)

    大家好,我是老坛。  本篇文章全部代码资源请关注同名公众号:老坛聊开发 回复:\\\"8.x模板\\\" 即可获取 Elasticsearch是一个分布式的RESTful 风格的搜索和数据分析引擎,它使用方便,查询速度快,因此也被越来越多的开发人员使用。 在Java项目中,使用ES的场景也十分常见。除了

    2024年02月02日
    浏览(31)
  • 【ElasticSearch】ElasticSearch Java API的使用——常用索引、文档、查询操作(二)

    Elaticsearch ,简称为es,es是一个开源的 高扩展 的 分布式全文检索引擎 ,它可以近乎 实时的存储 、 检索数据; 本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的 目的

    2024年01月16日
    浏览(60)
  • 使用Java API对HDFS进行如下操作:文件的创建、上传、下载以及删除等操作

    HDFS-JAVA接口:上传文件 将一个本地文件(无具体要求)上传至HDFS中的/hdfs-test路径下(如无此路径,新建一个)。 新建路径:   首先在路径/usr/test/ 下新建test.txt,指令为:/usr/test/test.txt,然后进行上传操作。      2.HDFS-JAVA接口:创建文件 在HDFS中的/hdfs-test路径下新建一个da

    2024年02月07日
    浏览(41)
  • 24、Flink 的table api与sql之Catalogs(java api操作数据库、表)-2

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月04日
    浏览(46)
  • Minio入门系列【5】JAVA集成Minio之存储桶操作API使用详解

    官方文档:https://min.io/docs/minio/kubernetes/upstream/index.html?ref=docs-redirect SDK:https://github.com/minio/minio-java Minio 提供了多种语言的SDK,比如java、go、python等。JAVA开发平台可以选择JS和java SDK,也就是前端和后端都可以直接集成minio。 每个OSS的用户都会用到上传服务。Web端常见的上传

    2024年02月05日
    浏览(43)
  • 使用spring-kafka的Java API操作Kafka集群的Topic

    记录 :462 场景 :在Spring Boot微服务集成spring-kafka-2.8.2操作Kafka集群的Topic的创建和删除。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,spring-kafka-2.8.2。 Kafka集群安装 :https://blog.csdn.net/zhangbeizhen18/article/details/131156084 1.微服务中 配置Kafka信息 1.1在pom.xml添加依赖 pom.xml文件: 解析:

    2024年02月10日
    浏览(31)
  • 使用kafka-clients的Java API操作Kafka集群的Topic

    记录 :464 场景 :在Spring Boot微服务集成Kafka客户端kafka-clients-3.0.0操作Kafka集群的Topic的创建和删除。 版本 :JDK 1.8,Spring Boot 2.6.3,kafka_2.12-2.8.0,kafka-clients-3.0.0。 Kafka集群安装 :https://blog.csdn.net/zhangbeizhen18/article/details/131156084 1.微服务中 配置Kafka信息 1.1在pom.xml添加依赖 pom.xml文

    2024年02月09日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包