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 ...
随机推荐
- 绚丽的色彩从何而来_LOTO示波器实测WS2812B系LED光源
绚丽的色彩从何而来_LOTO示波器实测WS2812B系LED光源 不管你对 "RGB性能狂升300%" 的梗认同不认同,不可否认,绚丽的彩色很是酷炫,在现在市面上带"灯& ...
- JVM-内存区域与OOM
本篇博客内容主要参考<深入理解Java虚拟机> 内存区域与内存溢出异常 运行时数据区 Java虚拟机运行时数据区: 程序计数器(Program Counter Register)是一块较小 ...
- aardio 开发桌面应用,这几点必须要掌握!
1. 前言 大家好,我是安果! 上一篇文章写到可以通过 aardio 结合 Python 开发桌面应用,有些小伙伴后台给我留言,说 Aardio 资料太少,希望我能补充一些实用的功能 实用 | 利用 ...
- mapper接口绑定异常
前言 由于MP的代码生成器把mapper接口绑定的写sql语句xml文件创建在java目录下,而Maven加载机制只会将.java文件编译成.class文件,所以在target目录下找不到写xml文件 ...
- Mac卸载go
1.删除go目录 一般目录是 /usr/local/go sudo rm -rf /usr/local/go 2.清除环境变量配置 3. mac安装go后自动创建的问题也需要删除 sudo rm -r ...
- 逐浪CMSv8.2发布-集成Node与Vue脚手架和PowerShell支持的新一代网站管理系统
极速下载:https://www.z01.com/down/3713.shtml 楼倚霜树外,镜天无一毫. 南山与秋色,气势两相高. -(唐)杜牧 北京时间2020年10月20日:领先的CMS与web ...
- CefSharp-基于C#的客户端开发框架技术栈开发全记录
CefSharp简介 源于Google官方 CefSharp用途 CefSharp开发示例 CefSharp应用--弹窗与右键 不弹出子窗体 禁用右键 CefSharp应用--High DPI问题 缩 ...
- vue + cesium开发(4) 绘制图形
在官方例子中每个图形都是一个entity,官方例子提供了显示正方形.圆形.锥形.图片等多种案例! // 初始花 var viewer = new Cesium.Viewer("cesiumC ...
- Linux(kali)基础设置
本笔记的友情链接 常用目录介绍 boot 存放启动文件 dev 存放设备文件 etc 存放配置文件 home 普通用户家目录,以/home/$username的方式存放 media 移动存储自动挂载目 ...
- Java LinkedList小记
1. 基本用法 LinkedList实现了List.Deque.Queue接口,可以按照队列.栈和双端队列的方式进行操作.LinkedList有两个构造方法,一个是默认构造,另一个接受Collecti ...