代码如下
package cn.laojiajun.hdfs_project;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URL;
public class HdfsFileSystem {
@Test
//通过url从hdfs文件系统下载文件
public void downHdfsFile() throws Exception {
//第一步:注册hdfs的驱动文件,表示我们使用hdfs://这种协议访问我们的hdfs文件系统
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
//URL需要接受一个文件访问地址
String url = "hdfs://192.168.88.4:8020/test_dir/测试文件.txt";
//获取到了一个inputStream
InputStream inputSream = new URL(url).openStream();
OutputStream outputStream = new FileOutputStream(new File("C:\\下载文件.txt"));
//通过工具类,将我们的输入流,读取到输出流,里面去
IOUtils.copy(inputSream,outputStream);
//关闭io流
IOUtils.closeQuietly(inputSream);
IOUtils.closeQuietly(outputStream);
}
@Test
//第一种方法获取HDFS文件系统操作对象
public void demo1() throws Exception {
//配置类(Configuration),用于配置
Configuration configuration = new Configuration();
//如果这里不加任何配置,这里获取到的就是本地问价那系统
configuration.set("fs.defaultFS","hdfs://192.168.88.4:8020");
FileSystem fileSystem = FileSystem.get(configuration);
System.out.println(fileSystem.toString());
fileSystem.close();
}
@Test
//第二种方法
public void demo2() throws Exception {
Configuration configuration = new Configuration();
//通过我们制定URI来获取分布式文件系统
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.88.4:8020"),configuration);
System.out.println(fileSystem.toString());
fileSystem.close();
}
@Test
//第三种方法
public void demo3() throws Exception {
Configuration configuration = new Configuration();
configuration.set("fs.defaultFS","hdfs://192.168.88.4:8020");
FileSystem filesystem = FileSystem.newInstance(configuration);
System.out.println(filesystem.toString());
filesystem.close();
}
}
注意需要配置
hadoop.dll 和 winutils.exe