使用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分布式文件 ...
随机推荐
- MySQL CONCAT opposite
csv - What is the opposite of GROUP_CONCAT in MySQL? - Stack Overflowhttps://stackoverflow.com/quest ...
- 【翻译】IdentityServer4:基于资源的配置
这篇文章基于https://leastprivilege.com/2016/12/01/new-in-identityserver4-resource-based-configuration/进行翻译 ...
- 【php-fpm】启动PHP报错ERROR: [pool www] cannot get uid for user 'apache'
将@php_fpm_user@改为当前系统的用户名apache, 然后重新启动就ok了 注意:创建apache用户及用户组,上述命令换deamon为apache
- Linux(Ubuntu)使用日记------tenserflow安装(pip安装法)
其实步骤是很简单的,只是一开始在网上找了一份错误的教程的原因,掉入了坑. 安装过程: 1. 检查pip版本 pip3 -V 要求使用最新版的pip 9.0.1,如果不是,按照下面的方法安装最新的pip ...
- 设置QPushbutton按钮背景、鼠标滑过状态、鼠标点击后状态用法
1.1当要设置QPushbutton按钮背景,字体颜色,鼠标滑过状态,鼠标单击后状态时,可以用QSS来设置,具体的代码如下: QPushButton *allSelect = new QPus ...
- C++/CLI泛型应用
2019年01月16日, QQ群友不知道要折腾什么, 提出了以下问题: 样例代码中的是C#语言写的, 翻译成C++/CLI就不会了, 于是我试着谢了一下, 发现可以实现, 于是就贴出来与大家分享, 源 ...
- Hive 执行作业时报错 [ Diagnostics: File file:/ *** reduce.xml does not exist FileNotFoundException: File file:/ ]
2019-03-10 本篇文章旨在阐述本人在某一特定情况下遇到 Hive 执行 MapReduce 作业的问题的探索过程与解决方案.不对文章的完全.绝对正确性负责. 解决方案 Hive 的配置文件 ...
- Markdown初入门(使用Typora编辑)
标题 使用#来实现标题的大小控制 # h1 标题1 ## h2 标题2 ### h3 标题3 #### h4 标题4 ##### h5 标题5 ###### h6 标题6 标题一 标题二 标题三 标题 ...
- H5下拉刷新和上拉加载实现原理浅析
前言 在移动端H5网页中,下拉刷新和上拉加载更多数据的交互方式出现频率很高,开源社区也有很多类似的解决方案,如iscroll,pulltorefresh.js库等.下面是对这两种常见交互基本实现原理的 ...
- JavaWeb之商品查看后历史记录代码实现
JavaWeb之商品查看后历史记录代码实现全过程解析. 历史记录思路图: 假设已经访问了商品 :1-2-3 那么历史记录就是1-2-3,如果访问了商品8,那么历史记录就是:8-1-2-3,如果再次访问 ...