idea Java API 操作 HDFS

news/2024/5/20 4:09:05 标签: hdfs, java, hadoop

文章目录

  • 一、 hadoop window配置
    • 1.1 hadoop_home环境变量配置
    • 1.2 Hadoop里的Java路径配置
  • 二、IDE远程管理HDFS
    • 1.创建maven,导入pom.xml依赖
    • 2.案例测试


提示:以下是本篇文章正文内容,下面案例可供参考

hadoop_window_8">一、 hadoop window配置

hadoop tar包解压

hadoop_home_12">1.1 hadoop_home环境变量配置

在这里插入图片描述

1.2 Hadoop里的Java路径配置

D:\hadoop-3.3.4\etc\hadoop\hadoop-env.cmd文件修改
(因program file 有空格。用PROGRA~1代替)
set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_241

在这里插入图片描述
在这里插入图片描述

下载windows下连接hadoop需要的文件hadoop.dll和winutils.exe(https://github.com/
下载apache-hadoop-3.1.1-winutils-master)

二、IDE远程管理HDFS

1.创建maven,导入pom.xml依赖

在这里插入图片描述
在这里插入图片描述

  <dependencies>

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

    </dependencies>

2.案例测试

读取数据(示例):

package hdfs.demo;

import java.io.InputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class FileSystemCat {
    public static void main(String[] args) throws Exception {
        //创建配置文件对象,加载配置文件中的配置信息
        //默认读取core-default.xml hdfs-default.xml mapred-defalt.xml yarn-default.xml
        // 属性优先级:代码中设置>-site.xml>-default.xml
        Configuration conf = new Configuration();
        // 设置HDFS访问地址
        conf.set("fs.default.name", "hdfs://192.168.10.101:9820");
        // 取得FileSystem文件系统实例
        FileSystem fs = FileSystem.get(conf);
        //System.out.println(fs.getClass().getName());
        // 打开文件输入流
        InputStream in = fs.open(new Path("hdfs:/input/README.txt"));
        // 输出文件内容
        IOUtils.copyBytes(in, System.out, 4096, false);
        // 关闭输入流
        IOUtils.closeStream(in);
    }
}

创建目录

package hdfs.demo;

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CreateDir {
    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://192.168.10.101:9820");
        FileSystem hdfs = FileSystem.get(conf);
        // 创建目录
        boolean isok = hdfs.mkdirs(new Path("hdfs:/mydir"));
        if (isok) {
            System.out.println("创建目录成功!");
        } else {
            System.out.println("创建目录失败!");
        }
        hdfs.close();
    }
}

package hdfs.demo;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

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.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
/**
 * HDFS Java API文件操作
 */
public class HDFSDemo {

    public static void main(String[] args) throws Exception {
        createFile();
        outFile();
        deleteFile();
        copyFromLocalFile();
        copyToLocalFile();
        updateFlileProgress();
        deleteFile();
    }

    /**
     * 定义创建文件方法
     */
    public static void createFile() throws Exception {
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://192.168.170.133:9000");
        FileSystem fs = FileSystem.get(conf);
        // 打开一个输出流
        FSDataOutputStream outputStream = fs.create(new Path(
                "hdfs:/newfile2.txt"));
        // 写入文件内容
        outputStream.write("我是文件内容".getBytes());
        outputStream.close();
        fs.close();
        System.out.println("文件创建成功!");
    }


    // 删除文件
    public static void deleteFile() throws Exception {
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://192.168.170.133:9000");
        FileSystem fs = FileSystem.get(conf);
        Path path = new Path("hdfs:/newfile2.txt");
        boolean isok = fs.deleteOnExit(path);
        if (isok) {
            System.out.println("删除成功!");
        } else {
            System.out.println("删除失败!");
        }
        fs.close();
    }

    // 复制上传本地文件
    public static void copyFromLocalFile() throws Exception {
        // 1.创建配置器
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://192.168.170.133:9000");
        // 2.取得FileSystem文件系统 实例
        FileSystem fs = FileSystem.get(conf);
        // 3.创建可供hadoop使用的文件系统路径
        Path src = new Path("D:/copy_test.txt"); // 本地目录/文件
        Path dst = new Path("hdfs:/"); // 目标目录/文件
        // 4.拷贝上传本地文件(本地文件,目标路径) 至HDFS文件系统中
        fs.copyFromLocalFile(src, dst);
        System.out.println("文件上传成功!");
    }
    
    // 监控文件上传进度
    public static void updateFlileProgress() throws Exception {
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://192.168.170.133:9000");
        InputStream in=new BufferedInputStream(
                new FileInputStream("D:/soft/test.zip"));
        FileSystem fs = FileSystem.get(conf);
        //上传文件并监控上传进度
        FSDataOutputStream outputStream = fs.create(new Path("hdfs:/test.zip"), 
                new Progressable() {
          public void progress() {//回调方法显示进度
            System.out.print(".");
          }
        });
       IOUtils.copyBytes(in, outputStream, 4096, false);


    }

    // 复制下载文件
    public static void copyToLocalFile() throws Exception {
        // 1.创建配置器
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://192.168.170.133:9000");
        // 2.取得FileSystem文件系统 实例
        FileSystem fs = FileSystem.get(conf);
        // 3.创建可供hadoop使用的文件系统路径
        Path src = new Path("hdfs:/newfile2.txt");// 目标目录/文件
        Path dst = new Path("D:/new.txt"); // 本地目录/文件
        // 4.从HDFS文件系统中拷贝下载文件(目标路径,本地文件)至本地
        // fs.copyToLocalFile(src, dst);
        fs.copyToLocalFile(false, src, dst, true);
        System.out.println("文件下载成功!");
    }

    // 查看文件内容并输出
    public static void outFile() throws Exception {
        // 1.创建配置器
        Configuration conf = new Configuration();
        conf.set("fs.default.name", "hdfs://192.168.170.133:9000");
        // 2.取得FileSystem文件系统 实例
        FileSystem fs = FileSystem.get(conf);
        InputStream in = fs.open(new Path("hdfs:/newfile2.txt"));
        IOUtils.copyBytes(in, System.out, 4096, false);
        IOUtils.closeStream(in);
    }

}

http://www.niftyadmin.cn/n/170343.html

相关文章

抓住2023年春夏服装9大流行趋势,将生意机会一网打尽

服装行业是一个竞争比较激烈的行业&#xff0c;除了房租、人力等较高的经营成本外&#xff0c;服装行业还面临以下2大挑战&#xff1a;一方面服装行业的消费需求易变&#xff0c;今年流行的衣服可能明年就过时了&#xff0c;需要不断推出新品&#xff0c;才能满足消费者不断变化…

【MySQL】007 -- 事务的隔离:可重复读与读提交的数据版本可见性

此文章为《MySQL 实战 45 讲》的学习笔记&#xff0c;其课程链接可参见&#xff1a;MySQL实战45讲_MySQL_数据库-极客时间 目录 一、事务的隔离 1、事务的启动时机 2、如何理解事务B查到的k的值是3&#xff0c;而事务A查到的k的值是1&#xff1f; ①、MySQL中两个“视图”的概念…

Java:try里有return,finally还执行吗?

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Java&#xff1a;try里有return&#xff0c;finally还执行吗&#xff1f;前言一、结论介绍及其分析前言 try catch finally 是Java中为了防止出现错误导致功能无法使的常见用…

常见的UNIX/LINUX命令

一、文件目录类命令 命令格式&#xff1a; <命令名称> -【选 项 】 【参数1 】【参数2】 … 例如&#xff1a;ls -la /etc 1.浏览目录命令 &#xff08;1&#xff09;ls(list) 功能&#xff1a;显示目录文件 语法&#xff1a;ls 【-ald】 【目录或文件】 -a 显示所有文件…

问题【消息队列】

消息队列1、什么是消息队列2、消息队列有什么用3、Kafka 是什么&#xff0c;主要应用场景有哪些4、队列模型了解吗&#xff0c;Kafka 的消息模型知道吗5、什么是Producer、Consumer、Broker、Topic、Partition6、Kafka 的多副本机制了解吗&#xff0c;带来了什么好处7、Zookeep…

栈、队列、优先级队列的模拟实现

优先级队列的模拟实现栈stack的模拟实现push()pop()top()size()empty()swap()stack总代码队列queue的模拟实现push()pop()front()back()empty()size()swap()queue总代码优先级队列(堆)push()pop()top()empty()size()swap()priority_queue总代码deque的了解栈 在CSTL中栈并不属…

CF1764D Doremy‘s Pegging Game

CF1764D Doremy’s Pegging Game 题目大意 墙上有nnn个红色的钉子&#xff0c;有一根橡皮筋围在钉子上&#xff0c;形成了⼀个正边形。在正边形的中⼼处有⼀个蓝⾊的钉⼦&#xff0c;蓝⾊钉⼦的直径⽐红⾊钉⼦⼩。现在你拔掉若⼲钉⼦&#xff0c;当橡⽪筋最终碰到了蓝⾊钉⼦&…

C语言 const类型限定符

在声明语句中&#xff0c;只要将const类型修饰符放在类型名之前&#xff0c;即可将类型名后的标识符声明为具有该类型的const常量。由于编译器将其放在只读存储区&#xff0c;不允许在程序中改变其值&#xff0c;因此const常量只能在定义时赋初值。l例如&#xff1a; const do…