使用Java API操作HDFS文件系统
使用Junit封装HFDS
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.net.URI;
/**
* 使用Java API操作HDFS文件系统
*/
public class HDFSApp {
public static final String HDFS_PATH = "hdfs://localhost:9000";
Configuration conf = null;
FileSystem fs = null;
@Before
public void open() throws Exception{
System.out.println("连接HDFS...");
conf = new Configuration();
// 副本系数为1,配置文件只对shell生效
conf.set("dfs.replication","1");
/**
* 构造一个访问指定HDFS文件系统的客户端对象
* 第一个参数: HDFS的URI
* 第二个参数: 客户端指定的配置参赛
* 第三个参数: 客户端的身份,说白了就是用户名
*/
fs = FileSystem.get(new URI(HDFS_PATH),conf,"hadoop");
}
@After
public void close() throws Exception{
conf = null;
fs = null;
System.out.println("注销连接...");
}
}
创建HDFS文件夹
/**
* 创建HDFS文件夹
*/
@Test
public void mkdir() throws Exception{
fs.mkdirs(new Path("input"));
}
文件上传
/**
* 文件上传
*/
@Test
public void copyFromLocalFile() throws Exception{
fs.copyFromLocalFile(new Path("/home/hadoop/word.txt"),
new Path("input/word.txt"));
}
文件下载
/**
* 文件下载
*/
@Test
public void copyToLocalFile() throws Exception{
fs.copyToLocalFile(new Path("input/word.txt"),
new Path("/home/hadoop/word2.txt"));
}
查看HDFS文件内容
/**
* 查看HDFS文件内容
*/
@Test
public void catFileText() throws Exception{
FSDataInputStream in = fs.open(new Path("input/word.txt"));
IOUtils.copyBytes(in,System.out,1024);
}
列出指定文件夹下的所有内容
/**
* 列出指定文件夹下的所有内容
*/
@Test
public void listFile() throws Exception{
FileStatus[] listStatus = fs.listStatus(new Path("input"));
for (FileStatus file : listStatus) {
String isDir = file.isDirectory()?"文件夹":"文件";
String permission = file.getPermission().toString();
short replication = file.getReplication();
long len = file.getLen();
String path = file.getPath().toString();
// 输出信息
System.out.println(isDir+"\t"+permission+"\t"+
replication+"\t"+len+"\t"+path);
}
}
递归列出指定文件夹下的所有文件(夹)信息
/**
* 递归列出指定文件夹下的所有文件(夹)信息
*/
@Test
public void listAllFiles() throws Exception{
RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("input"),true);
while (files.hasNext()){
LocatedFileStatus file = files.next();
// 获取信息
String isDir = file.isDirectory()?"文件夹":"文件";
String permission = file.getPermission().toString();
short replication = file.getReplication();
long len = file.getLen();
String path = file.getPath().toString();
// 输出信息
System.out.println(isDir+"\t"+permission+"\t"+
replication+"\t"+len+"\t"+path);
}
}
创建HDFS文件,并写入内容
/**
* 创建HDFS文件,并写入内容
*/
@Test
public void create() throws Exception{
FSDataOutputStream out = fs.create(new Path("input/a.txt"));
out.writeUTF("Hello,HDFS!");
out.flush();
out.close();
}
刪除文件/文件夾
/**
* 刪除文件/文件夾
*/
@Test
public void deleteFile() throws Exception{
// true递归删除文件夹,false不删除文件夹,文件则无所谓
fs.delete(new Path("input"),true);
}
HDFS重命名
/**
* HDFS重命名
*/
@Test
public void rename() throws Exception{
fs.rename(new Path("input/word.txt"),new Path("input/input.txt"));
}
列出文件块信息
/**
* 列出文件块信息
*/
@Test
public void getFileBlockLocations() throws Exception{
FileStatus fileStatus = fs.getFileStatus(new Path("input/word.txt"));
BlockLocation[] blocks = fs.getFileBlockLocations(fileStatus, 0,
fileStatus.getLen());
for (BlockLocation block : blocks) {
// 获取文件块名字(多个,被切分)
for (String name:block.getNames()) {
System.out.println(name+":"+block.getOffset()+":"+block.getLength());
}
}
}
使用Java API操作HDFS文件系统的更多相关文章
- Hadoop Java API操作HDFS文件系统(Mac)
1.下载Hadoop的压缩包 tar.gz https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/ 2.关联jar包 在 ...
- 使用Java Api 操作HDFS
如题 我就是一个标题党 就是使用JavaApi操作HDFS,使用的是MAVEN,操作的环境是Linux 首先要配置好Maven环境,我使用的是已经有的仓库,如果你下载的jar包 速度慢,可以改变Ma ...
- hadoop学习笔记(五):java api 操作hdfs
HDFS的Java访问接口 1)org.apache.hadoop.fs.FileSystem 是一个通用的文件系统API,提供了不同文件系统的统一访问方式. 2)org.apache.hadoop. ...
- 使用java api操作HDFS文件
实现的代码如下: import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import ...
- 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 创建目录.写入文件 ...
- JAVA API 实现hdfs文件操作
java api 实现hdfs 文件操作会出现错误提示: Permission denied: user=hp, access=WRITE, inode="/":hdfs:supe ...
- Java API实现Hadoop文件系统增删改查
Java API实现Hadoop文件系统增删改查 Hadoop文件系统可以通过shell命令hadoop fs -xx进行操作,同时也提供了Java编程接口 maven配置 <project x ...
- 大数据-09-Intellij idea 开发java程序操作HDFS
主要摘自 http://dblab.xmu.edu.cn/blog/290-2/ 简介 本指南介绍Hadoop分布式文件系统HDFS,并详细指引读者对HDFS文件系统的操作实践.Hadoop分布式文件 ...
随机推荐
- echarts报表显示%+没有0
function showTablegroup(page) { var series; $.ajax({ type:'post', url:"<%=basePath%>flowA ...
- Shell命令-文件及目录操作之pwd、rm
文件及目录操作 - pwd.rm 1.pwd:显示当前所在位置信息 pwd命令的功能说明 pwd命令用于显示当前工作目录的绝对路径,以便在各个目录间来回切换. pwd命令的语法格式 pwd [OPTI ...
- Shell命令-文件及内容处理之head、tail
文件及内容处理 - head.tail 1. head:显示文件内容头部 head命令的功能说明 head 命令用于显示文件头部内容,默认执行 head 命令会输出文件开头的 10 行. head命令 ...
- Django之缓存、信号和图片验证码
一. 缓存 1. 介绍 缓存通俗来说:就是把数据先保存在某个地方,下次再读取的时候不用再去原位置读取,让访问速度更快. 缓存机制图解 2.Django中提供了6种缓存方式 1. 开发调试 2. 内存 ...
- Hive 口袋手册
2019-04-01 关键字:Hive 学习总结.Hive 基础 . Hive 进阶 .Hive 调优 . Hive 入门手册.Hive PDF 下载 本篇文章系本人就目前所掌握的知识对 Apache ...
- 【UOJ295】【ZJOI2017】线段树 倍增
题目大意 http://uoj.ac/problem/295 题解 考虑像 zkw 线段树一样,从 \([l-1,l-1],[r+1,r+1]\) 这两个区间开始往上跳,直到两个指针碰到一起为止. 先 ...
- Flask 模板系统
模板 基本数据类型 可以执行python语法,如:dict.get(), list['xx'] 比django 更加亲近于 python 传入函数 - django,自动执行 - flask,不自动执 ...
- Windows 10 2016 LTS版本下载与激活
Windows 10 2016 LTS版是针对企业用户推出的长期支持版本,有如下2个优点:1.不会被强制升级.2.去掉小娜,应用商店等不常用的功能,系统相对简洁. 安装文件下载地址如下(x86/x64 ...
- vue学习笔记(三)- vue2.x引入Element-ui
webpack+vue2.x+element-ui 作者:狐狸家的鱼 本文链接:vue2.x引入Element-ui GitHub:sueRimn 1.新建项目 vue init webpack vu ...
- Vim和Neovim安装YouCompleteMe
确定支持Python,Vim一般支持,Neovim默认不支持 Vim的就不介绍方法了,很多系统都不一样.Neovim添加Python支持 pip install setuptools pip inst ...