昨天總結了一點本身在搭建Hadoop徹底分佈式環境過程當中遇到的幾個小問題以及解決方案,今天在搭建成功的環境中進行了簡單的文件操做,包括:文件目錄的建立、文件的建立、本地文件的上傳、文件的重命名、文件的刪除以及其餘幾個關於文件的操做,但願對初學的練習者有所幫助。java
1 package org.apache.hadoop.examples; 2 3 4 import java.io.BufferedOutputStream; 5 import java.io.IOException; 6 import java.net.URI; 7 import java.text.SimpleDateFormat; 8 import java.util.Date; 9 10 import org.apache.hadoop.conf.Configuration; 11 import org.apache.hadoop.fs.BlockLocation; 12 import org.apache.hadoop.fs.FSDataOutputStream; 13 import org.apache.hadoop.fs.FileStatus; 14 import org.apache.hadoop.fs.FileSystem; 15 import org.apache.hadoop.fs.Path; 16 import org.apache.hadoop.hdfs.DistributedFileSystem; 17 import org.apache.hadoop.hdfs.protocol.DatanodeInfo; 18 import org.junit.Before; 19 import org.junit.Test; 20 21 public class FileDemo { 22 private Configuration conf = new Configuration();//這裏建立conf對象有一個默認參數,boolean loadDefaults,默認爲true
23 private String rootPath=new String("hdfs://192.168.56.10:9000/"); 24 private FileSystem coreSys=null; 25 /** 26 * 每次執行以前初始化操做,初始化FileSystem核心對象 27 */ 28 @Before 29 public void iniFileSystemObject(){ 30 try { 31 coreSys=FileSystem.get(URI.create(rootPath), conf); 32 } catch (IOException e) { 33 System.out.println("初始化HDFS核心文件對象失敗:"+e.getLocalizedMessage()); 34 } 35 } 36 /** 37 * 在HDFS上建立文件目錄 38 */ 39 @Test 40 public void createDirOnHDFS(){ 41 Path demoDir=new Path(rootPath+"demoDir"); 42 boolean isSuccess=true; 43 try { 44 isSuccess=coreSys.mkdirs(demoDir); 45 } catch (IOException e) { 46 isSuccess=false; 47 } 48 System.out.println(isSuccess?"目錄建立成功!":"目錄建立失敗!"); 49 50 } 51 /** 52 * 在HDFS上建立文件 53 * @throws Exception 54 */ 55 @Test 56 public void createFile() throws Exception{ 57 Path hdfsPath = new Path(rootPath + "user/hdfsupload/createDemoFile"); 58 System.out.println(coreSys.getHomeDirectory()); 59 String content = "Hello hadoop,this is first time that I create file on hdfs"; 60 FSDataOutputStream fsout = coreSys.create(hdfsPath); 61 BufferedOutputStream bout = new BufferedOutputStream(fsout); 62 bout.write(content.getBytes(), 0, content.getBytes().length); 63 bout.close(); 64 fsout.close(); 65 System.out.println("文件建立完畢!"); 66 } 67 /** 68 * 從本地上傳任意文件到服務器HDFS環境 69 * @throws Exception 70 */ 71 @Test 72 public void uploadFile() throws Exception{ 73 Configuration conf = new Configuration(); 74 Path remotePath=new Path(rootPath+"user/"); 75 coreSys.copyFromLocalFile(new Path("D:\\VirtualBox\\Users"), remotePath); 76 System.out.println("Upload to:"+conf.get("fs.default.name")); 77 FileStatus [] files=coreSys.listStatus(remotePath); 78 for(FileStatus file:files){ 79 System.out.println(file.getPath().toString()); 80 } 81 } 82 /** 83 * 重命名文件名 84 */ 85 @Test 86 public void renameFile(){ 87 Path oldFileName=new Path(rootPath+"user/hdfsupload/createDemoFile"); 88 Path newFileName=new Path(rootPath+"user/hdfsupload/renameDemoFile"); 89 boolean isSuccess=true; 90 try { 91 isSuccess=coreSys.rename(oldFileName, newFileName); 92 } catch (IOException e) { 93 isSuccess=false; 94 } 95 System.out.println(isSuccess?"重命名成功!":"重命名失敗!"); 96 } 97 /** 98 * 刪除文件 99 */ 100 @Test 101 public void deleteFile(){ 102 Path deleteFile=new Path(rootPath+"user/hdfsupload/job.jar"); 103 boolean isSuccess=true; 104 try { 105 isSuccess=coreSys.delete(deleteFile, false); 106 } catch (IOException e) { 107 isSuccess=false; 108 } 109 System.out.println(isSuccess?"刪除成功!":"刪除失敗!"); 110 } 111 /** 112 * 查找某個文件是否存在 113 */ 114 @Test 115 public void findFileIsExit(){ 116 Path checkFile=new Path(rootPath+"user/hdfsupload/job.jar"); 117 boolean isExit=true; 118 try { 119 isExit=coreSys.exists(checkFile); 120 } catch (IOException e) { 121 isExit=false; 122 } 123 System.out.println(isExit?"文件存在!":"文件不存在!"); 124 } 125 /** 126 * 查看某個文件的最後修改時間 127 * @throws IOException 128 */ 129 @Test 130 public void watchFileLastModifyTime() throws IOException{ 131 Path targetFile=new Path(rootPath+"user/hdfsupload/renameDemoFile"); 132 FileStatus fileStatus=coreSys.getFileStatus(targetFile); 133 Long lastTime=fileStatus.getModificationTime(); 134 Date date=new Date(lastTime); 135 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 136 System.err.println("文件的最後修改時間爲:"+format.format(date)); 137 } 138 /** 139 * 獲取某個路徑下面的全部文件 140 * @throws IOException 141 */ 142 @Test 143 public void getUnderDirAllFile() throws IOException{ 144 Path targetDir=new Path(rootPath+"user/hdfsupload/"); 145 FileStatus []fileStatus=coreSys.listStatus(targetDir); 146 for(FileStatus file:fileStatus){ 147 System.out.println(file.getPath()+"--"+file.getGroup()+"--"+file.getBlockSize()+"--"+file.getLen()+"--"+file.getModificationTime()+"--"+file.getOwner()); 148 } 149 } 150 /** 151 * 查看某個文件在HDFS集羣的位置 152 * @throws IOException 153 */ 154 @Test 155 public void findLocationOnHadoop() throws IOException{ 156 Path targetFile=new Path(rootPath+"user/hdfsupload/AA.txt"); 157 FileStatus fileStaus=coreSys.getFileStatus(targetFile); 158 BlockLocation []bloLocations=coreSys.getFileBlockLocations(fileStaus, 0, fileStaus.getLen()); 159 for(int i=0;i<bloLocations.length;i++){ 160 System.out.println("block_"+i+"_location:"+bloLocations[i].getHosts()[0]); 161 } 162 163 } 164 /** 165 * 獲取集羣上結點的信息 166 * @throws IOException 167 */ 168 @Test 169 public void getNodeMsgHdfs() throws IOException{ 170 DistributedFileSystem distributedFileSystem=(DistributedFileSystem) coreSys; 171 DatanodeInfo []dataInfos=distributedFileSystem.getDataNodeStats(); 172 for(int j=0;j<dataInfos.length;j++){ 173 System.out.println("DataNode_"+j+"_Name:"+dataInfos[j].getHostName()+"--->"+dataInfos[j].getDatanodeReport()+"-->"+ 174 dataInfos[j].getDfsUsedPercent()+"-->"+dataInfos[j].getLevel()); 175 } 176 } 177 178 }