Java API访问HDFS

news2025/5/24 14:29:00

一、下载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.coloradmin.cn/o/1137169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年软件测试还能不能干,怎么干!听听这些肺腑之言!

“怎么办&#xff1f;我似乎连面试都过不了。” 小玲边喝着陪伴她度过无数熬夜的奶茶&#xff0c;边与朋友分享着自己在软件测试行业的求职之路。 被公司裁员后&#xff0c;小玲虽然通过自学掌握了一些基本的接口自动化和UI自动化测试技能&#xff0c;但面试时总还是遭遇到一些…

英伟达携手联发科打造CPU,威胁英特尔主导地位 | 百能云芯

据路透社报道&#xff0c;英伟达&#xff08;NVIDIA&#xff09;计划采用安谋&#xff08;Arm&#xff09;架构设计中央处理器&#xff08;CPU&#xff09;&#xff0c;进军个人电脑&#xff08;PC&#xff09;市场。外界已指出&#xff0c;联发科是英伟达的合作伙伴&#xff0…

利用Nginx通过内网穿透实现Windows Web多站点远程访问

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

Redis常用知识笔记(超全面!超详细!)收藏这一篇就够了

这里写目录标题 一、Key二、常见的数据类型1、string (字符串&#xff09;1-1 常见命令1-2 案例 2、List&#xff08;列表&#xff09;2-1 常见命令2-2 案例 3、Hash&#xff08;哈希&#xff09;3-1 常见命令3-2 案例 4、Set&#xff08;集合&#xff09;元素唯一不重复4-1 常…

msigdbr hallmarks gsea broad研究所

使用msigdbr r包 #BiocManager::install("msigdb") #https://www.gsea-msigdb.org/gsea/msigdb #https://cran.r-project.org/web/packages/msigdbr/vignettes/msigdbr-intro.html #https://bioconductor.org/packages/release/data/experiment/vignettes/msigdb/ins…

vue3 setup语法糖 搜索

目录 前言 用法 1. 区域 前言 Vue.js 是一款流行的 JavaScript 框架&#xff0c;用于构建用户界面。它提供了一种简洁的方式来创建可维护和可测试的前端应用程序。Vue.js 的核心库只关注视图层&#xff0c;易于上手&#xff0c;同时与其他库或现有项目整合也非常方便。Vue…

解决Maven打包Nacos时插件报错

Maven打包指令&#xff1a;mvn clean install -Dmaven.test.skiptrue -Dcheckstyle.skiptrue 在执行时报错&#xff0c;报错信息如下&#xff1a; Failed to execute goal org.xolstice.maven.plugins:protobuf-maven-plugin:0.6.1:compile (default) on project nacos-consist…

C语言——有一篇文章,共有 3 行文字,每行有 80 个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数

完整代码&#xff1a; /* 有一篇文章&#xff0c;共有 3 行文字&#xff0c;每行有 80 个字符。要求分别统计出其中英文大写字母、 小写字母、数字、空格以及其他字符的个数*/#include<stdio.h> int main(){//创建一篇这样的文章到二维字符数组中char str[3][80] {&quo…

平面图欧拉公式

V − E P B 1 V-EPB1 V−EPB1 V V V &#xff1a;点数 E E E&#xff1a;边数 P P P&#xff1a;面数&#xff08;含外面&#xff09; B B B&#xff1a;连通块数量 通过这个我们可以处理网格图中的连通块数量问题 上图中有7个点&#xff0c;8条边&#xff0c;3个面&#x…

小红书推广高客单产品的技巧与方法

小红书作为流量市场的一块洼地&#xff0c;这里汇聚着高净值高月活的年轻女性用户&#xff0c;她们更关注高品质、高口碑的优质产品。 在这样的营销氛围下&#xff0c;越来越多高单价产品将目光聚到这里&#xff0c;通过品牌精准营销&#xff0c;有效提升产品曝光和口碑&#x…

HighCharts点击无响应问题

HighCharts 点击无响应问题 背景介绍 项目需要展示一个小时内日志设备的状态&#xff0c;由于数据量比较大&#xff0c;使用echarts效果不好。于是采用highcharts来处理显示。highcharts使用起来很方便&#xff0c;还有打印照片功能&#xff0c;相当满意。这里采用官网给的例…

jsp初学

指令标识 html java代码 out内置对象,直接拿过来用 注释 <%-- 注释内容 --%>:JSP提供了隐藏注释&#xff0c;隐藏注释不仅在浏览器页面中看不到&#xff0c;在查看HTML源代码时也看不到 动态注释,网页看不到,只能看源码<!-- <%new Date()%> --> 指令 …

springboot配置redis、Spring cache

1.Jedis库 依赖库 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.2</version> </dependency>使用案例&#xff1a; Testpublic void jedis(){Jedis jedis new Jedis("127…

【ceph】ceph集群的节点机器重启,导致磁盘的lvm消失,如何恢复呢~~满满的都是干货

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

用python写一个俄罗斯方块程序

用python写一个俄罗斯方块程序 1.源代码2.游戏运行 1.源代码 import pygame import random# 初始化游戏 pygame.init()# 游戏窗口尺寸 WINDOW_WIDTH 800 WINDOW_HEIGHT 600# 方块大小和颜色 BLOCK_SIZE 30 COLORS [(0, 0, 0), # 黑色(255, 0, 0), # 红色(0, 255, 0), #…

补码为什么要+1

关于补码的文章&#xff0c;csdn上面遍地都是&#xff0c;所以我们大可不必搬运别人的文章来装点门面&#xff0c;我写这篇博客是想补充一个问题“补码为什么要1”的问题&#xff0c;这个问题&#xff0c;博客园有个叫张子秋的文章写的很好&#xff0c;但是最后对补码为什么1的…

【VASP】POTCAR文件

【VASP】POTCAR文件 POTCAR 文件的介绍qvasp 生成POTCARvaspkit 生成POTCAR再来认识一下各种赝势如何区分US、PAW、LDA、GGA、PW91 前言 一、4个常用的输入文件INCAR、POSCAR、POTCAR、KPOINTS INCAR: 计算任务类型是什么&#xff1f;怎么计算&#xff1f; KPOINTS: 包含了倒易…

Decomposed Meta-Learning for Few-Shot Named Entity Recognition

原文链接&#xff1a; https://aclanthology.org/2022.findings-acl.124.pdf ACL 2022 介绍 问题 目前基于span的跨度量学习&#xff08;metric learning&#xff09;的方法存在一些问题&#xff1a; 1&#xff09;由于是通过枚举来生成span&#xff0c;因此在解码的时候需要额…

Zoho Mail荣登福布斯2023年企业邮箱榜单,引领行业新方向!

几十年来&#xff0c;电子邮件一直是电子通信的重要形式&#xff0c;并且在未来的许多年里&#xff0c;它可能会无处不在。尽管有大量免费电子邮件服务可供用户和企业使用&#xff0c;但其中许多服务缺乏专门的功能&#xff0c;例如适合办公室使用的集中管理。 福布斯小型企业顾…

S5PV210裸机(七):Nand和iNand

本文主要探讨210Nand和iNand相关知识。 NandFlash 型号与命 K9F2G08&#xff1a;K9F为发行商,2G为Nand大小是2Gbit(256MB),08为Nand是8位(8数据线即接口为8位:传输数据,地址,命令) 功能 Nand是矩阵式存储,每块可存1bit位 …