sujins 2020-06-13
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("/")); } }