通过java的api对hdfs的资源进行操作

代码:上传、下载、删除、移动/修改、文件详情、判断目录or文件、IO流操作上传/下载

package com.atguigu.hdfsdemo;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.util.Arrays; /*
* 1.创建FileSystem对象
* 2.操作资源
* 3.关闭资源
* 4.配置的优先级:代码中的>resource中的配置> 集群中的配置 >集群中得default配置
*/
public class HdfsDemo {
FileSystem fs;
Configuration conf; //1.创建Filesystem对象
@Before
public void createFileSystem() throws IOException, InterruptedException {
//配置的优先级:代码中的>resource中的配置> 集群中的配置 >集群中得default配置
conf = new Configuration();
//conf.set("dfs.replication","1"); //设置副本数
// 获取filesystem对象
fs = FileSystem.get(URI.create("hdfs://hadoop102:9820"), conf, "atguigu");
} //3.关闭资源
@After
public void closeResource() throws IOException {
if (fs != null) {
fs.close();
}
} /**
* 上传文件
*
* @throws IOException
*/
@Test
public void upload() throws IOException {
/**
* boolean delSrc:是否删除源文件
* boolean overwrite:如果目标地址如果已经存在和上传对象一样名字的文件是否覆盖;如果为true,那么就覆盖;如果为false但名字又相同那么就抛异常
* Path src:源文件
* Path dst:目标地址
*/
fs.copyFromLocalFile(false, false, new Path("F:/sanguo.txt"), new Path("/user"));
} /**
* 文件下载
*
* @throws IOException
*/
@Test
public void download() throws IOException {
/**
* boolean delSrc:是否删除源文件
* Path src:源文件
* Path dst:目标地址
* boolean useRawLocalFileSystem :就否使用crc校验
*/
fs.copyToLocalFile(false, new Path("/user/aaa.txt"), new Path("F:/"), true);
} /**
* 删除文件夹
*
* @throws IOException
*/
@Test
public void deleteDir() throws IOException {
/**
* Path f:删除的路径
* boolean recursive :是否递归?
* 如果删除的是目录那么必须是true,否则抛异常
* 如果删除的是文件那么true和false都可以
*/
boolean result = fs.delete(new Path("/deleteDir"), true);
System.out.println("文件是否删除成功:" + result);
} /**
* 移动文件、修改文件名
*/
@Test
public void moveOrUpdateName() throws IOException {
//移动文件
boolean result = fs.rename(new Path("/rename.txt"), new Path("/user/"));
System.out.println("是否移动成功" + result);
//修改文件名
boolean rename = fs.rename(new Path("/user/rename.txt"), new Path("/user/afterRename.txt"));
System.out.println("文件名是否修改成功" + rename);
} /**
* 查看文件详情:文件名、权限、长度、所属组、所属者、副本数、块信息
*
* @throws IOException
*/
@Test
public void showFileDetail() throws IOException {
/**
* 获取迭代器
* Path f:查看的文件or目录
* final boolean recursive:是否递归
*/
RemoteIterator<LocatedFileStatus> fileIterator = fs.listFiles(new Path("/"), true);
while (fileIterator.hasNext()) {
LocatedFileStatus file = fileIterator.next();
//文件名
System.out.println("*****************" + file.getPath().getName() + "*****************");
//权限
System.out.println(file.getPermission());
//长度
System.out.println(file.getLen());
//所属组
System.out.println(file.getGroup());
//所属者
System.out.println(file.getOwner());
//副本数
System.out.println(file.getReplication());
//块信息
BlockLocation[] blockLocations = file.getBlockLocations();
for (BlockLocation blockLocation : blockLocations) {
//输出块信息
System.out.println(Arrays.toString(blockLocation.getHosts()));
}
//输出结果
/******************hadoop103_34807*****************
rw-r-----
133781
atguigu
atguigu
3
[hadoop102, hadoop103, hadoop104]*/ } } /**
* 判断文件or目录?
*/
@Test
public void fileOrDir() throws IOException {
FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
for (FileStatus fileStatus : fileStatuses) {
System.out.println("*****" + fileStatus.getPath().getName() + "*****");
if (fileStatus.isFile()) {
System.out.println("文件");
} else {
System.out.println("目录");
}
}
} /**
* 通过IO流上传下载
*/
@Test
public void uploadAndDownloadByIO() throws IOException {
//需求一:将本地f盘的sanguo.txt文件上传到HDFS的根目录"/"
//创建输入流
FileInputStream fis = new FileInputStream(new File("F:/sanguo.txt"));
//创建输出流
FSDataOutputStream fos = fs.create(new Path("/sanguo.txt"));
//流对拷
IOUtils.copyBytes(fis, fos, conf);
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
//需求二:将hdfs的"/user/bbb.txt"文件下载到本地f盘根目录"F:/"
FSDataInputStream fis2 = fs.open(new Path("/user/bbb.txt"));
FileOutputStream fos2 = new FileOutputStream(new File("F:/bbb.txt"));
IOUtils.copyBytes(fis2, fos2, conf);
IOUtils.closeStream(fis2);
IOUtils.closeStream(fos2);
}
}

HDFS【Java API操作】的更多相关文章

  1. hadoop hdfs java api操作

    package com.duking.util; import java.io.IOException; import java.util.Date; import org.apache.hadoop ...

  2. HDFS Java API 常用操作

    package com.luogankun.hadoop.hdfs.api; import java.io.BufferedInputStream; import java.io.File; impo ...

  3. 使用Java API操作HDFS文件系统

    使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...

  4. HDFS shell操作及HDFS Java API编程

    HDFS shell操作及HDFS Java API编程 1.熟悉Hadoop文件结构. 2.进行HDFS shell操作. 3.掌握通过Hadoop Java API对HDFS操作. 4.了解Had ...

  5. Hadoop之HDFS(三)HDFS的JAVA API操作

    HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...

  6. HDFS 05 - HDFS 常用的 Java API 操作

    目录 0 - 配置 Hadoop 环境(Windows系统) 1 - 导入 Maven 依赖 2 - 常用类介绍 3 - 常见 API 操作 3.1 获取文件系统(重要) 3.2 创建目录.写入文件 ...

  7. HDFS Java API 的基本使用

    一. 简介 二.API的使用         2.1 FileSystem         2.2 创建目录         2.3 创建指定权限的目录         2.4 创建文件,并写入内容 ...

  8. Hadoop 学习之路(七)—— HDFS Java API

    一. 简介 想要使用HDFS API,需要导入依赖hadoop-client.如果是CDH版本的Hadoop,还需要额外指明其仓库地址: <?xml version="1.0" ...

  9. Hadoop 系列(七)—— HDFS Java API

    一. 简介 想要使用 HDFS API,需要导入依赖 hadoop-client.如果是 CDH 版本的 Hadoop,还需要额外指明其仓库地址: <?xml version="1.0 ...

  10. HDFS常用API操作 和 HDFS的I/O流操作

    前置操作 创建maven工程,修改pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

随机推荐

  1. JAVA笔记3__字符串String类/对象一对一关联

    import java.lang.String; import java.util.Scanner; public class Main { public static void main(Strin ...

  2. Go 日常开发常备第三方库和工具

    不知不觉写 Go 已经快一年了,上线了大大小小好几个项目:心态也经历了几轮变化. 因为我个人大概前五年时间写的是 Java ,中途写过一年多的 Python,所以刚接触到 Go 时的感觉如下图: 既没 ...

  3. JS基础面试

    1. JS是高级语言弱类型语言 脚本语言 1.1高级语言我们写完的代码不能直接执行,要先经过js引擎翻译成0101这种机器语言才能执行 1.2 弱类型语言变量可以在前一行设置为一个数字,下一行修改为一 ...

  4. java性能优化常用工具jmap、jstack

    jmap:java内存映像工具 jmap用于生成堆转储快照,比较常用的option包括-heap,-histo,-dump [root@localhost script]# jmap -h Usage ...

  5. Win10自动备份oracle数据库

    1.环境 操作系统:win10 数据库: 2.创建backup.bat文件 [ @echo offset name=%date:~0,4%%date:~5,2%%date:~8,2%set backu ...

  6. 【Python+postman接口自动化测试】(7)Postman 的使用教程

    Postman v6的使用 Postman: 简单方便的接口调试工具,便于分享和协作.具有接口调试,接口集管理,环境配置,参数化,断言,批量执行,录制接口,Mock Server, 接口文档,接口监控 ...

  7. [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly? For recursive components, make sure to provide the "name" option. found in ---> <Evaluate> at src/views/index/

    关于vue报错: [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly ...

  8. java.lang.NoSuchFieldError: REFLECTION

    2020-09-14 09:13:21.415 INFO org.apache.cxf.service.factory.ReflectionServiceFactoryBean Line:457 - ...

  9. webpack 项目接入Vite的通用方案介绍(上)

    愿景 希望通过本文,能给读者提供一个存/增量项目接入Vite的点子,起抛砖引玉的作用,减少这方面能力的建设成本 在阐述过程中同时也会逐渐完善webpack-vite-serve这个工具 读者可直接fo ...

  10. Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现

    Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...