package com.atguigu.java;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
/**
* 1.创建对象
* 2.操作对应的流程
* 3.关资源
*/
public class HDFSTest {
FileSystem fs;
Configuration conf;
/**
* 1.创建文件系统的对象
*
* 2.配置文件的顺序(最大的就是最后生效的)
* conf > 工程下的xxx-site.xml > 集群中xxx-site.xml > 集群中xxx-default.xml
*/
@Before //在执行任意一个单元测试前执行该方法
public void createObject() throws IOException, InterruptedException {
//1.获取文件系统对象
conf = new Configuration();
//配置副本数 - 该配置只针对本次的操作有效。
// conf.set("dfs.replication","1");
/*
final URI uri : hdfs的集群操作路径 - hdfs://hadoop102:9820
final Configuration conf : 配置文件的对象
final String user : 操作集群的用户
*/
fs = FileSystem.get(URI.create("hdfs://hadoop102:9820"), conf, "atguigu");
}
@After //在执行完任意一个单元测试后再执行该方法
public void colse(){
//3.关资源
if (fs != null) {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 上传
* @throws IOException
* @throws InterruptedException
*/
@Test
public void upload() throws IOException, InterruptedException {
//2.具体的操作
/**
* boolean delSrc--是否删除源文件
* boolean overwrite --如果目标地址如果已经存在和上传对象一样名字的文件是否覆盖
* --如果为true,那么就覆盖。如果为false但名字又相同那么就抛异常
* Path src--源文件
* Path dst--目标地址
*/
fs.copyFromLocalFile(false,false,
new Path("D:\\testfile\\zhixingheyi.txt"),new Path("/"));
}
}