针对于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.循环所有的filesfor(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
才能得到日志化文件。