赞
踩
目录
·Hadoop整合了众多文件系统,HDFS只
类或接口 | 功能描述 |
---|---|
org.apache.hadoop.fs.FileSystem | 一个通用文件系统的抽象基类,可被分布式文件系统继承。 |
org.apache.hadoop.fs.FileStatus | 文件状态接口,用于向客户端展示系统中文件和目录的元数据。具体包括文件大小、块大小、副本信息、所有者、修改时间等,可通过FileSystem.listStatus()方法获得具体的实例对象。 |
org.apache.hadoop.fs.FileDataInputStream | 文件输入流,用于读取Hadoop文件。 |
org.apache.hadoop.fs.FileDataOutputStream | 文件输出流,用于写Hadoop文件。 |
org.apache.hadoop.fs.Configuration | 访问配置项,所有配置项的值,如果在core-site.xml中有对应的配置,则以core-site.xml为准。 |
org.apache.hadoop.fs.Path | 路径,用于表示Hadoop文件系统中的一个文件或一个目录的路径。 |
org.apache.hadoop.fs.PathFilter | 路径过滤器接口,通过实现方法PathFilter.accept(Path path)来判断是否接收路径path表示的文件或目录。 |
方法名 | 功能描述 |
---|---|
copyFromLocalFile(Path src, Path dst) | 从本地磁盘复制文件到HDFS |
copyToLocalFile(Path src, Path dst) | 从HDFS复制文件到本地磁盘 |
mkdirs(Path f) | 建立子目录 |
rename(Path src, Path dst) | 重命名文件或文件夹 |
delete(Path f) | 删除指定文件 |
·单机【Finish】按钮
·在pom.xml
文件里添加hadoop
和junit
依赖
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
</dependencies>
·进入/https://mvnrepository.com/
·搜索hadoop,选择3.3.4扳本,复制红色边框内依赖
·在resources
目录里创建log4j.properties
文件
log4j.rootLogger=stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/hdfs.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%
·在主节点上执行命令:start-dfs.sh
`在Hadoop WebUI界面查看
·创建net.hw.hdfs
包,在包里创建CreateFileOnHDFS
类
·在HDFS上有/ied01
目录,在该目录里创建hadoop.txt
文件
package net.zhj.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.net.URI;
/**
* 功能:在HDFS上创建文件
*/
public class CreateFileOnHDFS {
public static void main(String[] args) throws Exception {
// 创建配置对象
Configuration conf = new Configuration();
// 定义uri字符串
String uri = "hdfs://master:9000";
// 创建文件系统对象
FileSystem fs = FileSystem.get(new URI(uri), conf);
// 创建路径对象
Path path = new Path(uri + "/ied01/hadoop.txt");
// 创建文件
boolean result = fs.createNewFile(path);
// 判断是否创建成功
if (result) {
System.out.println("文件[" + path + "]创建成功!");
} else {
System.out.println("文件[" + path + "]创建失败!");
}
}
}
注意:导包千万不要导错了
·运行程序,查看结果
·利用HDFS集群WebUI查看
·再次运行程序,由于hadoop.txt
已经存在,此时会提示用户创建失败
·创建 CreateFileOnHDFS_
类
·在HDFS上判断 /ied01/hadoop.txt是否存在
package net.zhj.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.net.URI; /*事件判断文件是否存在*/ public class CreateFileOnHDFS_ { public static void main(String[] args) throws Exception { // 创建配置对象 Configuration conf = new Configuration(); // 定义统一资源标识符 String uri = "hdfs://master1:9000"; // 创建文件系统对象 FileSystem fs = FileSystem.get(new URI(uri), conf); // 创建路径对象 Path path = new Path(uri + "/ied01/hadoop.txt"); // 判断路径对象指定的文件是否存在 if (fs.exists(path)){ //提示用户文件已存在 System.out.println("文件"+path+"已存在"); }else { // 创建文件 boolean result = fs.createNewFile(path); // 判断文件是否创建成功 if (result) { System.out.println("文件[" + path + "]创建成功!"); } else { System.out.println("文件[" + path + "]创建失败!"); } } } }
·运行程序,包已存在
·此时怎么出现创建失败的情况呢?让HDFS 进入安全模式(只读,不能写)
·删除已经创建的 ied01/hadoop.txt
·执行命令: hdfs dfsadmin -safemode enter(leave 离开)
·此时,再次运行程序,查看结果,抛出SafeModeException异常
·下面,修改程序,来处理可能会抛出的安全模式异常
·运行程序,查看结果
·关闭安全模式
·再次运行程序,查看结果
·在net.hw.hdfs
包里创建WriteFileOnHDFS
类
package net.zhj.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.junit.Test; import java.net.URI; public class WriteFileOnHDFS { @Test public void write1() throws Exception { // 创建配置对象 Configuration conf = new Configuration(); // 设置数据节点主机名属性(不写入,会报错) conf.set("dfs.client.use.datanode.hostname", "true"); // 定义uri字符串 String uri = "hdfs://master1:9000"; // 创建文件系统对象 FileSystem fs = FileSystem.get(new URI(uri), conf); // 创建路径对象(指向目录或文件) Path path = new Path(uri + "/ied01/hello.txt"); // 创建文件系统数据字节输出流 FSDataOutputStream out = fs.create(path); // 通过字节输出流向文件写数据 out.write("Hello Hadoop World".getBytes()); // 关闭输出流 out.close(); // 关闭文件系统对象 fs.close(); } }
`运行write1()
测试方法,查看结果
`利用HDFS集群WebUI查看hello.txt
文件
`在项目根目录创建一个文本文件test.txt
创建write2()
方法
@Test public void write2() throws Exception { // 创建配置对象 Configuration conf = new Configuration(); // 设置数据节点主机名属性(不写入,会报错) conf.set("dfs.client.use.datanode.hostname", "true"); // 定义uri字符串 String uri = "hdfs://master1:9000"; // 创建文件系统对象 FileSystem fs = FileSystem.get(new URI(uri), conf); // 创建路径对象(指向目录或文件) Path path = new Path(uri + "/ied01/exam.txt"); // 创建文件系统数据输出流对象 FSDataOutputStream out = fs.create(path); // 创建文件字符输入流 FileReader fr = new FileReader("test.txt"); // 创建缓冲字符输入流 BufferedReader br = new BufferedReader(fr); // 定义行字符串 String nextLine =""; // 通过循环读取缓冲字符输入流 while ((nextLine =br.readLine())!=null){ // 在控制台输出读取的行 System.out.println(nextLine); // 通过文件系统数据字节输出流对象写入指定文件 out.write(nextLine.getBytes()); } // 关闭输出流 out.close(); // 关闭缓冲流 br.close(); // 关闭文件输入流 fr.close(); //提示 System.out.println("文件[test.txt]成功写入"+path+"]!"); }
·运行write2(),查看结果
·创建write3()方法
- @Test
- public void write3() throws Exception{
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建路径对象(指向目录或文件)
- Path path = new Path(uri + "/ied01/test.txt");
- // 创建文件系统数据输出流对象
- FSDataOutputStream out = fs.create(path);
- // 创建文件字节输入流对象
- FileInputStream in = new FileInputStream("test.txt");
- // 利用IOUtils类提供的字节拷贝方法来复制文件
- IOUtils.copyBytes(in,out,conf);
- in.close();
- out.close();
- fs.close();
- System.out.println("文件[test.txt]成功写入"+path+"]!");
- }
·注意导包问题
·运行write3()
测试方法,查看结果
·查看/ied01/test.txt
内容
`在net.zhj.hdfs
包里创建ReadFileOnHDFS
类
·准备读取hdfs://master:9000/ied01/test.txt
文件
编写read1()
方法
- package net.zhj.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FSDataInputStream;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.junit.Test;
-
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.net.URI;
-
- public class ReadFileOnHDFS {
- @Test
- public void read1() throws Exception{
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建路径对象(指向目录或文件)
- Path path = new Path(uri + "/ied01/test.txt");
- //创建文件系统数据字节输入流对象
- FSDataInputStream in =fs.open(path);
- // 创建缓冲字符输入流对象,提高读取效率
- BufferedReader br = new BufferedReader(new InputStreamReader(in));
- //定义行字符串
- String nextLine = "";
- //通过循环读取缓冲字符输入流
- while ((nextLine = br.readLine()) != null){
- //在控制台输出内容
- System.out.println(nextLine);
- }
- br.close();
- in.close();
- fs.close();
- }
- }
·运行read1()
测试方法,查看结果
·其实,我们可以使用IOUtils类来简化代码
- @Test
- public void read1_() throws Exception {
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建路径对象(指向目录或文件)
- Path path = new Path(uri + "/ied01/test.txt");
- //创建文件系统数据字节输入流对象
- FSDataInputStream in = fs.open(path);
- // 读取文件在控制台输出
- IOUtils.copyBytes(in,System.out,4096,false);
- in.close();
- fs.close();
- }
·再运行read1_()
测试方法,查看结果
`任务:将/ied01/test.txt
下载到项目下download
目录里
·创建download
目录
·创建read2()
方法
- @Test
- public void read2() throws Exception {
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建路径对象(指向目录或文件)
- Path path = new Path(uri + "/ied01/test.txt");
- //创建文件系统数据字节输入流对象
- FSDataInputStream in = fs.open(path);
- // 创建文件字节输出流
- FileOutputStream out =new FileOutputStream("download/exam.txt");
- // 读取文件在控制台输出
- IOUtils.copyBytes(in, out, conf);
- in.close();
- out.close();
- fs.close();
- //提示
- System.out.println("文件["+path+"]下载到本地文件[download/exam.txt]");
- }
· 运行read2()
测试方法,查看结果
·任务:将 /ied01 目录更名为 /lzy01
·在net.zhj.hdfs
包里创建RenameDirOrFile
类
(1)重命名目录
`编写renameDir()
方法
- package net.zhj.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.junit.Test;
-
- import java.net.URI;
-
- public class RenameDirOrFile {
- @Test
- public void renameDir() throws Exception{
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建原路径对象
- Path sourcePath = new Path("/ied01");
- // 创建目标路径对象
- Path targetPath = new Path("/lzy01");
- // 利用文件系统对象重命名目录
- fs.rename(sourcePath,targetPath);
- fs.close();
- System.out.println("目录"+sourcePath.getName()+"更名为"+targetPath.getName()+"成功!");
-
- }
- }
· 运行renameDir()
方法,查看结果
·利用HDFS集群WebUI界面查看
·任务:将lzy01
目录下的hello.txt
重命名为hi.txt
。
·编写renameFile()
方法
- @Test
- public void renameFile() throws Exception {
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建原路径对象
- Path sourcePath = new Path("/lzy01/hello.txt");
- // 创建目标路径对象
- Path targetPath = new Path("/lzy01/hi.txt");
- // 利用文件系统对象重命名目录
- fs.rename(sourcePath, targetPath);
- fs.close();
- System.out.println("文件" + sourcePath.getName() + "更名为" + targetPath.getName() + "成功!");
- }
·运行renameFile()
测试方法,查看结果
·利用HDFS集群WebUI界面查看
·在net.zhj.hdfs
包里创建ListHDFSFiles
类
`任务:显示/lzy01
目录下的文件列表
`编写list1()
方法
- package net.zhj.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.LocatedFileStatus;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.fs.RemoteIterator;
- import org.junit.Test;
-
- import java.net.URI;
-
- public class ListHDFSFiles {
- @Test
- public void list1() throws Exception{
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建远程迭代器对象,泛型是位置本地文件状态(相当于:hdfs dfs -ls -R /lzy01)
- RemoteIterator<LocatedFileStatus> ri = fs.listFiles(new Path("/lzy01"),true);
- // 遍历远程迭代器
- while (ri.hasNext()){
- System.out.println(ri.next());
- }
- }
- }
运行list1()
测试方法,查看结果
·上述文件状态对象封装的有关信息,可以通过相应的方法来获取,比如getPath()
方法就可以获取路径信息
·编写list2()
方法
- @Test
- public void list2() throws Exception {
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建远程迭代器对象,泛型是位置本地文件状态(相当于:hdfs dfs -ls -R /lzy01)
- RemoteIterator<LocatedFileStatus> ri = fs.listFiles(new Path("/lzy01"), true);
- // 遍历远程迭代器
- while (ri.hasNext()) {
- LocatedFileStatus lfs = ri.next();
- System.out.println(lfs.getPath()+" "+lfs.getLen()+"字节");
- }
- }
·运行list2()
测试方法,查看结果
·上传一个大于128MB的文件,比如hadoop-3.3.4.tar.gz
,到/lzy01
目录
· 在net.zhj.hdfs
包里创建GetBlockLocations
类
` 编写代码,获取文件块信息
- package net.zhj.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.BlockLocation;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
-
- import java.net.URI;
- import java.util.Arrays;
-
- public class GeiBlockLocations {
- public static void main(String[] args) throws Exception {
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建路径对象,指向文件
- Path path = new Path("/lzy01/hadoop-3.3.4.tar.gz");
- // 获取文件块信息
- BlockLocation[] blks = fs.getFileBlockLocations(path,0,Integer.MAX_VALUE);
- // 遍历块信息
- for (BlockLocation blk : blks) {
- System.out.println(blk);
- }
- }
- }
`运行程序,查看结果
由此可见,hadoop-3.3.4.tar.gz被hadoop物理切分成6块,前5块长度均为134217728字节(128MB),第6块长度为24369142字节(23.24MB)。
`利用HDFS集群WebUI界面也可以查看文件分块信息
`在net.zhj.hdfs
包里创建MakeDirOnHDFS
类
`任务:在HDFS上创建/ied01
目录
- package net.zhj.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
-
- import java.io.IOException;
- import java.net.URI;
- import java.net.URISyntaxException;
-
- public class MakeDirOnHDFS {
- public static void main(String[] args) throws URISyntaxException, IOException {
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性(不写入,会报错)
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master1:9000";
- // 创建目录系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建路径对象,指定路径
- Path path = new Path(uri+"/ied01");
- boolean result = fs.createNewFile(path);
- // 判断目录是否创建成功
- if (result) {
- System.out.println("文件[" + path + "]创建成功!");
- } else {
- System.out.println("文件[" + path + "]创建失败!");
- }
- }
-
- }
`运行程序,查看结果
`利用HDFS集群WebUI界面查看
`在net.zhj.hdfs
包里创建DirExistsOrNot
类
`任务:判断HDFS上/ied01
目录是否存在
- package net.zhj.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
-
- import java.net.URI;
-
- public class DirExistsOrNot {
- public static void main(String[] args) throws Exception {
- Configuration conf = new Configuration();
- conf.set("dfs.client.use.datanode.hostname", "true");
- String uri = "hdfs://master1:9000";
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- Path path = new Path("/ied01");
- boolean result = fs.exists(path);
- if (result) {
- System.out.println("目录[" + path + "]存在!");
- } else {
- System.out.println("目录[" + path + "]不存在!");
- }
- }
- }
` 运行程序,查看结果
·在net.zhj.hdfs
包里创建PathToFileOrDir
类
- package net.zhj.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
-
- import java.net.URI;
-
- /**
- * 功能:判断路径指向目录还是文件
- */
- public class PathToFileOrDir {
- public static void main(String[] args) throws Exception {
- // 创建配置对象
- Configuration conf = new Configuration();
- // 设置数据节点主机名属性
- conf.set("dfs.client.use.datanode.hostname", "true");
- // 定义uri字符串
- String uri = "hdfs://master:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf, "root");
-
- // 创建路径对象,指向目录
- Path path1 = new Path("/ied01");
- if (fs.isDirectory(path1)) {
- System.out.println("[" + path1 + "]指向的是目录!");
- } else {
- System.out.println("[" + path1 + "]指向的是文件!");
- }
-
- // 创建路径对象,指向文件
- Path path2 = new Path("/lzy01/test.txt");
- if (fs.isFile(path2)) {
- System.out.println("[" + path2 + "]指向的是文件!");
- } else {
- System.out.println("[" + path2 + "]指向的是目录!");
- }
- }
- }
·运行查看结果
·在net.zhj.hdfs
包里创建DeleteFileOrDir
类
·任务:删除/lzy01/hi.txt
文件
编写deleteFile()
方法
判断是否存在
- package net.zhj.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.junit.Test;
-
- import java.net.URI;
-
- public class DeleteFileOrDir {
- @Test
- public void deleteFile() throws Exception{
- Configuration conf = new Configuration();
- conf.set("dfs.client.use.datanode.hostname", "true");
- String uri = "hdfs://master1:9000";
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- //创建路径对象(指向文件)
- Path path = new Path(uri+"/lzy01/hi.txt");
- // 判断指定对象是否存在
- if (fs.exists(path)) {
- boolean result = fs.delete(path, true);
- if (result) {
- System.out.println("文件[" + path + "]删除成功!");
- } else {
- System.out.println("文件[" + path + "]删除失败!");
- }
- }else {
- System.out.println("文件"+path+"不存在!");
- }
- }
- }
`运行deleteFile()
测试方法,查看结果
·如果文件不存在
`利用HDFS集群WebUI界面查看
·任务:删除/lzy01
目录
·编写deleteDir()
方法
- package net.zhj.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.junit.Test;
-
- import java.net.URI;
-
- public class DeleteFileOrDir {
- @Test
- public void deleteFile() throws Exception{
- Configuration conf = new Configuration();
- conf.set("dfs.client.use.datanode.hostname", "true");
- String uri = "hdfs://master1:9000";
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- //创建路径对象(指向目录)
- Path path = new Path(uri+"/lzy01");
- // 判断指定对象是否存在
- if (fs.exists(path)) {
- boolean result = fs.delete(path, true);
- if (result) {
- System.out.println("目录[" + path + "]删除成功!");
- } else {
- System.out.println("目录[" + path + "]删除失败!");
- }
- }else {
- System.out.println("目录"+path+"不存在!");
- }
- }
- }
·运行查看结果
·再次运行
(3)删除目录或文件
·进行三个层面的判断:判断类型(目录或文件)、判断是否存在、判断删除是否成功。
·任务:删除/ied02
目录下的hello.txt
`编写delete()
方法
- @Test
- public void delete() throws Exception{
- Configuration conf = new Configuration();
- conf.set("dfs.client.use.datanode.hostname", "true");
- String uri = "hdfs://master1:9000";
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 定义随机对象
- Random random =new Random();
- // 产生随机整数-[0,1]
- int choice = random.nextInt(100)%2;
- // 定义路径字符串
- String[] strPath = {"/ied02/hello.txt","/lzy01"};
- // 创建路径对象(指向目录或文件)
- Path path = new Path(uri+strPath[choice]);
- // 判断类型(文件或目录)
- String type = "";
- if (fs.isDirectory(path)){
- type="目录";
- }else {
- type="文件";
- }
- // 判断是否存在
- if (fs.exists(path)){
- // 删除路径对象指向的目录或文件
- boolean result = fs.delete(path,true);
- // 判断是否删除成功
- if (result){
- System.out.println(type+"["+path+"]"+"删除成功");
- }else {
- System.out.println("删除失败!");
- }
- }else {
- System.out.println(type+"["+path+"]"+"不存在!");
- }
- }
`运行delete()
测试方法,查看结果
·再次运行
·再次运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。