我是靠谱客的博主 兴奋紫菜,最近开发中收集的这篇文章主要介绍【博学谷学习记录】超强总结,用心分享 | 狂野大数据HDFS的JavaAPI操作~个人学习&复习记录~PART-03,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一、配置
需要先在Windows配置对应版本的hadoop环境
二、涉及的主要类
Configuration:该类的对象封装了客户端或服务器的配置
FileSystem:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作,通过FileSystem的静态方法get获得该对象
FileSystem fs = FileSystem.get(conf);
三、
在使用Java来操作HDFS时,第一步必须获取HDFS的FileSystem对象,该对象代表整个HDFS系统,有个这个对象,就可以对HDFS的上的文件进行增删改查
package pack01;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.yarn.webapp.hamlet2.Hamlet;
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.net.URISyntaxException;
import java.util.Arrays;
public class Demo01HDFS {
private FileSystem filesystem;
//获取filesystem对象
@Before
public void getFileSystem() throws URISyntaxException, IOException, InterruptedException {
filesystem = FileSystem.get(new URI("hdfs://node1:8020"), new Configuration(), "root");
//System.out.println("fileSystem:"+fileSystem);
}
//文件的删除
@Test
public void deleteFile() throws IOException {
boolean delete = filesystem.delete(new Path("/dir"), true);
}
//小文件合并
@Test
public void appendFile() throws IOException {
//获取HDFS大文件输出流
FSDataOutputStream outputStream = filesystem.create(new Path("/big.txt"));
//获取本地每一个文件输入流
File file = new File("E:\train");
File[] files = file.listFiles();
for (File file1 : files) {
FileInputStream inputStream = new FileInputStream(file1);
IOUtils.copy(inputStream,outputStream);
inputStream.close();
}
outputStream.close();
}
//文件上传
@Test
public void upload() throws IOException {
filesystem.copyFromLocalFile(new Path("E:\train\copyFromlocal.txt"),new Path("/dir"));
}
//文件下载-方式2
@Test
public void download2() throws IOException {
filesystem.copyToLocalFile(new Path("/dir/2.txt"),new Path("E:\train\222.txt"));
}
//文件下载-方式1
@Test
public void downlowd1() throws IOException {
//1:获取HDFS文件的输入流
FSDataInputStream inputStream = filesystem.open(new Path("/dir/1.txt"));
//2:获取本地文件的输出流
FileOutputStream outputStream = new FileOutputStream("E:\train\111.txt");
//3:实现文件的复制
IOUtils.copy(inputStream,outputStream);
//4:关流
outputStream.close();
inputStream.close();
}
//递归创建目录
@Test
public void mkdir() throws IOException {
boolean mkdirs = filesystem.mkdirs(new Path("/xxx/yyy/zzz"));
}
//遍历目录
@Test
public void listFiles() throws IOException {
RemoteIterator<LocatedFileStatus> iterator = filesystem.listFiles(new Path("/"), true);
while (iterator.hasNext()) {
LocatedFileStatus fileStatus = iterator.next();
// System.out.println(fileStatus.getPath().getName()); //获取文件名
System.out.println(fileStatus.getPath().toString()); //获取文件绝对路径
long blockSize = fileStatus.getBlockSize(); //获取block大小
// System.out.println(blockSize/1024/1024 + "M");
short replication = fileStatus.getReplication(); //获取文件副本数
// System.out.println(replication);
BlockLocation[] blockLocations = fileStatus.getBlockLocations(); //获取block的位置数组
// System.out.println(blockLocations.length); //获取文件block数
for (BlockLocation blockLocation : blockLocations) {
// String[] names = blockLocation.getNames(); //获取每个block副本所在主机的ip地址
// System.out.println(Arrays.toString(names));
String[] hosts = blockLocation.getHosts(); //获取每个副本所在的主机名
System.out.println(Arrays.toString(hosts));
}
}
}
}
最后
以上就是兴奋紫菜为你收集整理的【博学谷学习记录】超强总结,用心分享 | 狂野大数据HDFS的JavaAPI操作~个人学习&复习记录~PART-03的全部内容,希望文章能够帮你解决【博学谷学习记录】超强总结,用心分享 | 狂野大数据HDFS的JavaAPI操作~个人学习&复习记录~PART-03所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复