当前位置: 首页 > article >正文

Java API访问HDFS

一、下载IDEA

下载地址:https://www.jetbrains.com/idea/download/?section=windows#section=windows
拉到下面使用免费的IC版本即可。
在这里插入图片描述运行下载下来的exe文件,注意安装路径最好不要安装到C盘,可以改成其他盘,其他选项按需勾选即可。

二、创建Java项目

运行IDEA,创建新的项目。
在这里插入图片描述选择创建maven项目
在这里插入图片描述为了方便管理,将hadoop作为父项目,所以修改Hadoop的项目类型为pom。找到pom.xml,并添加packaging标签,dependencymanagement,子模块就只需要添加依赖名,不需要导入依赖版本。

<packaging>pom</packaging>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>3.2.2</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

三、创建新的子模块

右键hadoop文件-new-module
在这里插入图片描述
查看依赖
在这里插入图片描述
添加Java class

四、HDFS操作示例

1.显示HDFS制定目录下的所有目录。
在pom.xml里添加需要用到的依赖

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-configuration2</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.3.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.1</version>
        </dependency>

参考代码:

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

import java.io.IOException;

public class Demon {
    public static void main(String[] args) throws IOException {
        System.setProperty("HADOOP_USER_NAME","root");
        //访问hadoop用户名,这里我设置的是root,如果是别的用户名需要修改
        Configuration config = new Configuration();
        //声明一个新的访问配置对象
        config.set("fs.defaultFS","hdfs://192.168.56.201:8020");
        //设置访问的具体地址
        FileSystem fs = FileSystem.get(config);
        //创建一个新的文件系统对象
        FileStatus[] stas = fs.listStatus(new Path("/"));
        for(FileStatus f : stas){
            System.out.println(f.getPermission().toString() + "" + f.getPath().toString());
            //输出根目录下的所有文件或目录,不包含子目录
        }
        fs.close();
    }
}

输出结果:
在这里插入图片描述2.向HDFS写入内容writefiles
参考代码:

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

import java.io.IOException;
import java.io.OutputStream;

public class Demo04WriteFile {
    public static void main(String[] args) throws IOException {
        String server = "hdfs://192.168.56.201:8020";
        System.setProperty("HADOOP_USER_NAME", "root");
        Configuration config = new Configuration();
        config.set("fs.defaultFS", server);
        try (FileSystem fs = FileSystem.get(config)) {
            OutputStream out = fs.create(new Path(server+"/test/b.txt"));
           out.write("Hello hadoop\n".getBytes());
           out.write("中文写入测试\n".getBytes());
           out.close();
        }
    }
}

输入hdfs dfs -cat /test/b.txt查询,成功写入
在这里插入图片描述
3.listfile显示所有文件
参考代码:

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

import java.io.IOException;

public class Demo02ListFiles {
    public static void main(String[] args) throws IOException {
        System.setProperty("HADOOP_USER_NAME", "root");
        Configuration config = new Configuration();
        config.set("fs.defaultFS", "hdfs://192.168.56.201:8020");
        FileSystem fs = FileSystem.get(config);
        RemoteIterator<LocatedFileStatus> files =
                fs.listFiles(new Path("/test"), true);
        while (files.hasNext()) {
            LocatedFileStatus file = files.next();

            System.out.println(file.getPermission() + " " + file.getPath());
        }

        fs.close();
    }
}

输出结果:
在这里插入图片描述4.读取HDFS文件的内容filesystem.open
代码:

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

import java.io.DataInputStream;
import java.io.IOException;

public class Demo03ReadFile {
    public static void main(String[] args) throws IOException {
        String server = "hdfs://192.168.56.201:8020";
        System.setProperty("HADOOP_USER_NAME", "root");
        Configuration config = new Configuration();
        config.set("fs.defaultFS", server);
        try (FileSystem fs = FileSystem.get(config)) {
            DataInputStream in = fs.open(new Path(server+"/test/b.txt"));
            int len = 0;
            byte[] bs = new byte[1024];
            while ((len = in.read(bs)) != -1) {
                String str = new String(bs, 0, len);
                System.out.print(str);
            }
        }
    }}

输出结果:
在这里插入图片描述


http://www.kler.cn/a/106180.html

相关文章:

  • 前端隐藏元素的方式有哪些?HTML 和 CSS 中隐藏元素的多种方法
  • 《C++设计模式:重塑游戏角色系统类结构的秘籍》
  • Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构
  • 论文《基于现实迷宫地形的电脑鼠设计》深度分析——智能车驱动算法
  • LLaMA-Factory全流程训练模型
  • Android - Pixel 6a 手机OS 由 Android 15 降级到 Android 14 操作记录
  • 2.18每日一题(不直接给f(x)的定积分及变上限积分)
  • TSINGSEE青犀智慧仓储可视化视频智能监管系统方案
  • Flume基本使用--mysql数据输出
  • 微前端qiankun接入Vue和React项目
  • CNN实现与训练--------------以cifar10数据集为例进行演示(基于Tensorflow)
  • JDK11下载、安装与配置、运行第一个Java程序教程
  • 虹科 | 解决方案 | 汽车示波器 学校教学方案
  • 安装 tensorflow==1.15.2 遇见的问题
  • 一文了解独立站黑科技:clock斗篷技术
  • [推荐]Linux安装与配置虚拟机之虚拟机服务器坏境配置
  • Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)
  • 『第七章』翩翩起舞的雨燕:顺序与并发执行
  • Games104现代游戏引擎笔记 网络游戏架构基础
  • 4.1 网络基础之网络IO
  • Cloak斗篷、AB轮询收款科技详解,FP独立站原来可以这样玩!
  • 部署Vue项目到githubPage中
  • 网页禁止右键 禁止F12 JavaScript禁止F12 禁止右键菜单 包含 js、Jquery、Vue
  • 7 IT Career Paths and How to Get Started in 2023
  • 智慧公厕:细致入微的城市贴心服务与便捷方便的生活配套
  • leetcode第80题:删除有序数组中的重复项 II