HDFS API编程常用HDFS操作实现
使用常见API实现对hdfs文件系统的一系列基础操作即‘增删改查’:
创建HDFS文件夹
输出副本系数
创建文件
查看HDFS文件内容
文件名更改
拷贝本地文件到HDFS文件系统
拷贝本地大文件到HDFS文件系统,带进度条
下载HDFS文件到本地
查看文件夹下所有文件
递归查看文件夹下所有文件
查看文件块信息
删除文件
package com.haglife.bigdata.hadoop.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;
import java.util.Arrays;
public class HDFSBasicOperation {
public static final String HDFS_PATH = "hdfs://masternode:8020";
Configuration configuration = null;
FileSystem fileSystem = null;
@Before
public void setUp() throws Exception {
System.out.println("----------setUp----------");
configuration = new Configuration();
configuration.set("dfs.replication", "2");
/**
* 构造一个访问指定HDFS系统的客户端对象
* 第一个参数:HDFS的URI
* 第二个参数:客户端指定的配置参数
* 第三个参数:客户端的身份即用户名
*/
fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, "uname");
}
// 创建HDFS文件夹
@Test
public void mkdir() throws Exception {
fileSystem.mkdirs(new Path("/hdfsapi/test"));
}
// 输出副本系数
@Test
public void Replication() {
System.out.println(configuration.get("dfs.replication"));
}
// 创建文件
@Test
public void create_text() throws Exception {
FSDataOutputStream out = fileSystem.create(new Path("/hdfsapi/test/maven_intro.txt"));
out.writeUTF("maven翻译为“专家”,“内行”。Maven是Apache下的一个纯java开发的开源项目,它是一个项目管理工具,"
"使用maven对java项目进行构建、依赖管理。当前使用Maven的项目在持续增长。\n");
out.flush();
out.close();
}
// 查看HDFS文件内容
@Test
public void text() throws Exception {
FSDataInputStream in = fileSystem.open(new Path("/hdfsapi/test/maven_intro.txt"));
IOUtils.copyBytes(in, System.out, 1024);
}
// 文件名更改
@Test
public void rename() throws Exception {
Path oldPath = new Path("/hdfsapi/test/maven_intro.txt");
Path newPath = new Path("/hdfsapi/test/maven_introduce.txt");
boolean result = fileSystem.rename(oldPath, newPath);
System.out.println(result);
}
// 拷贝本地文件到HDFS文件系统
@Test
public void copyFromLocalFile() throws Exception {
Path localPath = new Path("E:\\大数据\\hadoop\\...\\temp.txt");
Path targetPath = new Path("/hdfsapi/test/");
fileSystem.copyFromLocalFile(localPath, targetPath);
}
// 拷贝本地大文件到HDFS文件系统,带进度条
@Test
public void copyFromLocalBigFile() throws Exception {
InputStream in = new BufferedInputStream(new FileInputStream(new File("E:\\大数据\\hadoop\\...\\jdk-8u161-linux-x64.tar.gz")));
FSDataOutputStream out = fileSystem.create(new Path("/hdfsapi/test/jdk.tar.gz"),
new Progressable() {
@Override
public void progress() {
System.out.print("#");
}
});
IOUtils.copyBytes(in, out, 4096);
}
// 下载HDFS文件到本地
@Test
public void copyToLocalFile() throws Exception {
Path src = new Path("/hdfsapi/test/maven_introduce.txt");
Path dst = new Path("E:\\大数据\\hadoop\\...\\hdfs");
fileSystem.copyToLocalFile(false, src, dst, true);
}
// 查看文件夹下所有文件
@Test
public void listFiles() throws Exception {
/**
* FileStatus[]包含了:
* private Path path; 路劲
* private long length; 大小
* private boolean isdir; 是否文件夹
* private short block_replication; 块的副本数
* private long blocksize; 块大小
* private long modification_time; 修改时间
* private long access_time; 访问时间
* private FsPermission permission; 权限
* private String owner; 创建者
* private String group;
* private Path symlink;
*/
FileStatus[] statuses = fileSystem.listStatus(new Path("/hdfsapi/test/"));
System.out.println("statuses:" Arrays.toString(statuses));
for(FileStatus file: statuses) {
String path = file.getPath().toString();
String isDir = file.isDirectory() ? "文件夹": "文件";
String permission = file.getPermission().toString();
short replication = file.getReplication();
long length = file.getLen();
System.out.println(path '\t'
isDir '\t'
permission '\t'
replication '\t'
length);
}
}
// 递归查看文件夹下所有文件
@Test
public void listFilesRecursive() throws Exception {
RemoteIterator<LocatedFileStatus> files = fileSystem.listFiles(new Path("/hdfsapi/test/"), true); // 返回一个迭代器
System.out.println(files);
// 迭代 迭代器
while (files.hasNext()) {
LocatedFileStatus file = files.next();
String path = file.getPath().toString();
String isDir = file.isDirectory() ? "文件夹": "文件";
String permission = file.getPermission().toString();
short replication = file.getReplication();
long length = file.getLen();
System.out.println(path '\t'
isDir '\t'
permission '\t'
replication '\t'
length);
}
}
// 查看文件块信息
@Test
public void getFileBlockInfo() throws Exception {
FileStatus fileStatus = fileSystem.getFileStatus(new Path("/hdfsapi/test/jdk.tar.gz"));
System.out.println("fileStatus:" fileStatus);
BlockLocation[] blocks = fileSystem.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
for(BlockLocation block: blocks) {
System.out.println(block);
for(String name: block.getNames()) {
System.out.println(Arrays.toString(block.getHosts()) " - " name " - " block.getOffset() " - " block.getLength());
}
}
}
// 删除文件
@Test
public void delete() throws Exception {
boolean result = fileSystem.delete(new Path("/hdfsapi/test/jdk.tar.gz"), true);
System.out.println(result);
}
@After
public void tearDown() {
configuration = null;
fileSystem = null;
System.out.println("----------tearDown----------");
}
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhefge
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24