mapreduce面試題一
阿新 • • 發佈:2018-10-31
1.編寫程式統計出HDFS檔案系統中檔案大小小於HDFS叢集中的預設塊大小的檔案佔比
比如:大於等於128M的檔案個數為98,小於128M的檔案總數為2,所以答案是2%
package com.test.a; 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; /** * 編寫程式統計出 HDFS 檔案系統中檔案大小小於 HDFS 叢集中的預設塊大小的檔案佔比 * 比如:大於等於 128M 的檔案個數為 98,小於 128M 的檔案總數為 2,所以答案是 2% * @author Administrator * */ public class T5 { private static int DEFAULT_BLOCKSIZE = 128 * 1024 * 1024; /** * 使用Junit進行測試 * @throws Exception */ @Test public void Test() throws Exception{ Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://hdp1:9000"); System.setProperty("HADOOP_USER_NAME", "hadoop"); FileSystem fs = FileSystem.get(conf); Path path = new Path("/"); int smallFile = 0; int totalFile = 0; //fs.listStatus(path); //獲取的是指定路徑下的所有資源,包括資料夾和檔案,但是不包括子資料夾下的檔案 //獲取指定目錄下的所有的檔案 RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(path, false); while(listFiles.hasNext()){ //指定目錄下檔案計數器 totalFile++; LocatedFileStatus next = listFiles.next(); //獲取每個檔案的大小 long len = next.getLen(); //如果小於預設block塊的大小,則視為小檔案 if(len < DEFAULT_BLOCKSIZE){ //指定目錄下小檔案計數器 smallFile++; } } //計算小檔案的佔比,並輸出 String result = (smallFile * 1f /totalFile * 100)+"%"; System.out.println(result); fs.close(); } }