HDFS的API操作

news2024/10/7 6:50:07

目录

依赖环境

AIP操作hdfs基本流程

创建目录

文件上传

参数优先级

文件下载

 文件删除

 文件更名与移动

查看HDFS文件的详情信息

文件和文件夹的判断

依赖环境

hadoop依赖:

Maven Repository(Maven仓库)- https://mvnrepository.com/

junit依赖 

 <!--单元测试框架-->                            
    <dependency>                                  
        <groupId>junit</groupId>                  
        <artifactId>junit</artifactId>            
        <version>4.13.2</version>                 
    </dependency>                                 
</dependencies>       

 在resources目录里创建log4j.properties文件并写入以下数据

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

 

AIP操作hdfs基本流程

 public void test() throws URISyntaxException, IOException, InterruptedException {
        //连接集群地址
        URI uri = new URI("hdfs://master:9000");
        //创建配置文件
        Configuration configuration = new Configuration();

        //用户
        String user = "master";

        //获取客户对象
        FileSystem fs = FileSystem.get(uri, configuration, user);
        
        //关闭资源
        fs.close();

由于初始化流程会多次使用该部分代码,所以可以将其封装一下。

package testHDFS;

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

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class HdfsClient {
    //设置对象全局变量
    private static FileSystem fs;

    @Before //最先执行
    public void start_() throws URISyntaxException, IOException, InterruptedException {
            //连接集群地址
            URI uri = new URI("hdfs://master:9000");
            //创建配置文件
            Configuration configuration = new Configuration();

            //用户
            String user = "master";

            //获取客户对象
            fs = FileSystem.get(uri, configuration, user);
        }

    @After //最后执行
    public void close_() throws IOException {
        //关闭资源
        fs.close();
    }

    @Test //@Before执行后再执行
    public void test() throws IOException {
        //操作的逻辑代码
        
    }

}

创建目录

 在test()方法中为业务操作代码的部分 将所需的操作代码写到其中。

//创建目录
fs.mkdirs(new Path("/news/a"));

到HDFS中查看目录创建成功

文件上传

上传文件使用copyFromLocalFile() 参数解读:

delSrc:上传后是否删除原数据

overwrite:是否允许覆盖文件

src:原数据路径(为使用API的windows本地主机文件)

dst:目标地址路径

 @Test //@Before执行后再执行
    public void test() throws IOException {//抛出异常
        //操作的逻辑代码
        //上传
        fs.copyFromLocalFile(false,false,new Path("D:\\newHDFS.txt"),new Path("/news"));
    }

windows下的文件 

 

到HDFS中查看文件上传成功

参数优先级

参数优先级排序:

(1)客户端代码中设置的值 >(2)ClassPath 下的用户自定义配置文 件 >(3)然后是服务器的自定义配置(hdfs-site.xml)>(4)服务器的默认配置(hdfs-default.xml)

文件下载

下载文件使用copyToLocalFile() 参数解读:

delSrc:下载后是否删除文件

src:原文件路径(为HDFS目录文件)

dst:目标地址路径

useRawLocalFileSystem:是否开启本地校验

 @Test //@Before执行后再执行
    public void test() throws IOException {//抛出异常
        //下载文件
        fs.copyToLocalFile(false,new Path("/hhh/hdfs1.txt"),new Path("D:\\"),false);
    }

HDFS下的文件 

 在windows中查看文件下载成功

 

 文件删除

下载文件使用delete() 参数解读:

path:删除的文件路径(为HDFS目录文件)

b:是否递归删除

 @Test //@Before执行后再执行
    public void test() throws IOException {//抛出异常
        //删除文件
        fs.delete(new Path("/hhh/hdfs1.txt"),false);//我这目录只有一个文件所以不选递归删除
    }

 查看hdfs1.txt文件已被删除

 不止有删除文件 该方法还能删除空目录与非空目录(非空目录必须使用递归删除)

 文件更名与移动

下载文件使用rename() 参数解读:

path:原文件路径

path1:移动到的位置路径

修改文件名

 @Test //@Before执行后再执行
    public void test() throws IOException {//抛出异常
        //更名文件
        fs.rename(new Path("/news/newHDFS.txt"),new Path("/news/helloHDFS.txt"))
    }

查看修改成功

 移动文件

将/news/helloHDFS.txt移动到/hhh目录下

fs.rename(new Path("/news/helloHDFS.txt"),new Path("/hhh/helloHDFS.txt"));

查看移动成功

 不止能对文件 该方法还能对目录进行进行更名和移动

查看HDFS文件的详情信息

查看目录信息使用rename() 参数解读:

f:查看路径信息

recursive:是否递归

 

查看HelloHadoop目录下的文件信息

@Test //@Before执行后再执行
    public void test() throws IOException {//抛出异常
        //获取所有文件信息
        //返回一个迭代器
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/HelloHadoop"), true);

        //遍历迭代器
        while (listFiles.hasNext()) {
            LocatedFileStatus fileStatus = listFiles.next();

            //获取文件路径
            System.out.println("-------------"+fileStatus.getPath()+"-------------");
            //获取信息
            System.out.println(fileStatus.getPermission());
            System.out.println(fileStatus.getOwner());
            System.out.println(fileStatus.getGroup());
            System.out.println(fileStatus.getLen());
            System.out.println(fileStatus.getModificationTime());
            System.out.println(fileStatus.getReplication());
            System.out.println(fileStatus.getBlockSize());
            System.out.println(fileStatus.getPath().getName());

            //获取块信息
            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            //打印数组中的块信息
            System.out.println(Arrays.toString(blockLocations));
        }
    }

控制台文件信息输出结果

 

文件和文件夹的判断

判断HelloHadoop目录下的是文件还是文件夹

 @Test //@Before执行后再执行
    public void test() throws IOException {//抛出异常
    // 判断是文件夹还是文件
        //选定遍历判断的目录
        FileStatus[] listStatus = fs.listStatus(new Path("/HelloHadoop"));
        //循环遍历
        for (FileStatus status : listStatus) {
            //判断是否为文件
            if (status.isFile()) {
                //打印信息
                System.out.println("文件:"+status.getPath().getName());
            }else {
                System.out.println("目录:"+status.getPath().getName());
            }
        }
    }

控制台文件信息输出判断结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86304.html

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

相关文章

中小型企业 CRM 系统有哪些好的推荐?

不同行业的中小型企业在资源、需求、抗风险能力、业务成熟度等方面存在显著差异&#xff0c;因此对CRM的应用需求有不同侧重。 图源&#xff1a;艾瑞咨询我专门研究了一些CRM的行业报告&#xff0c;比较了一下当下几款比较热门的CRM&#xff0c;希望能够帮助大家找到自己的“心…

【能效管理】AcrelEMS-IDC数据中心综合能效管理系统应用分析

概述 安科瑞电气紧跟数据中心发展形式&#xff0c;推出AcrelEMS-IDC数据中心综合能效管理解决方案&#xff0c;包含有电力监控、动环监控、消防监控、能耗统计分析、智能照明控制以及新能源监测几个子系统。集成了变配电监测、电源备自投、电气接点测温、智能照明控制、电能质…

PD芯片在OTG设备的角色应用及OTG发展历史

OTG是On-The-Go的缩写&#xff0c;是近年发展起来的技术。2001年12月18日由USB标准化组织公布&#xff0c;主要应用于不同的设备或移动设备间的联接&#xff0c;进行数据交换。 USB技术的发展&#xff0c;使得PC和周边设备能够通过简单的方式、适度的制造成本&#xff0c;将各…

渗透测试sec123笔记

1.外网打点 1.1端口探测 └─$ sudo masscan 192.168.1.103 -p 1-65535 --rate100 masscan扫描结果 └─$ nmap -sV 192.168.1.103 -sC -p 8088,5985,49154,49173,80,8878,47001,7000,49153,49157,3389,49155,49152,8899,49161 -oN sec-ports …

开发转测试:从零开始的6年自动化之路,太迷茫...

自动化初识 作为一个测试人&#xff0c;我们或多或少都听过或用过自动化&#xff0c;我们都曾在初入测试行业时&#xff0c;满怀期待的以为测试的尽头是不用测试员点点了&#xff0c;项目一提测&#xff0c;小手点下自动化的开关&#xff0c;瞬间测试的工作就完成了。 这就是…

4-Arm PEG-Biotin,4-Arm peg-Biotin,四臂-聚乙二醇-生物素科研试剂供应

一&#xff1a;产品描述 1、名称 英文&#xff1a;4-Arm PEG-Biotin&#xff0c;4-Arm peg-Biotin 中文&#xff1a;四臂-聚乙二醇-生物素 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Biotin PEG Multi-arm PEGs 4、分子量&#xff1a;可定制&#xff0c;四臂-PE…

BundleTrack自用配置笔记

0、下载代码 git clone https://github.com/wenbowen123/BundleTrack.git 或者选择Download ZIP 1、按照Ubuntu版本安装docker 查看docker版本 $ docker version 在1080显卡上测试时出现bug&#xff0c;找到一个解决的文章&#xff0c;本人适用 docker: Error response…

微信小程序模板与配置

文章目录1. 数据绑定2. 事件绑定3. 事件传参4. 网络请求1. 数据绑定 在data中定义数据&#xff1a;在页面对应的js文件中&#xff0c;把数据定义到data对象中即可 // index.js Page({// string 类型info:init data,// 数组 类型msgList:[{msg:hello},{msg:world}] })在WXML中使…

测试人员面试需要掌握的内容,软件测试面试题答案

1、在公司的测试流程是什么&#xff1f; 产品经理确认本次版本的需求&#xff0c;召开需求评审会&#xff0c;进行估时排期&#xff0c;需求和时间都确定之后&#xff0c;UI出设计图&#xff0c;开发人员进行开发&#xff0c;测试人员编写测试用例&#xff0c;召开用例评审会议…

12.13

AJAX 视频 1-11 1.1 AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML。 通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。 AJAX 不是新的编程语言&#xff0c;而是一种将现有…

909. 蛇梯棋-广度优先遍历

909. 蛇梯棋-广度优先遍历 给你一个大小为 n x n 的整数矩阵 board &#xff0c;方格按从 1 到 n2 编号&#xff0c;编号遵循 转行交替方式 &#xff0c;从左下角开始 &#xff08;即&#xff0c;从 board[n - 1][0] 开始&#xff09;每一行交替方向。 玩家从棋盘上的方格 1 …

高压开关电源3D PCB绘制教程:SOLIDWORKS绘制瓷片电容教程

本教程配有配套视频教程&#xff0c;读者可以配合配套的视频教程学习&#xff0c;下载本课的对应课件和源文件&#xff0c;更多课程及材料&#xff0c;敬请关注凡亿教育&#xff1a;《高压开关电源3D PCB绘制教程》。绘制指导&#xff1a;家介绍瓷片电容的绘制方法&#xff0c;…

ICML2018 | PixelSNAIL+:An Improved Autoregressive Generative Model

论文链接&#xff1a;PixelSNAIL: An Improved Autoregressive Generative Model 论文标题&#xff1a;PixelSNAIL: An Improved Autoregressive Generative Model 代码&#xff1a;GitHub - neocxi/pixelsnail-public GitHub - neocxi/pixelsnail-public 一、问题提出 高…

程序人生:25岁我从零基础转到软件测试,我看到了前途...目前28K

推荐好文&#xff1a; [内部资源] 想拿年薪30W的软件测试人员&#xff0c;这份资料必须领取~ Python自动化测试全栈性能测试全栈&#xff0c;挑战年薪40W 没有一个人的人生&#xff0c;能够按照自己写好的脚本去走。从一而终是幸运的&#xff0c;但也是不幸的&#xff0c;因…

1568_AURIX_TC275_电源管理_唤醒配置与状态

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 如果有待机RAM保持的功能激活了&#xff0c;那么唤醒以及复位都不会进行RAM的重新初始化。 PORST相关的滤波开了之后&#xff0c;可以抵抗500ns的尖峰脉冲干扰。 CPU不仅可以请求自我进入i…

代码随想录刷题记录 day43 股票买卖的最佳时机1 2

代码随想录刷题记录 day43 股票买卖的最佳时机1 2 参考&#xff1a;代码随想录 121. 买卖股票的最佳时机 思想 dp数组定义 dp[i][0]表示 第i天 持有股票 手头的最大的现金数为dp[i][0] dp[i][1]表示 第i天 不持有股票 手头的最大的现金数为dp[i][1] 递推公式 dp[i][0] dp[i-…

2004-2020年全国31省环境规制强度

2004-2020年全国各省环境规制强度 1、时间区间为2004-2020年 2、范围&#xff1a;包括全国31个省份 3、缺失情况&#xff1a;西藏存在部分年份缺失&#xff0c;其他省份无缺失 4、指标包括&#xff1a; 工业污染治理完成投资(万元)、第二产业增加值(亿元)、环境规制强度 …

vue父子组件之间的传值,及互相调用父子组件之间的方法

场景&#xff1a;记录下父子组件之间的传值方法&#xff0c;以及调用他们的内部的方法 *** 父组件给子组件传值是通过属性绑定的方法 *** 子组件给父组件传值是通过绑定对应的方法将自身的值传递给父组件 当然&#xff0c;我这只是说了一种传参方式&#xff0c;也包含通过vuex的…

Spring Boot基于FreeMarker发送模板邮件(带附件)

目录一、背景二、maven依赖三、编码实现3.1、邮件对象3.2、服务层3.2.1、抄送人3.2.2、嵌入式资源3.2.3、附件3.3、邮件模板3.3.1、模板引擎3.4、配置文件四、测试4.1、发送简单邮件4.2、发送复杂邮件4.3、效果图一、背景 邮件在工作中中经常被用到&#xff0c;场景非常的广泛&…

高分子PEG:8Arm PEG-DBCO,八臂聚乙二醇环辛炔 MV1K 2K 3.4K 5K

【中文名称】八臂聚乙二醇环辛炔 【英文名称】 8Arm PEG-DBCO&#xff0c;DBCO PEG 8Arm 【结 构 式】 【CAS号】N/A 【分子量】1000&#xff0c;2000&#xff0c;3400&#xff0c;5000&#xff0c;10000&#xff0c;20000 【基团部分】DBCO 【纯度标准】95% 【包装规格】1g&…