HDFS【Java API操作】
通过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操作】的更多相关文章
- hadoop hdfs java api操作
package com.duking.util; import java.io.IOException; import java.util.Date; import org.apache.hadoop ...
- HDFS Java API 常用操作
package com.luogankun.hadoop.hdfs.api; import java.io.BufferedInputStream; import java.io.File; impo ...
- 使用Java API操作HDFS文件系统
使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...
- HDFS shell操作及HDFS Java API编程
HDFS shell操作及HDFS Java API编程 1.熟悉Hadoop文件结构. 2.进行HDFS shell操作. 3.掌握通过Hadoop Java API对HDFS操作. 4.了解Had ...
- Hadoop之HDFS(三)HDFS的JAVA API操作
HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...
- HDFS 05 - HDFS 常用的 Java API 操作
目录 0 - 配置 Hadoop 环境(Windows系统) 1 - 导入 Maven 依赖 2 - 常用类介绍 3 - 常见 API 操作 3.1 获取文件系统(重要) 3.2 创建目录.写入文件 ...
- HDFS Java API 的基本使用
一. 简介 二.API的使用 2.1 FileSystem 2.2 创建目录 2.3 创建指定权限的目录 2.4 创建文件,并写入内容 ...
- Hadoop 学习之路(七)—— HDFS Java API
一. 简介 想要使用HDFS API,需要导入依赖hadoop-client.如果是CDH版本的Hadoop,还需要额外指明其仓库地址: <?xml version="1.0" ...
- Hadoop 系列(七)—— HDFS Java API
一. 简介 想要使用 HDFS API,需要导入依赖 hadoop-client.如果是 CDH 版本的 Hadoop,还需要额外指明其仓库地址: <?xml version="1.0 ...
- HDFS常用API操作 和 HDFS的I/O流操作
前置操作 创建maven工程,修改pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...
随机推荐
- JAVA笔记3__字符串String类/对象一对一关联
import java.lang.String; import java.util.Scanner; public class Main { public static void main(Strin ...
- Go 日常开发常备第三方库和工具
不知不觉写 Go 已经快一年了,上线了大大小小好几个项目:心态也经历了几轮变化. 因为我个人大概前五年时间写的是 Java ,中途写过一年多的 Python,所以刚接触到 Go 时的感觉如下图: 既没 ...
- JS基础面试
1. JS是高级语言弱类型语言 脚本语言 1.1高级语言我们写完的代码不能直接执行,要先经过js引擎翻译成0101这种机器语言才能执行 1.2 弱类型语言变量可以在前一行设置为一个数字,下一行修改为一 ...
- java性能优化常用工具jmap、jstack
jmap:java内存映像工具 jmap用于生成堆转储快照,比较常用的option包括-heap,-histo,-dump [root@localhost script]# jmap -h Usage ...
- Win10自动备份oracle数据库
1.环境 操作系统:win10 数据库: 2.创建backup.bat文件 [ @echo offset name=%date:~0,4%%date:~5,2%%date:~8,2%set backu ...
- 【Python+postman接口自动化测试】(7)Postman 的使用教程
Postman v6的使用 Postman: 简单方便的接口调试工具,便于分享和协作.具有接口调试,接口集管理,环境配置,参数化,断言,批量执行,录制接口,Mock Server, 接口文档,接口监控 ...
- [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 ...
- java.lang.NoSuchFieldError: REFLECTION
2020-09-14 09:13:21.415 INFO org.apache.cxf.service.factory.ReflectionServiceFactoryBean Line:457 - ...
- webpack 项目接入Vite的通用方案介绍(上)
愿景 希望通过本文,能给读者提供一个存/增量项目接入Vite的点子,起抛砖引玉的作用,减少这方面能力的建设成本 在阐述过程中同时也会逐渐完善webpack-vite-serve这个工具 读者可直接fo ...
- Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现
Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...