使用Java API操作HDFS 实验准备:环境配置 实验内容: 注意:实验中目录和文件的命名方式以实验人的姓名命名(不要用汉字),以张三为例,下面的Zhangsan、zs、ZhangS均替换成实验人的姓名全拼或缩写。 (1)将D:\ZhangsanData\zstest01.txt和D:\ZhangsanData\zstest02.txt文件上传到HDFS的“\ZhangS\”。 (2)将HDFS上的“\ZhangS\”下的所有文件下载到“D:\ZhangsanData\”。 (3)在HDFS创建目录“\ZhangS\日期\am”和“\ZhangS\日期\pm”,日期取系统日期,格式yyyymmdd。 (4)将HDFS的“\ZhangS\”下所有文件移动到“\ZhangS\日期\am”下。 (5)将HDFS的“\ZhangS\日期\pm”目录删除。 (6)查看HDFS的“\ZhangS\日期\am”目录下的所有文件详情。
时间: 2023-05-31 22:03:31 浏览: 97
HDFS的java api详解
实验步骤:
1. 确认HDFS已启动,并且Java环境已配置好。
2. 使用Java API上传文件到HDFS。
```java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
public class HdfsTest {
public static void main(String[] args) throws IOException {
// 创建配置对象
Configuration conf = new Configuration();
// 指定HDFS的地址
conf.set("fs.defaultFS", "hdfs://localhost:9000");
// 创建文件系统对象
FileSystem fs = FileSystem.get(conf);
// 上传文件到HDFS
fs.copyFromLocalFile(new Path("D:\\ZhangsanData\\zstest01.txt"), new Path("/ZhangS/zstest01.txt"));
fs.copyFromLocalFile(new Path("D:\\ZhangsanData\\zstest02.txt"), new Path("/ZhangS/zstest02.txt"));
// 关闭文件系统对象
fs.close();
}
}
```
3. 使用Java API下载HDFS上的文件。
```java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
public class HdfsTest {
public static void main(String[] args) throws IOException {
// 创建配置对象
Configuration conf = new Configuration();
// 指定HDFS的地址
conf.set("fs.defaultFS", "hdfs://localhost:9000");
// 创建文件系统对象
FileSystem fs = FileSystem.get(conf);
// 下载文件到本地
fs.copyToLocalFile(new Path("/ZhangS"), new Path("D:\\ZhangsanData"));
// 关闭文件系统对象
fs.close();
}
}
```
4. 使用Java API创建HDFS目录和移动文件。
```java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
public class HdfsTest {
public static void main(String[] args) throws IOException {
// 创建配置对象
Configuration conf = new Configuration();
// 指定HDFS的地址
conf.set("fs.defaultFS", "hdfs://localhost:9000");
// 创建文件系统对象
FileSystem fs = FileSystem.get(conf);
// 创建日期目录
String date = "20220222";
Path amPath = new Path("/ZhangS/" + date + "/am");
Path pmPath = new Path("/ZhangS/" + date + "/pm");
fs.mkdirs(amPath);
fs.mkdirs(pmPath);
// 移动文件到am目录
Path srcPath = new Path("/ZhangS");
Path destPath = new Path("/ZhangS/" + date + "/am");
fs.rename(srcPath, destPath);
// 删除pm目录
fs.delete(pmPath, true);
// 关闭文件系统对象
fs.close();
}
}
```
5. 使用Java API查看HDFS文件详情。
```java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.fs.FileStatus;
import java.io.IOException;
public class HdfsTest {
public static void main(String[] args) throws IOException {
// 创建配置对象
Configuration conf = new Configuration();
// 指定HDFS的地址
conf.set("fs.defaultFS", "hdfs://localhost:9000");
// 创建文件系统对象
FileSystem fs = FileSystem.get(conf);
// 遍历am目录下的文件
Path amPath = new Path("/ZhangS/20220222/am");
RemoteIterator<FileStatus> it = fs.listFiles(amPath, true);
while (it.hasNext()) {
FileStatus fileStatus = it.next();
System.out.println(fileStatus.getPath().toString());
}
// 关闭文件系统对象
fs.close();
}
}
```
阅读全文