针对于04-05-06班级整合。
1.创建java项目

2.修改pom.xml文件
添加依赖
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>

3.创建一个名为HdfsTest类,在类中编写单元测试代码测试API中的每个方法

(1)查看HDFS根目录下的文件或子目录,并将名称打印在控制台
//单元测试 每个操作放在一个测试方法中, 选中方法名---》右击 运行testList()
@Test
public void testList() throws Exception{
//1.创建配置对象
Configuration conf = new Configuration();
//2.获取文件系统对象 yt启动集群的用户名
// FileSystem fs = FileSystem.get(conf);
FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");
//3.获取HDFS根目录下的子目录和文件
FileStatus []files =fs.listStatus( new Path("/"));
//4.循环所有的files
for(FileStatus f:files){
//判断是文件还是目录
if(f.isFile()){
System.out.println( "f: "+f.getPath().getName() );
}else {
System.out.println(" d: "+f.getPath().getName());
}
}
//关闭资源
fs.close();
}

控制台输出的结果:

(2)创建目录
//创建目录
@Test
public void testMkdirs() throws Exception{
//1.创建配置对象
Configuration conf = new Configuration();
//2.获取文件系统对象 yt启动集群的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");
fs.mkdirs(new Path("/hdfs/2306"));
//关闭资源
fs.close();
}
测试结果:

(3)删除非空目录
//删除文件或目录
@Test
public void testDelete() throws Exception{
//1.创建配置对象
Configuration conf = new Configuration();
//2.获取文件系统对象 yt启动集群的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");
fs.delete(new Path("/output-2302-order"),true);
//关闭资源
fs.close();
}

(4)文件上传
//文件上传
@Test
public void testCopyFromLocalFile() throws Exception{
//1.创建配置对象
Configuration conf = new Configuration();
//2.获取文件系统对象 yt启动集群的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");
fs.copyFromLocalFile(new Path("D:\\software\\apache-maven-3.8.6.rar"),new Path("/hdfs/2306/"));
//关闭资源
fs.close();
}

(5)文件下载
//文件下载
@Test
public void testCopyToLocalFile() throws Exception{
//1.创建配置对象
Configuration conf = new Configuration();
//2.获取文件系统对象 yt启动集群的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");
fs.copyToLocalFile(new Path("/bigdata/order.txt"),new Path("D:\\software\\"));
//关闭资源
fs.close();
}
(6)读取HDFS上的序列化文件,将数据保存到D:\\software\\raceData.txt
//读取序列化文件中的数据保存到本次磁盘
@Test
public void testSequenceFileRead() throws Exception{
//1.创建配置对象
Configuration conf = new Configuration();
//2.获取文件系统对象 yt启动集群的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");
SequenceFile.Reader reader = new SequenceFile.Reader(fs,new Path("/ouput-2301-select/part-m-00000"),conf);
//创建文件对象
File file = new File("D:\\software\\raceData.txt");
//创建字节流对象
OutputStream out = new FileOutputStream(file);
//创建缓冲字符输出流对象
BufferedWriter bw =new BufferedWriter( new OutputStreamWriter(out) );
Text key =new Text();
Text val =new Text();
while( reader.next(key,val) ){
bw.write( key.toString()+"\t" +val.toString() );
bw.newLine();
}
bw.flush();
//关闭资源
bw.close();
out.close();
fs.close();
}


代码中的part-m-0000文件,需要完成 --筛选日志并生成序列化文件
https://blog.csdn.net/lydia88/article/details/138184788
才能得到日志化文件。













![[图解]SysML和EA建模住宅安全系统-04](https://img-blog.csdnimg.cn/direct/5f854a210e154ddabb49e6bd925b967e.png)





