? ? 針對于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
才能得到日志化文件。