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 ...
随机推荐
- k8s入坑之路(15)kubernetes共享存储与StatefulSet有状态
共享存储 docker默认是无状态,当有状态服务时需要用到共享存储 为什么需要共享存储: 1.最常见有状态服务,本地存储有些程序会把文件保存在服务器目录中,如果容器重新启停则会丢失. 2.如果使用vo ...
- 准备 dubbo 学习目录
1. dubbo 背景及原理2. dubbo 架构分析4. dubbo 设计模式分析5. dubbo 实战使用6. dubbo 优化
- c#.net 实现短网址的简单方法
短网址,现在很流行了,本文为大家介绍用c#.net实现短网址的方法,有兴趣的朋友,不妨参考下. 短网址,也被叫做网址缩短.网址压缩选装. 这里我们用一个例子来说明其原理吧,假如您带了一包东西去超市购物 ...
- Django笔记&教程 0-2 框架版本与相关工具
Django 自学笔记兼学习教程第0章第2节-- 框架版本与相关工具 点击查看教程总目录 1 版本 python: 3.6.5 Django: 2.2.11 (有些地方我也会对比下各种版本的区别) 安 ...
- Django笔记&教程 2-1 URL与View关系
Django 自学笔记兼学习教程第2章第1节--URL与View关系 点击查看教程总目录 参考:how-django-processes-a-request 1- Django处理请求(request ...
- Linux——搭建Apache(httpd)服务器
一.基本概念 Apache(或httpd)是Internet上使用最多的Web服务器技术之一,使用的传输协议是http超文本传输协议(一个基于超文本的协议),用于通过网络连接来发送和接受对象. 有两个 ...
- react之路由
功能:让用户从一个视图(组件)导航到另一个视图(组件) 前端路由是一套映射规则,在React中,是URL路径与组件的对应关系 使用React路由简单来说,就是配置路径和组件 路由的使用 1.安装路由 ...
- [hdu7044]Fall with Fake Problem
二分$T$和$S$第一个不同的位置,即需要对于$s$,判定是否存在$T[1,s]=S[1,s]$且满足条件的$T$ (注:这里的 ...
- [luogu4718]Pollard-Rho算法
模板题 题解主要分为两部分,即Miller-Robin判素数以及关于Pollard-Rho算法 1.Miller-Robin判素数 对于一个数$n$,判定其是否为素数,依次执行以下几步-- (1)若$ ...
- [luogu4259]寻找车位
考虑一个分治的做法:按行分治,将所有区间分为两类--经过分割线的.在左/右区间内部,后者显然可以递归下取,考虑前者 先求出出该行上每一列向上和向下的最大长度,记作$up_{i}$和$down_{i}$ ...